![](/uploads/image/0506.jpg)
matlab曲线拟合详解(含fit、fittype函数及fitoptions设置) 在利⽤origin等商业软件对某些复杂的公式进⾏拟合时,常常会出现未知原因的拟合失败。这并不是说明我们的公式本⾝有问题,很有可能是因为商业软件本⾝的算法有问题。这时候就可以应⽤matlab中的曲线拟合功能进⾏拟合。下⾯附上案例代码,为⽅便后⽂叙述,不同部分之间⽤空⾏隔开。 syms t;
x=[50; 200; 400; 600; 800];
y=[0.00000209; 0.00000267; 0.00000825; 0.000748; 0.0216];
f=fittype('C*(1-(0.0005)^(0.00013-0.000000372*t+0.0000000036*t^2))^(n+1)','independent','t','coefficients',{'C','n'});
[cfun,rsquare]=fit(x,y,f,'Lower',[580,1.4],'Upper',[3000000,3],'StartPoint',[600, 1.5]);
xi=0:1:850;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-');
第⼀部分进⾏的操作是定义变量及赋已知点
需要注意的点:
1、⾃变量t要单独定义
2、已知点必须保存为列向量。
3、列向量要⼀ ⼀对应(数据量⼤的时候⼀定要检查⼀下)。
第⼆部分进⾏的操作是定义拟合函数f
这⾥调⽤了fittype函数来进⾏函数的⾃定义。其语法可简述为:
f=fittype('公式具体表达','independent','⾃变量名','coefficients',{'待定参数1','待定参数2'}); ps:有兴趣的⼩伙伴可以在origin中拟合案例代码中的数据和公式,如果拟合成功了,请不吝赐教。
第三部分进⾏的是fitoptions设置,即拟合选项的设置。
昆明
旅游攻略景点大全两日游
这⾥调⽤了fit函数。其语法可简述为:西安最新疫情公布
[cfun,函数输出设置]=fit(x,y,f,'函数输⼊设置1',输⼊设置1具体定义,'函数输⼊设置2',输⼊设置2具体定义,...,'函数输⼊设置n',输⼊设置n具体定义)
函数输出设置可选rsquare等,需要注意的是其输出是作为⼀个整体输出的。⼀般写rsquare,诸如sse、rsquare、dfe、adjusted rsquare、rmse都会给出。所以建议只写rsquare即可。
函数输⼊设置可选较多,这⾥只给常⽤的⼏个参数设定:
1、lower:拟合参数下界限,和参数⼀ ⼀对应,案例中'Lower',[580,1.4]即表⽰拟合过程中参数C取值不⼩于580,参数n取值不⼩于1.4。
2、upper:拟合参数上界限,和参数⼀ ⼀对应,案例中'Upper',[3000000,3]即表⽰拟合过程中参数C取值不⼤于3000000,参数n 取值不⼤于3。
3、StartPoint:拟合参数初始值,和参数⼀ ⼀对应,案例中'StartPoint',[600,1.5]即表⽰拟合开始时参数C取值为600,参数n取值为1.5。
需要注意的⼀点是上述参数不知道的情况下可全部删去。但拟合结果会出现以下语句,其⼤意为计算过程中参数初值由系统随机选定,这将导致拟合结果不可靠。在不知道参数上下界范围的时候,建议删去所有输⼊设置,多次试算以确定参数⼤致范围。
警告: Start point not provided, choosing random start point.
> In curvefit.attention.Warning/throw (line 30)
In fit>iFit (line 299)
In fit (line 108)
cfun =
General model:
cfun(t) = C*(1-(0.0005)^(0.00013-0.000000372*t+0.0000000036*t^2))^(n+1)
Coefficients (with 95% confidence bounds):
C = 589.8 (-6265, 7445)
n = 1.488 (-1.303, 4.279)
rsquare =
包含以下字段的 struct:
sse: 1.9441e-05
rsquare: 0.9470
dfe: 3
adjrsquare: 0.9294
rmse: 0.0025
第四部分进⾏的是拟合⾃变量范围及间隔设置。
丽江旅游文化学院案例中xi=0:1:850;表⽰绘制0到850之间的拟合曲线,拟合曲线计算间隔为1。(理论上设置间隔越⼩,最后拟合结果越可靠,建议间隔不要超过3000个)
第五部分通过调⽤plot函数绘制拟合图像,可⾃⾏搜索matlab plot函数⽤法,这⾥不做过多解释。
最后结果如下:
cfun =
General model:
cfun(t) = C*(1-(0.0005)^(0.00013-0.000000372*t+0.0000000036*t^2))^(n+1)
Coefficients (with 95% confidence bounds):
C = 2152 (-2.326e+04, 2.756e+04)
n = 1.805 (-1.038, 4.647)
长沙动物园门票多少钱>宏村旅游攻略一日游
rsquare =
包含以下字段的 struct:克罗地亚vs巴西直播
sse: 1.3311e-05
rsquare: 0.9637
dfe: 3
adjrsquare: 0.9517
rmse: 0.0021