|
楼主 |
发表于 2006-11-18 16:24
|
显示全部楼层
楼上的高手,我借了本书看到这样一个例子,很符合我的需要,但是我原搬不动的把书上的例子抄下来,在MATLAB里面运行,还是出错,请帮我看看,谢谢。
例子如下:函数为: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('myfun2',d0,[],[],options,Data);
【结果输出】
c=2.8898
3.0061
d=1.4006 10.5891
我运行了上面的例子,怎么老是出错,不知道能不能告诉我问题出在哪里?谢谢! |
|