matlab 万能实用的非线性曲线拟合方法

在科学计算和工程应用中,经常会遇到需要拟合一系列的离散数据,最近找了很多相关的文章方法,在这里进行总结一下其中最完整、几乎能解决所有离散参数非线性拟合的方法


第一步:得到散点数据

根据你的实际问题得到一系列的散点

例如:

x=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]\';%加上一撇表示对矩阵的转置 y=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]\';


第二步:确定函数模型

根据上述的实际散点确定应该使用什么样的曲线,或者说是想要模拟的曲线

t=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]\'; tt=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]\'; plot(t,tt,\'.\');%得到散点图

散点图如下所示:

matlab 万能实用的非线性曲线拟合方法

我们已知现存的几种典型的(也是绝大多数情况下的函数模型)


matlab 万能实用的非线性曲线拟合方法

matlab 万能实用的非线性曲线拟合方法


选定一个与散点图像相匹配的函数模型,在此例中我们选择典型的S型曲线模型y= 1/(a+b*e^(-x)),其实此处的函数模型可以任意。


第三步:确定选用函数模型中的未知参数

首先了解一下matlab中的inline函数,inline是用来定义内联函数的
比如说:

y=inline(\'sin(x)\',\'x\') %第一个参数是表达式,第二个参数是函数变量 y(0) %计算sin(0)的值 y(pi) %计算sin(pi)的值 q=quad(y,0,1); %计算sin(x) 在0到1上的积分

之后,我们在代码中进行函数的定义

x=[3.2,3.6,3.8,4,4.2,4.5,4.8,5,5.3,5.4,5.6,5.8,6,6.2,6.4,6.6,6.9,7.1]\'; y=[0.38,0.66,1,0.77,0.5,0.33,0.66,0.83,0.33,1,0.33,0.5,0.33,0.71,0.71,1,0.87,0.83]\'; myfunc = inline(\'1./(beta(1)+beta(2).*exp(-x))\',\'beta\',\'x\');%三个参数分别为:函数模型(注意需要使用点除和点乘),待定系数,自变量 beta0 = [0.2,0.2]\';%待定系数的预估值 beta = nlinfit(x,y,myfunc,beta0);%



其中,beta返回了非线性拟合之后的待定系数,beta(1)和beta(2)表示待定系数,可以为任意数量的扩展beta(n),也就说明了选择函数模型的自由性,甚至可以有100个参数!

beta0表示的是函数模型中待定系数的预估值,可以任意设定


matlab 中的nlinfit(x,y,f,a)函数:用于拟合非线性表达式的函数
f:符号函数句柄,如果是以m文件的形式调用的时候,别忘记加@.这里需要注意,f函数的返回值是和y匹对的,即拟合参数的标准是(f-y)^2取最小值,具体看下面的例子
a:最开始预估的值(预拟合的未知参数的估计值)。如上面的问题如果我们预估A为1,B为2,则a=[1 2]
x:我们已经获知的x的值
y:我们已经获知的x对应的y的值(
这部分不懂的在matlab中help命令进行了解


求解出beta的大小:beta(1) = 1.1562 beta(2) = 15.1875;


画图:使用plot()函数

t=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]\'; tt=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]\'; plot(t,tt,\'.\'); hold on%保证同时显示 x = 0:0.01:8; y = 1./(1.1562+15.1875.*exp(-x)); plot(x,y);


matlab 万能实用的非线性曲线拟合方法


结果:是不是很棒!~,另外可以自行加上对应的横纵坐标内容,这里就不多说了。


总结一下matlab非线性拟合散点图的过程:得到散点数据=>确定函数模型=>求解函数模型的待定系数=>得到拟合函数的具体形式=>画出拟合图像

=========================================================================================

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzyxsd.html