| 查看: 466 | 回复: 0 | ||
[求助]
用Gauss-Neuton算法解非线形最小二乘法问题
|
|
%xdata,ydata1是测得的数据 syms z1 z2 z3 z4 z5 xdata = S1o; f = ydata1 - 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)); x0 = [1.7380;0.9555;-1.3863;2.0149;-2.5257]; var = findsym(f); eps = 1.0e-3; minGN %minGN是m文件里的一个函数,用于实现G-N算法,这个程序是自己网上找的,后面的注释是为了我自己方便理解自己加的,具体如下: function [x,minf] = minGN(f,x0,var,eps) format long; if nargin == 3 %如果没有设置eps,则eps=1.0e-6 eps = 1.0e-6; end S = transpose(f)*f; %trnspose是转置 k = length(f); % n = length(x0); %n为变量个数 x0 = transpose(x0); %将行向量转置为列向量 tol = 1; %初始容差 A = jacobian(f,var); 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); %求得f转置与其本身值 Ax = Funval(A,var,x0); %雅克比矩阵的值 gSx = transpose(Ax)*Fx; dx = -transpose(Ax)*Ax\gSx; x0 = x0 + dx; tol = norm(dx); %tol=dx绝对值之和 end minf = Funval(S,var,x); format short; x = x0; %%Funval函数也是在网上找到的资源,后面的注释原本就有,具体如下: function fv = Funval(f,varvec,varval) var = findsym(f);%找出表达式 即f函数包含的变量,即s,t varc = findsym(varvec);%找出传递参数的变量,即[t s]中的t,s s1 = length(var);%函数的个数,例子中即s t 2个 s2 = length(varc);%变量个数,即[t s]两个 m =floor((s1-1)/3+1);%floor(3.6)=3,即最靠近左边的整数 varv = zeros(1,m); if s1 ~= s2 for i=0: ((s1-1)/3) k = findstr(varc,var(3*i+1)); index = (k-1)/3; varv(i+1) = varval(index+1); end fv = subs(f,var,varv); else fv = subs(f,varvec,varval); %如果原来函数变量个数和传递的参数中变量个数一致 这调用subs函数 即计算在给点点处的函数值 end 现在在命令窗口输入上述命令,提示: 错误使用 minGN (line 6) 输入参数的数目不足。 谁能告诉我这是什么原因呢,参数数目应该是够的?另外,麻烦大侠再解释一下 Funval函数里m =floor((s1-1)/3+1);这条语句在函数的作用,尤其是为什么取((s1-1)/3+1)?谢谢了!刚接触matlab不久,希望大家帮忙下.新人没有多少金币。。 |
» 猜你喜欢
【复旦大学】二维材料方向招收2026年博士研究生1名
已经有0人回复
北京纳米能源与系统研究所 王中林院士/曹南颖研究员课题组2026级硕/博/博后招生
已经有10人回复
物理学I论文润色/翻译怎么收费?
已经有112人回复
荷兰Utrecht University超快太赫兹光谱王海教授课题招收2026 CSC博士生
已经有23人回复
反铁磁体中的磁性切换:两种不同的机制已成功可视化
已经有0人回复
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复
石墨烯转移--二氧化硅衬底石墨烯
已经有0人回复













回复此楼