matlab实现LM(Levenberg-Marquard)算法

标签: matlab LM算法
15人阅读 评论(0) 收藏 举报
分类:

  该例子是关于函数f=a×eb×x 。我们给出一系列的(x,f)值,然后利用LM算法,迭代算出a,b的合适值,使得这一系列的(x,f)值,能更好地适合该函数。

% 计算函数f的雅克比矩阵,是解析式
syms a b y x real;
f=a*exp(-b*x);
Jsym=jacobian(f,[a b]);

% 拟合用数据。
data_1=[0.25 0.5 1 1.5 2 3 4 6 8];
obs_1=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];
% 2. LM算法
% 初始猜测s
a0=10; b0=0.5;
y_init = a0*exp(-b0*data_1);
% 数据个数
Ndata=length(obs_1);
% 参数维数
Nparams=2;
% 迭代最大次数
n_iters=50;
% LM算法的阻尼系数初值
lamda=0.01;
% step1: 变量赋值
updateJ=1; % 控制if语句是否进行的量。
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,:)=[exp(-b_est*data_1(i)), -a_est*data_1(i)*exp(-b_est*data_1(i))];
        end
        % 根据当前参数,得到函数值
        y_est = a_est*exp(-b_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,并根据步长计算新的可能的\参数估计值
    g = J'*d(:);
    dp=H_lm\g;  
    a_lm=a_est+dp(1);
    b_lm=b_est+dp(2);
    % 计算新的可能估计值对应的y和计算残差e
    y_est_lm = a_lm*exp(-b_lm*data_1);
    d_lm=obs_1-y_est_lm;
    e_lm=dot(d_lm,d_lm);
    % 根据误差,决定如何更新参数和阻尼系数
    if e_lm<e      
        lamda=lamda/10;
        a_est=a_lm;
        b_est=b_lm;
        e=e_lm;
        disp(e);
        updateJ=1;
    else
        updateJ=0;
        lamda=lamda*10;
    end
end
%显示优化的结果
a_est
b_est
查看评论

matlab实现LM(Levenberg-Marquard)算法

  该例子是关于函数f=a×e−b×xf=a×e−b×xf=a \times e^{-b\times x} 。我们给出一系列的(x,f)值,然后利用LM算法,迭代算出a,b的合适值,使得这一系列的(x...
  • xiaotao_1
  • xiaotao_1
  • 2018-04-16 20:59:18
  • 15

使用 MATLAB 的 fitlm 函数进行线性回归

今天在做《数理统计》关于线性回归的作业,本来用R已经做出来了,但是由于最近使用matlab很多,所以也想看看用matlab怎么做。 matlab中有很多函数可以做各种各样的回归,也有cftool工具...
  • u010099080
  • u010099080
  • 2015-12-21 16:56:15
  • 8509

lm算法的matlab实现

  • 2014年12月14日 22:24
  • 3KB
  • 下载

LM(Levenberg-Marquard) c语言实现

 LM在最优化中占据着极其重要的地位,将非线性问题转为为线性问题来求解,求出最优解。   最近在搞相机标定,而不得不面对LM,首先的想法百度,(个人不喜欢去看e文,总觉得效率不高...
  • wejoncy
  • wejoncy
  • 2015-03-06 09:34:14
  • 3107

Levenberg-Marquardt算法浅谈

码字不易,转发请注明原文链接 在讲Levenberg-Marquardt算法之前我想先谈下牛顿法和高斯牛顿法。 牛顿法 如果有一点数值计算知识的同学对牛顿迭代法并不陌生,先贴个经典例图来镇楼。 ...
  • liu14lang
  • liu14lang
  • 2017-01-03 10:05:16
  • 15502

一个简单的BP神经网络matlab程序(附函数详解)

说明: 1、此文的程序来自博客:http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html 2、本人对其中涉及到的函数进行了详细说明。 3...
  • ckzhb
  • ckzhb
  • 2017-03-06 10:53:42
  • 21958

LM(Levenberg-Marquard)算法的实现

[原创]LM(Levenberg-Marquard)算法的实现 2010年9月14日 由 learnhard 留言 » 转载请注明出处:http://www.codelast.co...
  • shenxiaolong188
  • shenxiaolong188
  • 2015-10-28 12:57:02
  • 1796

【转】 Levenberg-Marquardt 算法快速入门教程

什么是最优化,可分为几大类? 答:Levenberg-Marquardt算法是最优化算法中的一种。最优化是寻找使得函数值最小的参数向量。它的应用领域非常广泛,如:经济学、管理优化、网络分析、最优设计、...
  • xueyinhualuo
  • xueyinhualuo
  • 2015-07-16 11:03:34
  • 3733

在Matlab中使用Levmar

本文介绍如何在Windows平台下,在Matlab中适用Levmar。 首先,网上教程很多,有的需要适用cmake,那样略显麻烦。Levmar本身提供了对Visual Studio的支持,并且大部分...
  • oTangLiTangLi
  • oTangLiTangLi
  • 2015-01-26 17:33:57
  • 492

神经网络matlab的使用

来自人工智能贴吧,利_刃。仅供收藏。 关于Matlab的入门教程,参看这个帖子:tieba#baidu#com/p/2945924081 例1:我们都知道,面积=长*宽,假如我们有一组数测...
  • yonghenglh6
  • yonghenglh6
  • 2015-04-28 21:55:12
  • 4532
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 1742
    排名: 2万+
    最新评论