[已解决] fit进行自定义函数的拟合误差过大

[复制链接]
YLW楊 发表于 2022-2-21 20:21:37
想要用fit对数据进行拟合,想要拟合的函数为:
  1. f_Richards=fittype('A*(1-exp(-b*t))^c','independent','t','coefficients',{'A','b','c'});
复制代码


理论上,该函数大致走向应当是先逐渐快速上升在缓慢上升最后趋于水平,类似于”S“曲线;

自变量为:
  1. year_200=[1:200];
复制代码
因变量为:Volume_Oak  其值如下;
0.0100000000000000        0.0600000000000000        0.190000000000000        0.420000000000000        0.790000000000000        1.29000000000000        1.95000000000000        2.76000000000000        3.74000000000000        4.88000000000000        6.17000000000000        7.62000000000000        9.22000000000000        10.9600000000000        12.8400000000000        14.8400000000000        16.9500000000000        19.1800000000000        21.5000000000000        23.9200000000000        26.4100000000000        28.9800000000000        31.6000000000000        34.2900000000000        37.0100000000000        39.7800000000000        42.5700000000000        45.3900000000000        48.2200000000000        51.0600000000000        53.9100000000000        56.7600000000000        59.5900000000000        62.4200000000000        65.2300000000000        68.0200000000000        70.7900000000000        73.5300000000000        76.2400000000000        78.9200000000000        81.5600000000000        84.1600000000000        86.7200000000000        89.2500000000000        91.7300000000000        94.1600000000000        96.5500000000000        98.9000000000000        101.200000000000        103.450000000000        105.650000000000        107.800000000000        109.910000000000        111.970000000000        113.980000000000        115.940000000000        117.860000000000        119.720000000000        121.540000000000        123.320000000000        125.040000000000        126.720000000000        128.360000000000        129.950000000000        131.500000000000        133.010000000000        134.470000000000        135.900000000000        137.280000000000        138.620000000000        139.920000000000        141.190000000000        142.420000000000        143.610000000000        144.760000000000        145.880000000000        146.970000000000        148.020000000000        149.050000000000        150.040000000000        151        151.930000000000        152.830000000000        153.700000000000        154.540000000000        155.360000000000        156.150000000000        156.920000000000        157.660000000000        158.380000000000        159.080000000000        159.750000000000        160.400000000000        161.030000000000        161.640000000000        162.230000000000        162.800000000000        163.350000000000        163.880000000000        164.390000000000        164.890000000000        165.370000000000        165.840000000000        166.290000000000        166.720000000000        167.140000000000        167.550000000000        167.940000000000        168.320000000000        168.690000000000        169.040000000000        169.380000000000        169.710000000000        170.030000000000        170.340000000000        170.640000000000        170.930000000000        171.200000000000        171.470000000000        171.730000000000        171.980000000000        172.220000000000        172.460000000000        172.680000000000        172.900000000000        173.110000000000        173.310000000000        173.510000000000        173.700000000000        173.880000000000        174.060000000000        174.230000000000        174.390000000000        174.550000000000        174.700000000000        174.850000000000        175        175.130000000000        175.270000000000        175.400000000000        175.520000000000        175.640000000000        175.750000000000        175.870000000000        175.970000000000        176.080000000000        176.180000000000        176.280000000000        176.370000000000        176.460000000000        176.540000000000        176.630000000000        176.710000000000        176.790000000000        176.860000000000        176.940000000000        177.010000000000        177.080000000000        177.140000000000        177.200000000000        177.260000000000        177.320000000000        177.380000000000        177.440000000000        177.490000000000        177.540000000000        177.590000000000        177.640000000000        177.680000000000        177.730000000000        177.770000000000        177.810000000000        177.850000000000        177.890000000000        177.930000000000        177.960000000000        178        178.030000000000        178.060000000000        178.090000000000        178.120000000000        178.150000000000        178.180000000000        178.210000000000        178.230000000000        178.260000000000        178.280000000000        178.300000000000        178.330000000000        178.350000000000        178.370000000000        178.390000000000        178.410000000000        178.430000000000        178.450000000000        178.460000000000        178.480000000000        178.500000000000        178.510000000000        178.530000000000


拟合代码如下:
  1. f_Richards_Fit_Volume_Oak=fit(year_200,Volume_Oak,f_Richards,...
  2.                                 'Lower',[-Inf,-Inf,-Inf],'Upper',[Inf,Inf,Inf],'StartPoint',[90,0.1,-100]);
复制代码


拟合出来的曲线要么是近乎水平,要么是近乎垂直,请问怎么解决这种问题呢?



最佳答案


TouAkira 发表于 2022-2-21 21:17:51
你的初值选的不好。c值这种位于指数位置的数值要谨慎,一般先给个0或者1之类简单值做测试。
更换初值能得到一组拟合效果较好的参数
[ 178.9, 0.0358, 3 ]
还有就是提问时请直接紧凑地把代码发到一起,这样其他人复制时候也方便,或者直接上传m文件、mat文件。你现在这种一个问题的代码拆成若干段,中间还掺杂不同格式,等于变相浪费乐于帮助你解答的坛友的时间。
回复此楼

2 条回复


TouAkira 发表于 2022-2-21 21:17:51
你的初值选的不好。c值这种位于指数位置的数值要谨慎,一般先给个0或者1之类简单值做测试。
更换初值能得到一组拟合效果较好的参数
[ 178.9, 0.0358, 3 ]
还有就是提问时请直接紧凑地把代码发到一起,这样其他人复制时候也方便,或者直接上传m文件、mat文件。你现在这种一个问题的代码拆成若干段,中间还掺杂不同格式,等于变相浪费乐于帮助你解答的坛友的时间。
回复此楼

YLW楊 发表于 2022-2-21 21:22:03
TouAkira 发表于 2022-2-21 21:17
你的初值选的不好。c值这种位于指数位置的数值要谨慎,一般先给个0或者1之类简单值做测试。
更换初值能得到 ...

非常感谢!

格式的问题很抱歉,第一次发帖,本来以为很注意了看来还是有做的不好的地方,以后会多多改进;

再次感谢您的解答!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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