Matlab的Levenberg-Marquardt优化

时间:2018-07-25 16:19:31

标签: matlab optimization levenberg-marquardt

我正在尝试最小化征费功能:[1]:https://www.sfu.ca/~ssurjano/levy13.html 使用LM算法。该算法使用Hessian矩阵,该矩阵的目的是最小化最小二乘函数。 这是我的代码:

function x=LM_core(x,beta,fg,fh)
% fg is the gradient at point x.
% fh is the Hessian at point x
n=length(x);
pos_def = beta*eye(n);
sdum = fh + pos_def;
s = -sdum\fg; % calculating the inverse matrix using the linear solver.
lambda = 1;
x = x + lambda*s;
end

主要功能是:

function [xmin,fxmin,iter,err1,err2,err3]=lm_opt(x0,tol,f,f_g,f_h) 
% Three function handles: f for Objective funciton, f_g for gradient and f_h for Hessian
% ------------------------Pre-initialization------------------------------
itermax=1e5;
beta=1e3;
LL=0.25;
HH=2;

%-------------------------------------------------------------------------

x0=x0(:); x=x0;

for iter=1:itermax
    xold=x;
    fold = f(x);
    fg = f_g(x); %gradient
    fh = f_h(x); %Hessian
    x = LM_core(x,beta,fg,fh); % Calculate the next point using LM method.
    fnew = f(x);
    if fnew < fold
        beta= LL*beta;
        err1=norm(fg);
        err2=abs(fnew-fold);
        err3=norm(x-xold);
        if err1<tol && err2<tol && err3<tol
            xmin=x;
            fxmin=f(xmin);
            break;
        end
    else
        beta=HH*beta;
        x=xold;
    end
end
可以通过解析获得梯度和粗麻布矩阵。 我使用初始猜测= [1,1]时遇到以下错误 警告:矩阵是奇数,接近奇数或缩放比例很差。结果可能不正确。 RCOND = NaN。 我该如何克服这个问题? 有没有一种方法可以根据目标函数梯度和hessian来初始化beta,LL和HH? 我该如何改进该算法?

0 个答案:

没有答案