|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
各位高手,小弟最近在进行对一条增益曲线进行拟合时,遇到了困难,查阅书籍时,发现和这个例子比较相似:
例子如下:函数为:y=c(1)*exp(-d(1)*x)+c(2)*exp(-d(2)*x)
function f=myfun(d,Data)
%假设y=c(1)*exp(-d(1)*x)+...+c(n))*exp(-d(n)*x)
%带有n个线性参数,n个非线性参数
x=Data(:,1);y=Data(:,2);
A=zeros(length(x),length(d));
for i=1:length(d)
A(:,i)=exp(-d(i)*x);
end
c=A\y; %通过A*c=y求解线性参数c;
z=A*c;
f=z-y;
Data=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0;5.8955,3.5639,2.5173,1.9799,1.899,1.3938,1.1359,1.0096,1.0343,0.8435,0.6856,0.61,0.5392,0.3946,0.3903,0.5474,0.3459,0.137,0.2211,0.1704,0.2636]';
options=optimset('LargeScale','off');
options=optimset(options,'MaxFunEvals',300);
options=optimset(options,'LevenbergMarquardt','off');
options=optimset(options,'LineSearch','cubicpoly');
d0=[1,2];
d=lsqnonlin('myfun',d0,[],[],options,Data);
【结果输出】
c=2.8898
3.0061
d=1.4006 10.5891
但现在我的问题是:我要求的公式形式为:y=c(1)*exp(-d(1)*x/t(1))+c(2)*exp(-d(2)*x/t(2))+……c(10)*exp(-d(10)*x/t(10))也就是说有三个未知数向量需要求解,那么,如何在本例子上修改呢?
我试了很多种形式,都提示我公式运用错误,请各位不吝赐教。
p.s:或者不用这么麻烦,直接把三个参数向量全改成a(1),a(2)……?但为了得到结果的方便,还是希望各位帮我看一看(cause有三十个系数需要确定,每个向量十个,分开求出比较方便) |
|