• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: Matlab
  • 标签: lm  algorithm  matlab  

资源简介

该算法是自己编的一个lm算法,是基于MATLAB的程序

资源截图

代码片段和文件信息

%%%%%%%%%函数等式为%%%%%%%%
syms a b x f;
%%%f=a*cos(b*x) + b*sin(a*x);
%%%%%下面出现J表示的是Jacobian matrix%%%%%%%%

%1,需要拟合的数据%%%%%%%%%%%
data_0=[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_0=[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算法
 %对 a b 赋初始值
 %a0=50;b0=50;
 for a0=91:120
     for b0=91:120
       % a_est=zeros(3030);
       % b_est=zeros(3030);
       % a_lm=zeros(3030);
       % b_lm=zeros(3030);
        %f0=a0*cos(b0*data_0)+b0*sin(a0*data_0);
        % 数据个数
        Ndata=length(obs_0);
       % 参数维数
         Nparams=2;
        % 迭代最大次数
        n_iters=50;
        % LM算法的阻尼系数初值
        lamda=0.01;
         % step1: 变量赋值
        updateJ=1;
        a_est(a0-90b0-90)=a0;
        b_est(a0-90b0-90)=b0;
        % step2: 迭代
        for it=1:n_iters
            if updateJ==1
                % 根据当前估计值,计算雅克比矩阵
                J=zeros(NdataNparams);
                for i=1:length(data_0)
                 J(i:)=[cos(b_est(a0-90b0-90)*data_0(i))+data_0(i)*b_est(a0-90b0-90)*cos(a_est(a0-90b0-90)*data_0(i)) sin(a_est(a0-90b0-90)*data_0(i))-a_est(a0-90b0-90)*data_0(i)*sin(b_est(a0-90b0-90)*data_0(i))];
                end
                 % 根据当前参数,得到函数值
                 f_est =a_est(a0-90b0-90)*cos(b_est(a0-90b0-90)*data_0) + b_est(a0-90b0-90)*sin(a_est(a0-90b0-90)*data_0);
                 % 计算误差
               

评论

共有 条评论