[已解决] #新手求助!编辑优化options结构体/lsqcurvefit函数参数拟合

[复制链接]
梅菲斯秃 发表于 2020-11-20 21:18:38
t=[.083 .167 .25 .50 .75 1.0 1.5 2.25 3.0 4.0 6.0 8.0 10.0 12.0];
c=[10.9 21.1 27.3 36.4 35.5 38.4 34.8 24.2 23.6 15.7 8.2 8.3 2.2 1.8];
x0=ones(1,3);
f=@(x,t) x(3).*(x(2)./(x(2)-x(1))).*(exp(-x(1).*t)-exp(-x(2).*t));
opt1=optimset('Algorithm','levenberg-marquardt','LargeScale','off','MaxIter',100);
[x,norm,res]=lsqcurvefit(f,x0,t,c,[],[],opt1)

--------------------------------------------------------------------------------------------------------------

这个代码跑不出来,报错说是optimset当中的LM算法使用不对,以及lsqcurvefit那一行有问题,但是我实在不知道问题在哪。希望有大神帮帮我!


最佳答案


TouAkira 发表于 2020-11-20 23:21:35
你预设的x0=ones(1,3)这个数值会导致代入自定义模型f中时分母为零,这是要避免的情况。把它换成x0=rand(1,3)之类随机数基本就可以顺利运行了,比如 x0 = [ 0.814723686393179        0.905791937075619        0.126986816293506 ]时,求得
x =
    0.2803    3.6212   46.8275
norm =
   34.2317
res =
    1.1091   -0.3885   -0.5052   -0.5820    2.2767   -1.4071   -1.6859    2.8020   -1.7058    0.8438    1.2453   -2.9075    0.8787   -0.0423
回复此楼

2 条回复


TouAkira 发表于 2020-11-20 23:21:35
你预设的x0=ones(1,3)这个数值会导致代入自定义模型f中时分母为零,这是要避免的情况。把它换成x0=rand(1,3)之类随机数基本就可以顺利运行了,比如 x0 = [ 0.814723686393179        0.905791937075619        0.126986816293506 ]时,求得
x =
    0.2803    3.6212   46.8275
norm =
   34.2317
res =
    1.1091   -0.3885   -0.5052   -0.5820    2.2767   -1.4071   -1.6859    2.8020   -1.7058    0.8438    1.2453   -2.9075    0.8787   -0.0423
回复此楼

梅菲斯秃 发表于 2020-11-30 14:03:26
TouAkira 发表于 2020-11-20 23:21
你预设的x0=ones(1,3)这个数值会导致代入自定义模型f中时分母为零,这是要避免的情况。把它换成x0=rand(1,3 ...

谢谢!抱歉今天才看到。已经改过来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表