nixgnahz 发表于 2011-2-15 23:31

阻尼最小二乘法函数 各个参数的选取

请问 初始解 阻尼因子 缩放常数 怎么取 才能有最优解 ???
阻尼最小二乘法 程序 如下
function =mulDamp(F,x0,h,u,v,eps)
% 方程组:F
% 方程组的初始解:x0
% 数值微分增量步:h
% 阻尼因子:u
% 缩放常数:v
% 解的精度:eps
% 求得的一组解:r
% 迭代步数:m
% format long;
if nargin==5
    eps=1.0e-6;
end
FI=transpose(F)*F/2;
n=length(x0);
x0=transpose(x0);
m=1;
tol=1;
while tol>eps;
    j=0;
    fx=subs(F,findsym(F),x0);
    J=zeros(n,n);
    for i=1:n
      x1=x0;
      x1(i)=x1(i)+h;
      afx=subs(F,findsym(F),x1);
      J(:,i)=(afx-fx)/h;
    end
    FIx=subs(FI,findsym(FI),x0);
    for i=1:n
      x2=x0;
      x2(i)=x2(i)+h;
      gradFI(i,1)=(subs(FI,findsym(FI),x2)-FIx)/h;
    end
    s=0;
    while s==0
      A=transpose(J)*J+u*eye(n,n);
      p=-A\gradFI;
      r=x0+p;
      FIr=subs(FI,findsym(FI),r);
      if FIr<FIx
            if j==0
                u=u/v;
                j=1;
            else
                s=1;
            end
      else
            u=u*v;
            j=1;
            if norm(r-x0)<eps
                s=1;
            end
      end
    end
    x0=r;
    tol=norm(p);
    m=m+1;
    if(m>100000)
      disp('迭代步数太多,可能不收敛!');
      return;
    end
end

yufeng 发表于 2011-2-18 09:25

缩放常数:v 是否有范围 如果有 那么数据少可通过循环计算 然后比较 数据多 可以通过优化方法寻找
页: [1]
查看完整版本: 阻尼最小二乘法函数 各个参数的选取