问题描述.png (29.7 KB, 下载次数: 1)
-1-27 09:34 上传
%Gauss-Newton算法实现如下
function[x,minf] = GN(f,x0,var,eps)formatlong;
ifnargin == 3%如果没有设置eps,则eps=1.0e-6eps = 1.0e-6;
end
m = 0;
S =transpose(f)*f; %trnspose是转置,求得r方k =length(f);%
%n =length(x0);%n为变量个数,但是没用到啊?x0 =transpose(x0); %将行向量转置为列向量tol =1; %初始容差A =jacobian(f,var);
whiletol>eps
Fx = zeros(k,1);
for i=1:k
Fx(i,1) = subs(f(i),var,x0);
end
Sx = subs(S,var,x0); %求得f转置与其本身值,Ax = subs(A,var,x0); %雅克比矩阵的值gSx = transpose(Ax)*Fx;
dx = -transpose(Ax)*Ax\gSx;
x0 = x0 + dx;
tol = norm(dx); %tol=dx绝对值之和m = m+1;
if(m>100000)
disp('迭代步数太多,可能不收敛');return;
end
end
minf =subs(S,var,x);
formatshort;
x = x0;
end
调用如下:
>> syms z1 z2 z3 z4 z5
>> x0 =[1.7380;0.9555;-1.3863;2.0149;-2.5257];
>> R =exp(z1)./(exp(z1)+exp(-z1)).*exp(-(xdata./exp(z3)).^exp(z2))+(1-exp(z1)./(exp(z1)+exp(-z1))).*exp(-(xdata./exp(z5)).^exp(z4));
>> f = 0.5.*(ydata1 - R).^2;
>> var = findsym(f);
>> eps = 1.0e-3;
>> GN(f,x0,var,eps)
出现问题如下:
从 sym 转换为 double 时出现以下错误:
出错 GN (line 17)
Fx(i,1) = subs(f(i),var,x0);%subs(f(i),var,x0);
如果觉得《matlab函数参数不足 调用函数显示输入参数不足》对你有帮助,请点赞、收藏,并留下你的观点哦!