精华内容
下载资源
问答
  • LM算法
    千次阅读
    2021-05-26 00:34:53

    请问 MATLAB中 LM算法(Levenberg-Marquard-algorithm)的函数是什么?。

    http://www.mathworks.com/matlabcentral/fileexchange/16063-lmfsolve-m-levenberg-. % . 去看吧 好像没有二维的.你最好看看这个函数,根据LM算法的意义修改一下

    计算方法:用来产生一些数据片段(例如消息或会话项)的哈希值的算法。使用好的哈希算法,在输入数据中所做的更改就可以更改结果哈希值中的所有位;因此,哈希对.

    1GB=1024MB=1024*1024KB

    看外文建筑类资料出现过kg/lm,好像是表示一定长度的单位重量,但不知道。

    线密度。表示一米长度是多少千克,计算时用这个乘以长度就行了就像密度乘以体积等于质量一样的概念

    网上关于LM算法的训练的公式如(图1)所示我用BP神经网络,输入层为4神。

    1.初始权值不一样,如果一样,每次训练结果是相同的 2.是 3.在train之前修改权值,IW,LW,b,使之相同 4.取多次实验的均值 一点浅见,仅供参考

    在建筑中lm是一个什么单位。长度还是面积。

    你说的不会是lm吧?←(注:这是LM)我所知的没有“IM”这个单位 lm 是光通量的单位,中文:流明 相当于一烛光的均匀点辐射源穿过一个立体角(球面)的通量,也相.

    定货币需求为L=0,找出货币需求与供给相均衡的收入和利率、8%和6%而收。

    (1)分别把y=800,r=10; y=900,r=8; y=1000,r=6;三组数据代入货币需求方程,求出L1,. 即LM曲线方程为 150=0.2Y-5r 分别用LM曲线方程与(1)问中的三条货币需求曲线联.

    在建筑中lm是一个什么单位。长度还是面积。

    lm是光通量的计量单位。发光强度为1坎德拉(cd)的点光源,在单位立体角(1球面度)内发出的光通量为“1流明”。英文缩写(lm)。光通量是描述单位时间内光源辐.

    LM的辅助回归式et 请问这个回归式的系数该如何计算?标准差呢?

    LM检验即拉格朗日乘数检验,用来检验模型残差序列是否存在序列相关。原假设是不存在序列相关;备选假设是:存在p阶自相关。检验统计量渐进服从卡方分布,如果计.

    利润=(中奖次数*奖金*倍数)-(注数*系数*倍数)求倍数的计算方式。

    利润=中奖次数*奖金*倍数-注数*系数*倍数=倍数*(中奖次数*奖金–注数*系数)所以,倍数=利润÷(中奖次数*奖金–注数*系数)

    变量mu确定了学习是根据牛顿法还是梯度法来完成,下式为更新参数的L-M规则:% jj = jX * jX% je = jX * E% dX = -(jj+I*mu) \ je 随着mu的增大,LM的项jj可以忽略。因此学.

    9.1(IS-LM模型)假设货币需求为 L=0.20y ,货币供给量为200,c = 90 + 0.8yd,t=.

    1,y=c+i+g yd=y-t t=50 i=140-5r g=50 c=90+0.8yd 代入后得:y=90+o.8*y-o.8*50+140-5r+50 即 y=1200-25r 为is曲线方程 L=m 0.2y=200 y=1000 为LM曲线方程 2,当IS与LM.

    )attach(byu)lm(salary~age+exper)lm(salary~.,byu)#利用全部自变量做线性回归lm()只能得出回归系数,要想得到更为详尽的回归信息,应该将结果作为数据保存或者使用“.

    投资函数I=1250—80r?求好心人解答 急,名义货币供应量M=1000:Y=6200—.

    lm曲线 让l=m 即200=0.2y-10r 导出y和r的关系is曲线 y=c+i+g=60+0.8y d+150+100y d=y-t=y-100 代入上边那个式子这道题里 i不是r的函数 所以is曲线的y最后算出来是个常数 .

    光通量(流明 Lm)不是计算出来的来,是要用“自光通量”加“积分球”测出来的。如果知百道光效(流明/瓦 Lm/W)与功率度(瓦 W),那么光通量=光效 * 功率。如.

    我想知道W和LM的换算方法

    当波长=555nm光源的光功率等于1W时(注意不是电功率),其辐射光通量为683lm;当波长=460nm光源的光功率等于1W时,蓝光的辐射光通量为41lm;而当波长=660.

    请帮忙解决下C=100+0.75Y, I=20-2r ,L=0.2Y-0.5r M=50价格水平P(1)推导总需求。

    总需求曲线的推倒过程:(1)IS曲线:令Y=C+I可得=100+0.75Y+20-2r 得到r=60-1/8Y代入(2)'(2)LM曲线:令M/P=L可得=0.2Y-0.5r=50/p 。。。(2)'(3)联立IS和LM.

    首先,cd是光强单位,表示光在某一特定方向角内所发射光通量大小.公式为 cd=Lm/Ω.Ω为立体角,单位为球面度(sr) 然后,亮度单位是nit(尼特),1nit=cd/m2.指物体.

    求四部门经济中IS曲线方程与LM方程 2.商品市场和货币市场同时均衡时的收.

    is曲线,s=y-c=y-(800+0.8yd),yd=y-t=y-0.25y =0.75y,带入上式中,得s=0.4y-800,i=s , i=200-50r,0.4y-800=200-50r,y=2500-125r lm曲线,l=m,0.4y-100r=900,y=2250+250r

    如果按典型应用电路,且电路连接和输入电压都正确无误,LM337的输出电压大约等于比例电阻的总阻值(R1+R2)和其中R1的阻值之比再乘以基准电压1.25V。即Vout=1.

    更多相关内容
  • The Levenberg-Marquardt method for nonlinear least squarescurve-fitting problems
  • 该算法先通过遗传算法粗调得到一组全局最优近似解, 再以该近似解为初值, 交替使用遗传算法和LM算法优化神经网络训练, 直至发现满意的网络参数. 实验结果表明, 新算法提高了网络的学习能力和收敛速度.
  • 提出了一种遗传算法和LM算法相结合的摄像机自标定方法。首先利用遗传算法获得若干组摄相机内外参数的初始值,接着利用LM算法对每一组参数进行优化,然后选取映射误差最小的那组参数。如果这组参数的映射误差满足要求,...
  • 列文伯格-马夸尔特算法应用于神经网络网络参数优化
  • 利用LM算法训练的BP神经网络,在matlab上实现
  • LM算法

    2020-12-22 03:28:31
    LM算法相对于高斯牛顿算法和梯度下降的优缺点 首先梯度下降法和高斯牛顿法都是最优化方法。其区别之处在于, 梯度下降法在寻找目标函数极小值时,是沿着反梯度方向进行寻找的。梯度的定义就是指向标量场增长最快的...

    最小二乘法的概念

    最小二乘法要关心的是对应的cost function是线性还是非线性函数,不同的方法计算效率如何,要不要求逆,矩阵的维数

    一般都是过约束,方程式的数目多于未知的参数数目。

    最小二乘法的目标:求误差的最小平方和,根据cost function的对应有两种:线性和非线性(取决于对应的残差(residual)是线性的还是非线性的)。

    线性最小二乘的解是closed-form solution 即 \(x = (A^TA)^{-1}A^Tb\)

    \(S(x) = ||b -Ax ||^2 = (b -Ax)^T(b -Ax) = b^Tb - b^TAx - x^TA^Tb + x^TA^TAx\)

    Note that :\((b^TAx)^T = x^TA^Tb\) 的维数是 1*1(y的列数目).所以 \(b^TAx = x^TA^Tb\)

    \(S(x) = b^Tb - 2b^TAx + x^TA^TAx\)

    对\(x\)求导

    \(-2A^Tb + 2 (A^TA)x = 0\)

    \(x = (A^TA)^{-1}A^Tb\)

    而非线性最小二乘没有closed-form,通常用迭代法求解。在每次迭代的过程使用一个线性化的方程代替计算。

    有牛顿法,牛顿高斯法,LM, 其实可以分为trust region 和 linear line search

    非线性最小二乘法的方法有

    迭代法,即在每一步update未知量逐渐逼近解,cost function在下降,可以用于各种各样的问题。

    梯度下降(最速下降法)是迭代法的一种,可以用于求解最小二乘问题

    \(f(x + \alpha \overrightarrow d) = f(x_0) + \alpha f'(x_0)\overrightarrow d + \text {二阶以上无穷小}\)

    上面的\(x_0\)是泰勒展开式的点, \(\alpha\)是 步长(一个实数) , $ \overrightarrow d$ 单位方向(一个向量),即 \(|\overrightarrow d| = 1\)

    显然当\(d\)的方向和\(f'(x_0)\)方向相反的时候,\(cos180 =-1\),整体取到最小值。这就是为什么取的是梯度的反方向原因。

    当然上面的步长一般也是可以求得,怎么求步长也是一门学问。

    下面的都是从牛顿法引申出来的,记住牛顿法求得是稳定点\(f'(x) = 0\),导数为0的不一定是最小值,梯度下降法求得是局部最小值,从计算上看

    牛顿法 泰勒展开式到二阶,

    \[f(x_{t+1}) = f(x_t) + g(x_{t+1} - x_t) + \frac{1}{2} (x_{t+1} -x_t)^TH(x_{t+1} -x_t)

    \]

    求导就有,\(\frac{\partial f}{\partial x_t} = g + H(x_{t+1} -x_t)\),让他为0,就有了牛顿公式

    \[x_{t+1} = x_t - H^{-1}g

    \]

    要是H是正定的,上面的就是凸函数,也就一定有了最小值。可惜H不一定是正定的,这就引导出了下面的方法

    高斯-牛顿法

    是另一种经常用于求解非线性最小二乘的迭代法(一定程度上可视为标准非线性最小二乘求解方法)。

    我们优化的cost function是 $$min \sum _i r_i(x)^2$$

    根据上面的牛顿法:

    \[x_{t+1} = x_t - H^{-1}g

    \]

    梯度的表示

    \[g_j=2 \sum _i r_i \frac{\partial r_i}{\partial x_j}

    \]

    Hessian矩阵的表示

    \[H_{jk} = 2\sum _i (\frac{\partial r_i}{\partial x_j}\frac{\partial r_i}{\partial x_k} + r_i\frac{\partial ^2 r_i}{\partial x_j \partial x_k})

    \]

    要是把上面公式的最后一项去掉,至少是半正定了,而且不用计算Hessain矩阵了,这就是牛顿高斯法

    \[H_{jk} \approx 2 \sum _i J_{ij}J_{ik} \quad With \quad J_{ij} = \frac{\partial r_i}{\partial x_j}

    \]

    在什么情况下,去掉最后一项比较好,

    residual(\(r_i\))小的时候

    或者接近linear ,这样一阶微分是常数,二阶微分就是0

    上面两种情况下,第二项都很小,公式如下

    \[x_{t+1} = x_t - (J^TJ)^{-1}J^Tr

    \]

    Levenberg-Marquardt

    的迭代法用于求解非线性最小二乘问题,就结合了梯度下降和高斯-牛顿法。

    \[x_{t+1} = x_t - (H + \lambda I_n)^{-1}g

    \]

    \[x_{t+1} = x_t - (J^TJ + \lambda I_n)^{-1}J^Tr

    \]

    总结

    所以如果把最小二乘看做是优化问题的话,那么梯度下降是求解方法的一种,\(x=(A^TA)^{-1}A^Tb\)是求解线性最小二乘的一种,高斯-牛顿法和Levenberg-Marquardt则能用于求解非线性最小二乘。

    LM算法相对于高斯牛顿算法和梯度下降的优缺点

    首先梯度下降法和高斯牛顿法都是最优化方法。其区别之处在于,

    梯度下降法在寻找目标函数极小值时,是沿着反梯度方向进行寻找的。梯度的定义就是指向标量场增长最快的方向,在寻找极小值时,先随便定初始点(x0,y0)然后进行迭代不断寻找直到梯度的模达到预设的要求。但是梯度下降法的缺点之处在于:在远离极小值的地方下降很快,而在靠近极小值的地方下降很慢,靠近的时候可能成zig-zag下降。

    而高斯牛顿法是一种非线性最小二乘最优化方法。其利用了目标函数的泰勒展开式把非线性函数的最小二乘化问题化为每次迭代的线性函数的最小二乘化问题。高斯牛顿法的缺点在于:若初始点距离极小值点过远,迭代步长过大会导致迭代下一代的函数值不一定小于上一代的函数值。

    LM算法在高斯牛顿法中加入了因子μ,当μ大时相当于梯度下降法,μ小时相当于高斯牛顿法。在使用Levenberg-Marquart时,先设置一个比较小的μ值,当发现目标函数反而增大时,将μ增大使用梯度下降法快速寻找,然后再将μ减小使用牛顿法进行寻找。

    The Gauss–Newton algorithm is used to solve non-linear least squares problems.

    It is a modification of Newton's method for finding a minimum of a function.

    Unlike Newton's method, the Gauss–Newton algorithm can only be used to minimize a sum

    of squared function values, but it has the advantage that second derivatives, which

    can be challenging to compute, are not required.

    However, as for many fitting algorithms, the LMA finds only a local minimum,

    which is not necessarily the global minimum.

    % 计算函数f的雅克比矩阵

    syms a b y x real;

    f=a*cos(b*x) + b*sin(a*x)

    Jsym=jacobian(f,[a b])

    data_1=[ 0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0,3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8, 6.0, 6.2 ];

    obs_1=[102.225 ,99.815,-21.585,-35.099, 2.523,-38.865,-39.020, 89.147, 125.249,-63.405, -183.606, -11.287,197.627, 98.355, -131.977, -129.887, 52.596, 101.193,5.412, -20.805, 6.549, -40.176, -71.425, 57.366, 153.032,5.301, -183.830, -84.612, 159.602, 155.021, -73.318, -146.955];

    % 2. LM算法

    % 初始猜测初始点

    a0=100; b0=100;

    y_init = a0*cos(b0*data_1) + b0*sin(a0*data_1);

    % 数据个数

    Ndata=length(obs_1);

    % 参数维数

    Nparams=2;

    % 迭代最大次数

    n_iters=60;

    % LM算法的阻尼系数初值

    lamda=0.1;

    %LM算法的精度

    ep=100

    % step1: 变量赋值

    updateJ=1;

    a_est=a0;

    b_est=b0;

    % step2: 迭代

    for it=1:n_iters

    if updateJ==1

    % 根据当前估计值,计算雅克比矩阵

    J=zeros(Ndata,Nparams);

    for i=1:length(data_1)

    J(i,:)=[cos(b_est*data_1(i))+data_1(i)*b_est*cos(a_est*data_1(i)) -sin(b_est*data_1(i))*a_est*data_1(i)+sin(a_est*data_1(i)) ];

    end

    % 根据当前参数,得到函数值

    y_est = a_est*cos(b_est*data_1) + b_est*sin(a_est*data_1);

    % 计算误差

    d=obs_1-y_est;

    % 计算(拟)海塞矩阵

    H=J'*J;

    % 若是第一次迭代,计算误差

    if it==1

    e=dot(d,d);

    end

    end

    % 根据阻尼系数lamda混合得到H矩阵

    H_lm=H+(lamda*eye(Nparams,Nparams));

    % 计算步长dp,并根据步长计算新的可能的\参数估计值

    dp=inv(H_lm)*(J'*d(:));

    %求误差大小

    g = J'*d(:);

    a_lm=a_est+dp(1);

    b_lm=b_est+dp(2);

    % 计算新的可能估计值对应的y和计算残差e

    y_est_lm = a_lm*cos(b_lm*data_1) + b_lm*sin(a_lm*data_1);

    d_lm=obs_1-y_est_lm;

    e_lm=dot(d_lm,d_lm);

    % 根据误差,决定如何更新参数和阻尼系数

    if e_lm

    if e_lm

    break

    else

    lamda=lamda/5;

    a_est=a_lm;

    b_est=b_lm;

    e=e_lm;

    disp(e);

    updateJ=1;

    end

    else

    updateJ=0;

    lamda=lamda*5;

    end

    end

    %显示优化的结果

    a_est

    b_est

    plot(data_1,obs_1,'r')

    hold on

    plot(data_1,a_est*cos(b_est*data_1) + b_est*sin(a_est*data_1),'g')

    #pragma once

    #include

    #include

    #include

    using namespace std;

    using namespace cv;

    const int MAXTIME = 50;

    #pragma comment(lib,"opencv_core249d.lib")

    Mat cvSinMat(Mat a)

    {

    int rows = a.rows;

    int cols = a.cols;

    Mat out(rows, cols, CV_64F);

    for (int i = 0; i < rows; i++)

    {

    out.at(i, 0) = sin(a.at(i, 0));

    }

    return out;

    }

    Mat cvCosMat(Mat a)

    {

    int rows = a.rows;

    int cols = a.cols;

    Mat out(rows, cols, CV_64F);

    for (int i = 0; i < rows; i++)

    {

    out.at(i, 0) = cos(a.at(i, 0));

    }

    return out;

    }

    Mat jacobin(const Mat& pk, const Mat& x) // pk= [a,b] a*cos(b*x) + b*sin(a*x)

    {

    Mat_ J(x.rows, pk.rows), Sa, Sb ,Ca, Cb,da, db;

    Sa = cvSinMat(pk.at(0)*x);

    Sb = cvSinMat(pk.at(1)*x);

    Ca = cvCosMat(pk.at(0)*x);

    Cb = cvCosMat(pk.at(1)*x);

    da = Cb + x.mul(pk.at(1)*Ca);

    db = Sa - x.mul(pk.at(0)*Sb);

    //cout << "da= " << da << endl;

    da.copyTo(J(Rect(0, 0, 1, J.rows)));

    db.copyTo(J(Rect(1,0, 1, J.rows)));

    return J;

    }

    Mat yEstimate(const Mat& pk, const Mat& x)

    {

    Mat_ Y(x.rows, x.cols),Cb,Sa;

    Sa = cvSinMat(pk.at(0)*x);

    Cb = cvCosMat(pk.at(1)*x);

    Y = pk.at(0)*Cb + pk.at(1)*Sa;

    return Y;

    }

    void LM(double* p0, int pN, double* x, int xN, double* y, double lamda, double step, double ep = 0.000001)

    {

    int iters = 0;

    int updateJ = 1;

    double ek = 0.0, ekk = 0.0;//估计误差

    Mat_ xM(xN, 1, x), yM(xN, 1, y), pM(pN, 1, p0), JM, yEM, yEMM, dM, gM, dMM, dpM;//至少需要JM,gM,dpM,pM

    for (; iters < MAXTIME; iters++)

    {

    if (updateJ == 1)

    {

    JM = jacobin(pM, xM); //雅克比矩阵

    //outData(fs, JM, "J.xml");

    yEM = yEstimate(pM, xM); //f(β)

    dM = yM - yEM; // y-f(β)

    gM = JM.t()*dM; //

    if (iters == 0)

    ek = dM.dot(dM); //第一次 直接||r||^2

    }

    Mat_ NM = JM.t()*JM + lamda*(Mat::eye(pN, pN, CV_64F)); //J(T)J + lambda*I

    if (solve(NM, gM, dpM)) //

    {

    Mat_ pMM = pM + dpM; //更新最小值

    yEMM = yEstimate(pMM, xM);

    dMM = yM - yEMM;

    ekk = dMM.dot(dMM);

    if (ekk < ek)//成功则更新向量与估计误差

    {

    printf("the %d iterator ,ekk=%lf \n", iters,ekk);

    if (dpM.dot(dpM) < ep)

    {

    printf("Final result is :\n");

    printf("精度:0.000001\n");

    printf("a =%lf , b=%lf\n", pMM.at(0),pMM.at(1));

    return;

    }

    else

    {

    pM = pMM;

    ek = ekk;

    lamda = lamda / step;

    updateJ = 1;

    continue;

    }

    }

    else //if an iteration gives insufficient reduction in the residual, λ(lamda) can be increased

    {

    printf("the %d iterator \n", iters);

    lamda = lamda*step;

    updateJ = 0;

    }

    }

    else

    {

    printf("the solve invertx matrix error\n");

    }

    }

    }

    #include "LM.h"

    int main()

    {

    double data[] = { 0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0,

    3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8, 6.0, 6.2 };

    double obs[] = { 102.225 ,99.815,-21.585,-35.099, 2.523,-38.865,

    -39.020, 89.147, 125.249,-63.405, -183.606, -11.287,

    197.627, 98.355, -131.977, -129.887, 52.596, 101.193,

    5.412, -20.805, 6.549, -40.176, -71.425, 57.366, 153.032,

    5.301, -183.830, -84.612, 159.602, 155.021, -73.318, -146.955 };

    //初始点

    double p0[] = { 100, 100 };

    LM(p0, 2, data, 32, obs, 0.1, 10);

    system("pause");

    }

    LM算法与非线性最小二乘问题

    摘录的一篇有关求解非线性最小二乘问题的算法--LM算法的文章,当中也加入了一些我个人在求解高精度最小二乘问题时候的一些感触: LM算法,全称为Levenberg-Marquard算法,它可用于解决非线 ...

    Levenberg-Marquardt迭代(LM算法)-改进Guass-Newton法

    1.前言                                a.对于工程问题,一般描述为:从一些测量值(观测量)x 中估计参数 p?即x = f(p),     ...

    梯度下降法、牛顿法、高斯牛顿法、LM最优化算法

    1.梯度下降法 2.牛顿法 3.高斯牛顿法 4.LM算法

    Levenberg-Marquardt优化算法以及基于LM的BP-ANN

    一.LM最优化算法     最优化是寻找使得目标函数有最大或最小值的的参数向量.根据求导数的方法,可分为2大类.(1)若f具有解析函数形式,知道x后求导数速度快.(2)使用数值差分来求导数.根据使用模 ...

    LM拟合算法

    一.  Levenberg-Marquardt算法 (1)y=a*e.^(-b*x)形式拟合 clear all % 计算函数f的雅克比矩阵,是解析式 syms a b y x real; f=a*e ...

    Levenberg-Marquardt算法基础知识

    Levenberg-Marquardt算法基础知识 (2013-01-07 16:56:17) 转载▼   什么是最优化?Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使 ...

    相机标定:关于用Levenberg-Marquardt算法在相机标定中应用

    LM算法在相机标定的应用共有三处. (1)单目标定或双目标定中,在内参固定的情况下,计算最佳外参.OpenCV中对应的函数为findExtrinsicCameraParams2. (2)单目标定中,在 ...

    点云匹配和ICP算法概述

    Iterative Closest Point (ICP) [1][2][3] is an algorithm employed to minimize the difference between ...

    随机推荐

    Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

    Redis基础知识之————空间换时间的查询案例

    空间与时间 空间换时间是在数据库中经常出现的术语,简单说就是把查询需要的条件进行索引的存储,然后查询时为O(1)的时间复杂度来快速获取数据,从而达到了使用空间存储来换快速的时间响应!对于redis这个 ...

    Basic Printing Architecture

    https://blogs.technet.microsoft.com/askperf/2007/06/19/basic-printing-architecture/ Printer sharing, ...

    Android 文字绘制&lpar;DrawText&rpar;技术总结

    这里的绘制文字不是直接调用TextView.setText(String content)去展示文字内容.而是在View上面通过 canvas.drawText(text, x, y,textPain ...

    iOS学习——如何在mac上获取开发使用的模拟器的资源以及模拟器中每个应用的应用沙盒

    如题,本文主要研究如何在mac上获取开发使用的模拟器的资源以及模拟器中每个应用的应用沙盒.做过安卓开发的小伙伴肯定很方便就能像打开资源管理器一样查看我们写到手机本地或应用中的各种资源,但是在iOS开发 ...

    洛谷P3835 【模板】可持久化平衡树

    题目背景 本题为题目 普通平衡树 的可持久化加强版. 数据已经经过强化 感谢@Kelin 提供的一组hack数据 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作( ...

    Stream初步应用

    一.什么是stream Stream(流)是一个来自数据源的元素队列并支持聚合操作,数据来源可以从inputstream,数组,集合中获取:聚合操作可以类似SQL语句一样的操作, 比如filter, ...

    java&period;util&period;zip&period;ZipException&colon; duplicate entry&lpar;重复依赖多版本的类库&rpar;

    同步SVN仓库中的代码,更新后,运行项目,出现如下错误: com.android.build.api.transform.TransformException: java.util.zip.ZipEx ...

    &lbrack;COGS 0065&rsqb;&lbrack;NOIP 2002&rsqb; 字串变换

    65. [NOIP2002] 字串变换 ★★   输入文件:string.in   输出文件:string.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 已知有两个字 ...

    展开全文
  • matlab的bp神经网络算法以及准确率的计算,训练函数采用lm算法
  • 几种求解非线性方程组的算法,如Legendre小波函数,LM算法
  • 一个简单的LM算法程序,可以帮助你理解LM算法,还包括LM的解释
  • 利用lm算法进行像机标定,该方法简单易行,方便实现。
  • 然后分别用LM算法和BP神经网路进行分类识别做对比;最后基于MATLAB GUI设计串口通信界面与Arduino智能车链接验证算法的可行性。结果证明:该方法训练平均误差为5.630 6×10-7,分类准确率为86%,BP算法相对应为0.001...
  • 针对光谱仪采样获得布拉格光栅反射谱含有干扰严重的噪声的问题, 采用Levenberg-Marquardt (LM)算法对高斯曲线拟合系数进行优化, 并使用优化后的Gaussian-LM算法对采样的光纤布拉格光栅的反射谱进行寻峰。通过寻峰...
  • Levenberg-Marquardt算法code采用trustregion方法更新决策函数
  • 电机故障诊断问题在生产安全运行中非常重要,但难以建立准确数学模型,而神经网络能较好...针对电机转子故障样本应用Elman网络并采用LM算法训练,将其训练效果与BP网络训练效果进行比较,显示了Elman网络和LM算法的优越性。
  • 针对LM算法不能在线训练RBF网络以及RBF网络结构设计算法中存在的问题,提出一种基于LM算法的在线自适应RBF网络结构优化算法.该算法引入滑动窗口和在线优化网络结构的思想,滑动窗口的引入既使得LM算法能够在线训练RBF...
  • lm算法的matlab实现

    2014-12-14 22:24:34
    该算法是自己编的一个lm算法,是基于MATLAB的程序
  • 利用MATLAB编写LM算法定位,验证程序可添加
  • 拉凡格氏(LM)算法具有收敛速度快,精度高的特点,但是LM算法依赖初值,这使它的应用受到了限制。结合智能算法FOA及LM算法的优点,采用FOA算法求出Gabor原子参数初值,利用这些初值进行LM迭代搜索最优原子。仿真...
  • LM算法的C++程序

    2013-11-15 15:33:16
    这是一个列文伯格-马奎特算法的C++程序
  • LM算法原理

    千次阅读 2022-03-27 10:53:24
    非线性最小二乘优化,LM算法,高斯牛顿法,最速下降法,正则化。

    非线性最小二乘法优化

    高斯-牛顿法

    参考文章:[优化] Gauss-Newton非线性最小二乘算法
    算法流程如下图(来自参考文章)所示:

    接下来本文使用的数学符号意义与上图一样。其中 x x x是需要求解的参数, f ( x ) f(x) f(x)是一个残差向量。比如有一个优化问题, y = a s i n ( w t + b ) + c y=asin(wt+b)+c y=asin(wt+b)+c,给出m个数据 ( t i , y i ) ( i = 0 , 1 , ⋯   , m − 1 ) (t_i,y_i)(i=0,1,\cdots,m-1) (ti,yi)(i=0,1,,m1),则
    x = [ a , w , b , c ] T f ( x ) = [ y 0 − ( a s i n ( w t 0 + b ) + c ) , y 1 − ( a s i n ( w t 1 + b ) + c ) , ⋯   , y m − 1 − ( a s i n ( w t m − 1 + b ) + c ) ] T x=[a,w,b,c]^T \\ f(x)=[y_0-(asin(wt_0+b)+c),y_1-(asin(wt_1+b)+c),\cdots,y_{m-1}-(asin(wt_{m-1}+b)+c)]^T x=[a,w,b,c]Tf(x)=[y0(asin(wt0+b)+c),y1(asin(wt1+b)+c),,ym1(asin(wtm1+b)+c)]T
    ∣ ∣ f ( x ) ∣ ∣ 2 ||f(x)||^2 f(x)2(向量二范数)就是最小二乘法的损失值。
    设损失函数 l ( x ) = 1 2 ∣ ∣ f ( x ) ∣ ∣ 2 l(x)=\frac{1}{2}||f(x)||^2 l(x)=21f(x)2
    另外, J ( x ) J(x) J(x) f ( x ) f(x) f(x)的雅可比矩阵,假设 x x x的长度为n, f ( x ) f(x) f(x)长度为m,则 J ( X ) J(X) J(X)矩阵大小为(m,n)。
    H = J T J H=J^TJ H=JTJ f ( x ) f(x) f(x)的黑塞矩阵的近似矩阵。 B = − J T f ( x ) B=-J^Tf(x) B=JTf(x)为损失函数 l ( x ) l(x) l(x) 1 2 \frac{1}{2} 21只是为了求导后约掉 ∣ ∣ f ( x ) ∣ ∣ 2 ||f(x)||^2 f(x)2的指数2)的负梯度 − ∂ l ( x ) ∂ x -\frac{\partial l(x)}{\partial x} xl(x)

    最速下降法

    参考文章:

    LM算法

    在高斯-牛顿法中引入 μ \mu μ得到LM算法

    引入 μ \mu μ的意义

    • 高斯牛顿法的缺点
      • H有可能不可逆
        首先, H = J T J H=J^TJ H=JTJ为半正定对称矩阵(注:形如 A T A A^TA ATA(A为任意矩阵)都是半正定对称矩阵,这个定理是奇异值分解的基础),可以分解为 H = Q Λ Q T H=Q\Lambda Q^T H=QΛQT,其中矩阵 Q Q Q的每个列向量为 H H H的特征向量, Λ \Lambda Λ为对角矩阵,对角元素为对应特征向量的特征值。
        因为 H H H为半正定对称矩阵,因此特征值有可能为0,因此不可逆。因为若H可逆,则 H − 1 = Q Λ − 1 Q T H^{-1}=Q\Lambda ^{-1}Q^T H1=QΛ1QT,其中 Λ − 1 \Lambda ^{-1} Λ1对角元素为对应特征值 λ \lambda λ的倒数 1 λ \frac{1}{\lambda} λ1,因此若特征值为0,则 H H H不可逆。
      • 步长 Δ x \Delta x Δx可能过大,导致发散
        由高斯牛顿法的算法流程可知,其核心是在点 x k x_k xk处利用 l ( x ) l(x) l(x)的泰勒展开,用二次多项式 p k ( x ) p_k(x) pk(x)(注:实际上 p k ( x ) p_k(x) pk(x)不是真正泰勒展开的二次多项式,因为矩阵 H H H只是黑塞矩阵的近似矩阵)近似 f ( x ) f(x) f(x)
        l ( x k + Δ x ) ≈ p k ( x k + Δ x ) = l ( x k ) + ( − B T ) Δ x + 1 2 Δ x T H Δ x l(x_k+\Delta x) \approx p_k(x_k+\Delta x)= l(x_k)+(-B^T)\Delta x+\frac{1}{2}{\Delta x}^T H \Delta x l(xk+Δx)pk(xk+Δx)=l(xk)+(BT)Δx+21ΔxTHΔx
        然后求二次多项式 p k ( x ) p_k(x) pk(x)的最小值点 x k + 1 = x k + argmin ⁡ Δ x   p k ( x k + Δ x ) x_{k+1}=x_{k}+\underset{\Delta x}{\operatorname{argmin}}\ {p_k(x_k+\Delta x)} xk+1=xk+Δxargmin pk(xk+Δx),然后 x k + 1 x_{k+1} xk+1则是这一次迭代的结果。
        因此当 x k x_k xk p k ( x ) p_k(x) pk(x)的最小值点相距很远时,步长 Δ x \Delta x Δx会很大。但泰勒展开一般只在 x k x_k xk的局部区域内能很好的近似原始函数 l ( x ) l(x) l(x),因此步长太大算法可能会发散(损失值不降反升)。
    • 引入(非负数) μ \mu μ解决高斯牛顿法的缺点
      • 步长 Δ x \Delta x Δx太大的问题
        步长可能太大,那么一个自然的想法就是正则化。因此,修改损失函数为:
        p k ( x k + Δ x ) = l ( x k ) + ( − B T ) Δ x + 1 2 Δ x T H Δ x + 1 2 μ Δ x T Δ x p_k(x_k+\Delta x)= l(x_k)+(-B^T)\Delta x+\frac{1}{2}{\Delta x}^T H \Delta x+\frac{1}{2}\mu{\Delta x}^T \Delta x pk(xk+Δx)=l(xk)+(BT)Δx+21ΔxTHΔx+21μΔxTΔx
        正则化系数 μ \mu μ越大,则越能限制步长 Δ x \Delta x Δx的大小。
        求解 argmin ⁡ Δ x   p k ( x k + Δ x ) \underset{\Delta x}{\operatorname{argmin}}\ {p_k(x_k+\Delta x)} Δxargmin pk(xk+Δx)的过程如下:
        (1) 求导: ω ( Δ x ) = ∂ p k ( x k + Δ x ) ∂ Δ x = ( − B ) + H Δ x + μ Δ x = ( − B ) + ( H + μ I ) Δ x \omega (\Delta x)=\frac{\partial p_k(x_k+\Delta x)}{\partial \Delta x}=(-B)+H\Delta x+\mu \Delta x=(-B)+(H+\mu I) \Delta x ω(Δx)=Δxpk(xk+Δx)=(B)+HΔx+μΔx=(B)+(H+μI)Δx
        (2) 令 ω ( Δ x ) = 0 \omega (\Delta x)=0 ω(Δx)=0得:
        argmin ⁡ Δ x   p k ( x k + Δ x ) = ( H + μ I ) − 1 B \underset{\Delta x}{\operatorname{argmin}}\ {p_k(x_k+\Delta x)=(H+\mu I)^{-1}B } Δxargmin pk(xk+Δx)=(H+μI)1B
      • H不可逆的问题
        由上面可知现在 H H H变成了 ( H + μ I ) (H+\mu I) (H+μI),只要 μ > 0 \mu >0 μ>0,则 ( H + μ I ) (H+\mu I) (H+μI)一定可逆。因为:
        (1) 首先 ( H + μ I ) (H+\mu I) (H+μI)是对称矩阵(保证了 ( H + μ I ) (H+\mu I) (H+μI)有n个正交特征向量,n为 x x x的长度, ( H + μ I ) (H+\mu I) (H+μI)大小为(n,n))。
        (2) 其次 ( H + μ I ) (H+\mu I) (H+μI) H H H特征向量相同,并且:假设 H x = λ x Hx=\lambda x Hx=λx,则 ( H + μ I ) x = H x + μ x = ( λ + μ ) x (H+\mu I)x=Hx+\mu x=(\lambda +\mu)x (H+μI)x=Hx+μx=(λ+μ)x。所以 ( H + μ I ) (H+\mu I) (H+μI)的特征值为 H H H对应特征值加 μ \mu μ。又因为 λ ≥ 0 \lambda \ge 0 λ0,所以若 μ \mu μ大于0,则 ( H + μ I ) (H+\mu I) (H+μI)的特征值大于0。
        (3)结合(1)(2)得若 μ > 0 \mu>0 μ>0,则 ( H + μ I ) (H+\mu I) (H+μI)为对称正定矩阵,所以 ( H + μ I ) (H+\mu I) (H+μI)可逆。

    如何自动调整 μ \mu μ,LM与高斯牛顿法和最速下降法的关系,算法实现流程

    • 如何自动调整 μ \mu μ,LM与高斯牛顿法和最速下降法的关系
      参考文章:Levenberg–Marquardt算法学习
      • 其实信赖域法的本质就是看近似函数(比如这里就是泰勒展开的二阶形式)的损失值下降量 Δ L k \Delta L_{k} ΔLk和实际损失函数的损失值下降量 Δ F k \Delta F_{k} ΔFk的比值,如果 Δ F k Δ L k \frac{\Delta F_{k}}{\Delta L_{k}} ΔLkΔFk 约等于1说明近似函数在步长 Δ k \Delta_{k} Δk内与实际损失函数很近似,可以保持这个步长或者扩大步长,否则若 Δ F k Δ L k \frac{\Delta F_{k}}{\Delta L_{k}} ΔLkΔFk约等于0甚至是负数,就缩小步长。(需要保证 Δ L k > 0 \Delta L_{k}>0 ΔLk>0
    • 算法实现流程
      参考文章:A Brief Description of the Levenberg-Marquardt Algorithm Implemened by levmar
      • 注意: 里面的伪代码中有点错误,g应该是负梯度,也就是 g : = − J T ϵ p g:=-J^T \epsilon_{p} g:=JTϵp在这里插入图片描述

      • ϵ T Σ y − 1 ϵ \epsilon^T\Sigma_y^{-1}\epsilon ϵTΣy1ϵ的作用
        参考文章 A Brief Description of the Levenberg-Marquardt Algorithm Implemened by levmar中提到了这样一段话:
        在这里插入图片描述
        注意,这篇文章里的向量 x x x(是本文中的真实值 y = [ y 0 , y 1 , ⋯   , y m − 1 ] T y=[y_0,y_1,\cdots,y_{m-1}]^T y=[y0,y1,,ym1]T)与本文的 x x x意义不一样。因此下面本文用 y y y代替这篇文章的 x x x ϵ T Σ y − 1 ϵ \epsilon^T\Sigma_y^{-1}\epsilon ϵTΣy1ϵ的作用是消除不同 y i y_i yi有可能有不同量级的影响。
        我们假设 Σ y \Sigma_y Σy为对角矩阵,也就是 y i y_{i} yi之间相互独立,则对角值 σ i \sigma_i σi y i y_i yi的方差, σ i \sigma_i σi表示了 y i y_i yi的变化范围(可以理解为量级)。量级越大,那么对应误差 ϵ i \epsilon_i ϵi的值变化范围也会大,因此在优化过程中会重点优化 ϵ i \epsilon_i ϵi。因此我们要避免这种由量级导致的误差过大或过小。因此算法以 ϵ T Σ y − 1 ϵ \epsilon^T\Sigma_y^{-1}\epsilon ϵTΣy1ϵ作为损失值,代替 ϵ T ϵ \epsilon^T \epsilon ϵTϵ
        Σ y \Sigma_y Σy不是对角矩阵,但因为协方差矩阵和协方差矩阵的逆都是正定对称矩阵(只要没有互相关变量)。因此 Σ y − 1 \Sigma_y^{-1} Σy1可分解为 Q Λ − 1 Q T Q\Lambda^{-1} Q^T QΛ1QT。而 ϵ T Σ y − 1 ϵ \epsilon^T\Sigma_y^{-1}\epsilon ϵTΣy1ϵ= ( ϵ T Q ) Λ − 1 ( Q T ϵ ) (\epsilon^TQ)\Lambda^{-1} (Q^T\epsilon) (ϵTQ)Λ1(QTϵ),把 ( Q T ϵ ) (Q^T\epsilon) (QTϵ)当成新的随机变量。而 ( Q T ϵ ) (Q^T\epsilon) (QTϵ)的协方差矩阵为 Λ \Lambda Λ,因此也实现了消除量级影响。

      • μ \mu μ初始值
        在参考文章A Brief Description of the Levenberg-Marquardt Algorithm Implemened by levmar的伪代码里, μ \mu μ的初始值如下图所示。其中 m a x i = 1 , ⋯   , m ( H i i ) max_{i=1,\cdots,m}(H_{ii}) maxi=1,,m(Hii)(参考文章的 A A A等于本文的 H H H)。这其实是为了让 μ \mu μ H H H对角线上的值的数量级一致。因为我们有 H + μ I H+\mu I H+μI,因此 μ \mu μ是加到 H H H的对角线上的。
        在这里插入图片描述

      • 参考文章建议的初始值 :
        在这里插入图片描述

    非线性最小二乘法资料

    展开全文
  • LM算法的实现并不难,这里给出了LM算法C语言实现,希望能给大家有所帮助
  • 5步骤:设置误差函数->输入初始参数,阈值以及迭代次数。最后利用LM迭代函数进行迭代运算至误差小于阈值时终止。
  • 应用Marquardt方法求解方程的值,里面含有matlab程序代码
  • LM算法硕士论文

    2019-01-09 21:33:55
    详细的介绍了LM算法以及其应用,对LM算法的讲解较为容易理解。
  • 列文伯格-马夸尔特(Levenberg-Marquardt)最优化算法,计算公式参数
  • LM算法初识

    千次阅读 2020-11-11 13:56:42
      由于工作内容接触到点云标定,需要用到最小二乘法,所以特意花了点时间研究LM算法,但是由于大学的高等数学忘得差不多了,所以本文从最基本的一些数学概念开始; 信赖域法   在最优化算法中,都是要求一个函数...

      由于工作内容接触到点云标定,需要用到最小二乘法,所以特意花了点时间研究LM算法,但是由于大学的高等数学忘得差不多了,所以本文从最基本的一些数学概念开始;

    信赖域法

      在最优化算法中,都是要求一个函数的极小值,每一步迭代中,都要求目标函数值是下降的,而信赖域法,顾名思义,就是从初始点开始,先假设一个可以信赖的最大位移,然后在以当前点为中心,以为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。

    泰勒公式:

    在这里插入图片描述

    雅可比矩阵

      雅可比矩阵几乎在所有的最优化算法中都有提及,因此我们很有必要了解一下其具到底是什么,关于这一点,下方截图说的很清楚;
    在这里插入图片描述
      从上面可以了解,雅可比矩阵实际上就是一阶偏导数所组成的矩阵,其列数由未知参数个数决定,其行数由我们提供的输入参数组决定;

    各种最优化算法

    在这里插入图片描述
      需要注意的是,对于LM算法,可以具体到下种形式:
    在这里插入图片描述
      其中,r是残差;

    代码实现

      LM算法的关键是用模型函数 f 对待估参数向量p在其领域内做线性近似,忽略掉二阶以上的导数项,从而转化为线性最小二乘问题,它具有收敛速度快等优点。
      LM算法需要对每一个待估参数求偏导,所以,如果你的拟合函数 f 非常复杂,或者待估参数相当地多,那么就不适合使用LM算法了,可以使用Powell算法,Powell算法不需要求导。
      需要说明的是,这是非线性无约束的问题,如果待估参数是有约束的,暂时还没有涉及到这个领域;
      就是从初始点开始,先假设一个可以信赖的最大位移,然后在以当前点为中心,以为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。
      在使用Levenberg-Marquart时,先设置一个比较小的μ值,当发现目标函数反而增大时,将μ增大使用梯度下降法快速寻找,然后再将μ减小使用牛顿法进行寻找。
    6.阻尼系数的调整
    维基百科
      当阻尼系数足够大时,使算法更接近最速下降法,所以在残差没有明显变化时可以使用;当阻尼系数足够小时,算法更接近高斯牛顿算法,此时迭代速度更快;
      有算法精度ep和上一次残差e,当e<lamda < ep时,lamda = lamda/5,当lamda > ep时,lamda = lamda*5,当lamda < ep时,lamda = lamda;

      代码如下:

    % 计算函数f的雅克比矩阵
    syms a b y x real;
    f=a*cos(b*x) + b*sin(a*x)
    Jsym=jacobian(f,[a b])
    
    data_1=[ 0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0,3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8, 6.0, 6.2 ];
    obs_1=[102.225 ,99.815,-21.585,-35.099, 2.523,-38.865,-39.020, 89.147, 125.249,-63.405, -183.606, -11.287,197.627, 98.355, -131.977, -129.887, 52.596, 101.193,5.412, -20.805, 6.549, -40.176, -71.425, 57.366, 153.032,5.301, -183.830, -84.612, 159.602, 155.021, -73.318, -146.955];
    % 2. LM算法
    % 初始猜测初始点
    a0=100; b0=100;
    y_init = a0*cos(b0*data_1) + b0*sin(a0*data_1);
    % 数据个数
    Ndata=length(obs_1);
    % 参数维数
    Nparams=2;
    % 迭代最大次数
    n_iters=60;
    % LM算法的阻尼系数初值
    lamda=0.1;
    %LM算法的精度
    ep=100
    % step1: 变量赋值
    updateJ=1;
    a_est=a0;
    b_est=b0;
    % step2: 迭代
    for it=1:n_iters
        if updateJ==1
            % 根据当前估计值,计算雅克比矩阵,雅可比矩阵只需要在第一次循环时计算一次就好
            J=zeros(Ndata,Nparams); % 雅可比矩阵的行数由原始输入数据个数决定,列数由待估参数个数决定
            for i=1:length(data_1) 
                J(i,:)=[cos(b_est*data_1(i))+data_1(i)*b_est*cos(a_est*data_1(i))  -sin(b_est*data_1(i))*a_est*data_1(i)+sin(a_est*data_1(i)) ];  % 雅可比矩阵由偏导组成
            end
            % 根据当前参数,得到函数值
            y_est = a_est*cos(b_est*data_1) + b_est*sin(a_est*data_1);
            % 计算误差
            d=obs_1-y_est;
            % 计算(拟)海塞矩阵
            H=J'*J;
            % 若是第一次迭代,计算误差
            if it==1
                e=dot(d,d); % 可以认为e是初始值计算所估误差
            end
        end
        % 根据阻尼系数lamda混合得到H矩阵
        H_lm=H+(lamda*eye(Nparams,Nparams));
        % 计算步长dp,并根据步长计算新的可能的\参数估计值
        dp=inv(H_lm)*(J'*d(:))
        %求误差大小
        g = J'*d(:);
        a_lm=a_est+dp(1);  % 在初始值上加上所求步长,作为新的评估参数
        b_lm=b_est+dp(2);
        % 计算新的可能估计值对应的y和计算残差e
        y_est_lm = a_lm*cos(b_lm*data_1) + b_lm*sin(a_lm*data_1);
        d_lm=obs_1-y_est_lm
        e_lm=dot(d_lm,d_lm)  % 这个值后面主要用于和上一次误差进行比对,从而调整阻尼系数
        
        % 根据误差,决定如何更新参数和阻尼系数
        if e_lm<e  % 如果小于上一次误差
            if e_lm<ep  % 如果小于算法精度
                break % 结束,说明该阻尼系数合理
            else
                lamda=lamda/5; % 如果小于上一次误差,但大于算法精度,那么更新阻尼系数,同时将当前评估参数作为初始值重新计算
                a_est=a_lm;
                b_est=b_lm;
                e=e_lm;
                disp(e);
                updateJ=1; 
            end
        else
            updateJ=0;
            lamda=lamda*5;
        end
        
    end
    %显示优化的结果
    a_est
    b_est
    
    plot(data_1,obs_1,'r')
    hold on
    plot(data_1,a_est*cos(b_est*data_1) + b_est*sin(a_est*data_1),'g')
    

    参考链接:
    https://blog.csdn.net/a6333230/article/details/83304098
    https://blog.csdn.net/baidu_38172402/article/details/82223284
    https://zhuanlan.zhihu.com/p/39762178
    http://www.360doc.com/content/18/0330/13/18306241_741511614.shtml
    https://blog.csdn.net/xueyinhualuo/article/details/46931989?utm_medium=distribute.pc_relevant.none-task-blog-
    https://www.cnblogs.com/shhu1993/p/4878992.html
    https://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm

    展开全文
  • LM算法+推导+C++代码实践一、算法推导二、代码实践参考 一、算法推导 二、代码实践 #include <Eigen/Dense> #include <Eigen/Sparse> #include <iostream> #include <iomanip> #...
  • LM算法,全称为Levenberg-Marquard算法,它可用于解决非线性最小二乘问题,多用于曲线拟合等场合。 LM算法的实现并不算难,它的关键是用模型函数 f 对待估参数向量 p 在其邻域内做线性近似,忽略掉二阶以上的导数项...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,584
精华内容 8,233
关键字:

LM算法