Levenberg–Marquardt algorithm

来源:互联网 发布:淘宝客服经典对话 编辑:程序博客网 时间:2024/04/27 19:20





function [x,minf] = minLM(f,x0,beta,u,v,var,eps)format long;if nargin == 6    eps = 1.0e-6;endS = transpose(f)*f;k = length(f);n = length(x0);x0 = transpose(x0);A = jacobian(f,var);tol = 1;while tol>eps    Fx = zeros(k,1);    for i=1:k        Fx(i,1) = Funval(f(i),var,x0);    end    Sx = Funval(S,var,x0);    Ax = Funval(A,var,x0);    gSx = transpose(Ax)*Fx;    Q = transpose(Ax)*Ax;        while 1        dx = -(Q+u*eye(size(Q)))\gSx;        x1 = x0 + dx;        for i=1:k            Fx1(i,1) = Funval(f(i),var,x1);        end        Sx1 = Funval(S,var,x1);        tol = norm(dx);        if tol<=eps            break;        end        if Sx1 >= Sx+beta*transpose(gSx)*dx            u = v*u;            continue;        else            u = u/v;            break;        end    end    x0 = x1;endx = x0;minf = Funval(S,var,x);format short;


0 0