Matlab拟合问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 10:01:06
函数文件:
function f=ansys6_prac2_fun(a,x)
f=200000./a(1)+200000./a(2)-200000./a(2).*exp(-a(2)/a(3).*x);
程序:
z=[0 0.5 1 1.5 2 2.5 3.5 5.5 8.5 12 16 21 24];
x=z/24;
y=[0 0.00005 6.66667E-05 6.66667E-05 8.33333E-05 8.33333E-05 8.33333E-05 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001];
a0=[1 1 1];
ff=optimset; ff.TolFun=1e-20; ff.TolX=1e-15;
[a,RESNORM,RESIDUAL,EXITFLAG]=lsqcurvefit(@ansys6_prac2_fun,a0,x,y,[],[],ff) ;
for i=1:length(x)
yy2(i)=ansys6_prac2_fun(a,x(i));
end
plot(x,y,'*',x,yy2)

请问哪里有问题,怎么拟合不出来呢

我们先做个实验。
x还是你给定的一组数据,我们假设a=1,b=2,c=3让它根据你那个函数,产生y,
然后我们根据x,y来拟合出a,b,c看对不对。

>> z=[0 0.5 1 1.5 2 2.5 3.5 5.5 8.5 12 16 21 24];
x=z/24;
>> y=ansys6_prac2_fun([1,2,3],x);

a0=[1 1 1];
ff=optimset; ff.TolFun=1e-20; ff.TolX=1e-15;
[a,RESNORM,RESIDUAL,EXITFLAG]=lsqcurvefit(@ansys6_prac2_fun,a0,x,y,[],[],ff) ;
a

for i=1:length(x)
yy2(i)=ansys6_prac2_fun(a,x(i));
end
plot(x,y,'*',x,yy2)

经检验,计算出来a,b,c与我们给定的1,2,3是吻合的。

这样子的话,我们可以认为程序应当问题不大,两个方面你考虑一下
1。你的数据y是不是适合用你的拟合公式。
2。按你的数据计算的结果中说明,
Maximum number of function evaluations exceeded;
increase options.MaxFunEvals
可以尝试改一下上面的这个参数,或者初值试一下。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面改了一下你的初始值,做得马马虎虎。真大啊。

z=[0 0.5 1 1.5 2 2.5 3.5 5.5 8.5 12 16 21 24];
x=z/24;
y=[0 0.00005 6.66667E-05 6.66667E-05 8.33333E-05 8.33333E-05 8.33333E-05 0.0001 0.0001 0.0001 0.0001 0.0001