关于非线性曲线拟合问题,有不少可以转化为线性曲线,然后使用线性最小二乘法来算,比如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都是我的估计值
当然指定函数拟合也有它的弊端,对于非常复杂的函数式,博主有好几次都没拟合出满意的曲线。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...