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:

           sse: 1.3311e-05
       rsquare: 0.9637
           dfe: 3
    adjrsquare: 0.9517
          rmse: 0.0021

 

  • 63
    点赞
  • 324
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值