欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Levenberg–Marquardt算法

算法描述及示例引用自“Machine Learning An Algorithm Perspective 2nd Edition”

使用C++進(jìn)行浮點(diǎn)數的比較時(shí),一定要注意容差問(wèn)題。

#include <iostream>#include <math.h>#include <Eigen/Core>#include <Eigen/Dense>using namespace std;double rx(const Eigen::MatrixXd &x,int i){    switch(i)    {        case 0: return 10*(x(1,0) - x(0,0) * x(0,0));        case 1: return 1-x(0,0);     }    return INT_MAX;}double fx(const Eigen::MatrixXd &x){    return 100 *(x(1,0) - x(0,0) * x(0,0)) * (x(1,0) - x(0,0) * x(0,0)) + (1-x(0,0)) * (1-x(0,0));}double Jac(const Eigen::MatrixXd &x,int i,int j){    int index = 2*i+j;    switch(index)    {    case 0: return -20 * x(0,0);    case 1: return 10.0;    case 2: return -1.0;    case 3: return 0.0;    }}void computeRelatedValues(const Eigen::MatrixXd& x,double &fval,Eigen::MatrixXd &r,Eigen::MatrixXd &J,Eigen::MatrixXd &grad){    fval = fx(x);    for (int i = 0;i<2;++i)    {        r(i,0) = rx(x,i);    }    for(int i = 0;i<2;++i)        for(int j = 0;j<2;++j)        {            J(i,j) = Jac(x,i,j);        }    grad = J.transpose() * r;}void LM(){    Eigen::MatrixXd x(2,1);    x(0,0) = -1.92;    x(1,0) = 2.0;    int max_iter = 100;    double func_tol = pow(10.0,-5);    int iter = 0;    double fval = INT_MAX;    Eigen::MatrixXd r(2,1);    Eigen::MatrixXd J(2,2);    Eigen::MatrixXd grad;    computeRelatedValues(x,fval,r,J,grad);    double nu = 0.01;    cout<<fval<<" ["<<x(0,0)<<" "<<x(1,0)<<"] "<<grad.norm()<<" "<<nu<<endl;    while(iter < max_iter && grad.norm() > func_tol)    {        ++iter;        computeRelatedValues(x,fval,r,J,grad);        Eigen::MatrixXd I = Eigen::MatrixXd::Identity(2,2);        Eigen::MatrixXd H = J.transpose() *J + nu*I;        Eigen::MatrixXd x_new = Eigen::MatrixXd::Zero(2,1);        int iter1 = 0;        double diff = (x-x_new).norm();        //注意如何比較兩個(gè)向量是否相等        while(diff > pow(10.0,-5) && iter1 < max_iter)        {            ++iter1;            Eigen::MatrixXd delta_x = H.colPivHouseholderQr().solve(grad);            cout<<delta_x<<endl;            Eigen::MatrixXd x_new = x - delta_x;            cout<<x_new<<endl;            double fval_new = INT_MAX;            Eigen::MatrixXd r_new(2,1);            Eigen::MatrixXd J_new(2,2);            Eigen::MatrixXd grad_new;            computeRelatedValues(x_new,fval_new,r_new,J_new,grad_new);            double rho = abs(fval - fval_new) / (grad.transpose() * (x_new - x)).norm();            if (rho > 0)            {                x = x_new;                diff = (x - x_new).norm();                cout<<diff<<endl;                if (rho > 0.25)                {                    nu = nu /10;                }            }            else            {                nu = nu *10;            }        }         cout<<fval<<" ["<<x(0,0)<<" "<<x(1,0)<<"] "<<grad.norm()<<" "<<nu<<endl;    }}int main(){    LM();    return 0;}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
卡爾曼濾波的C++實(shí)現
Map a Eigen Matrix to an C array
Eigen 3.2稀疏矩陣入門(mén)
Ubuntu安裝eigen
(C++)STL中map按照vaule來(lái)排序
C++ unordered
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久