matlab nlinfit参数拟合问题

大神好,我编了如下的命令,想拟合出三个未知数p1,p2,p3,但是matlab报错,麻烦大神看看应该怎么改,谢谢!
t=[1 2 3 4 6 8 1012 16];
y=[0.7 1.2 1.4 1.41.1 0.8 0.6 0.5 0.3];
p0=[-0.001 -0.001-0.001];
fun=inline('exp(-p(1)*t)*exp(-p(2)*t)*((p(1)*p(3)*exp(p(1)*t))/(p(1)-p(2))-(p(1)*p(3)*exp(p(2)* t))/( p(1)-p(2)))','p','t');
[p,r,j]=nlinfit(t,y,fun,p0);

问题一:初值选择不合适;解决对策:p0=rand(1,3)
问题二:表述的自定义函数只适用单个数据计算;解决对策:采用数组的形式参与计算,即应改为
fun=inline('exp(-p(1)*t).*exp(-p(2)*t).*((p(1)*p(3)*exp(p(1)*t))./(p(1)-p(2))-(p(1)*p(3)*exp(p(2)*t))/(p(1)-p(2)))','p','t');
程序改后的运行结果为

p =
0.4345 0.1830 2.5255
r =
-0.1079 0.0040 0.0652 0.0690 -0.0334 -0.0742 -0.0432 0.0384 0.0708
j =
1.4724 -0.4209 0.3199
1.6565 -1.2958 0.4736
1.3193 -2.2516 0.5285
0.8402 -3.1009 0.5270
0.0326 -4.2243 0.4488
-0.3845 -4.5969 0.3461
-0.5114 -4.4403 0.2547
-0.4883 -3.9882 0.1828
-0.3171 -2.8227 0.0908
温馨提示:答案为网友推荐,仅供参考
相似回答