MATLAB数据拟合:非线性曲线拟合技巧

关于非线性曲线拟合问题,有不少可以转化为线性曲线,然后使用线性最小二乘法来算,比如y=a*exp(b*x),只要两边同时取对数,便可转化为线性问题,不过能转化的终究是少数,例如y=c+a*exp(b*x),便不能转化为线性问题了。我学习了matlab指定函数拟合命令fittype和fit,介绍给大家。

问题:x=[1,2,3,4,5,6,7,8];

y=[15.3,20.5,27.4,36.6,49.1,65.6,87.8,117.6];求y=a*exp(b*x)中的a,b

指定函数拟合:

x=x';y=y';%数据必须是列向量

syms t;

f=fittype('a*exp(b*t)','independent','t','coefficient',{'a','b'});

func=fit(x,y,f) %这里已求出来了a=11.42,b=0.2914

y1=func(x);  sum((y-y1).^2)   %算一下误差的平方和是 0.0119

而转化为线性问题求出来的a=11.44,b=0.2913,误差的平方和是 0.0262;

如果大家出现了这个问题

Warning: Start point not provided, choosing random start point.

> In Warning>Warning.throw at 31

  In fit>iFit at 320

  In fit at 109

是因为没有给定a和b的初始值,我们可以在拟合前估计一下a,b,然后把func=fit(x,y,f)改为func2=fit(x,y,f,'startpoint',[11,0.3]);和0.3都是我的估计值

当然指定函数拟合也有它的弊端,对于非常复杂的函数式,博主有好几次都没拟合出满意的曲线。

 

 

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空