《matlab实现非线性拟合课件》由会员分享,可在线阅读,更多相关《matlab实现非线性拟合课件(11页珍藏版)》请在金锄头文库上搜索。
1、设有实验数据设有实验数据 ,寻找函数寻找函数使得函数在点使得函数在点 处的函数值与观测数据偏差的处的函数值与观测数据偏差的平方和达到最小平方和达到最小.即求满足如下条件的函数即求满足如下条件的函数 使得使得其中其中 是待定的参数,而是待定的参数,而 就是最小二乘法所确定的就是最小二乘法所确定的最佳参数最佳参数.解决此类问题有以下几个步骤:(解决此类问题有以下几个步骤:(1)首先作出散点)首先作出散点图,确定函数的类别;(图,确定函数的类别;(2)根据已知数据确定待定)根据已知数据确定待定参数的初始值,利用参数的初始值,利用Matlab软件计算最佳参数;软件计算最佳参数;(3)根据可决系数,比较
2、拟合效果,计算可决系数)根据可决系数,比较拟合效果,计算可决系数的公式为的公式为matlab实现非线性拟合其中R2越趋近于越趋近于1表明拟合效果越好表明拟合效果越好. 如果是多项式函数,则称为多项式回归,此时如果是多项式函数,则称为多项式回归,此时的参数即多项式的系数;如果为指数函数、对数函的参数即多项式的系数;如果为指数函数、对数函数、幂函数或三角函数等,则称为非线性拟合数、幂函数或三角函数等,则称为非线性拟合.下面下面的图形给出了常见曲线与方程的对应关系:的图形给出了常见曲线与方程的对应关系:在在Matlab中实现可决系数的计算的例子:中实现可决系数的计算的例子:x=2:16;y=6.42
3、,8.2,9.58,9.5,9.7,10,9.93,9.99,10.49,10.59,10.6,10.8,10.6,10.9,10.76;y1=x./(0.1152+0.0845*x); % 拟合曲线拟合曲线R2=1-sum(y-y1).2)/sum(y-mean(y).2)matlab实现非线性拟合幂函数幂函数 指数函数指数函数 双曲线函数双曲线函数 对数函数对数函数 matlab实现非线性拟合指数函数指数函数 S形曲线形曲线 具有具有S形曲线的常见方程有:形曲线的常见方程有:罗杰斯蒂(罗杰斯蒂(logistic)模型)模型: 龚帕兹(龚帕兹(Gomperty)模型:)模型:理查德(理查德(
4、Richards)模型:)模型: 威布威布尔尔(Weibull)模型:模型: matlab实现非线性拟合为了实现非线性拟合,首先要定义在线函数为了实现非线性拟合,首先要定义在线函数1. inline 定义的函数:用于曲线拟合、数值计算定义的函数:用于曲线拟合、数值计算步骤:步骤:(1)建立建立M文件;文件;(2)fun=inline(f(x) , 参变量参变量,x)例例1. 建立函数:建立函数: a,b,c为待定的参数为待定的参数fun=inline(b(1)*(1-b(2)*exp(-b(3)*x),b,x);此处,将此处,将b看成参变量,看成参变量,b(1),b(2),b(3)为其分量为其
5、分量.若计算函数在若计算函数在x=0:0.1:1上的函数值,由于此时上的函数值,由于此时x为矩阵,为矩阵,只需将函数表达式中的某些量表示成向量有些只需将函数表达式中的某些量表示成向量有些*改成改成.*即可即可.matlab实现非线性拟合在实际问题中,有时散点图作出后未必是多项式的在实际问题中,有时散点图作出后未必是多项式的图形,可能像其他的曲线,这时可以猜测曲线类型,图形,可能像其他的曲线,这时可以猜测曲线类型,然后利用如下命令:然后利用如下命令:beta,r,J = nlinfit(x,y,fun,beta0)其中,其中,x,y为原始数据,为原始数据,fun是在是在M文件中定义的函数,文件中
6、定义的函数,beta0是函数中参数的初始值;是函数中参数的初始值;beta为参数的最优值,为参数的最优值,r是各点处的拟合残差,是各点处的拟合残差,J为雅克比矩阵的数值为雅克比矩阵的数值.例例2. 已知如下数据,求拟合曲线已知如下数据,求拟合曲线k= 0,47,93,140,186,279,372,465,558,651; y=18.98,27.35,34.86,38.52,38.44,37.73,38.43,43.87,42.77,46.22;plot(k,y,*)matlab实现非线性拟合根据右图,我们猜测曲线为:根据右图,我们猜测曲线为:现在利用最小二乘法确定最现在利用最小二乘法确定最佳
7、参数:佳参数:b1,b2,b3b0=43,0.6,0.1; %初始参数值初始参数值fun=inline(b(1)*(1-b(2)*exp(-b(3)*k),b,k);b,r,j=nlinfit(k,y,fun,b0);b %最佳参数最佳参数R=sum(r.2) %误差平方和误差平方和b = 42.6643,0.5483,0.0099即拟合曲线为:即拟合曲线为:(图图6.3)matlab实现非线性拟合拟合结果如右图拟合结果如右图所示,红色为拟所示,红色为拟合曲线图形,合曲线图形,*为为原始散点图原始散点图. y1=42.6643*(1-0.5483*exp(-0.0099*k);plot(k,y
8、,*,k,y1,-or)作图程序为:作图程序为:(图图6.4)练习:计算可决系数练习:计算可决系数matlab实现非线性拟合 例例3.炼钢厂出钢时所用盛钢水的钢包,由于钢水对耐炼钢厂出钢时所用盛钢水的钢包,由于钢水对耐火材料的侵蚀,容积不断增大,我们希望找出使用次火材料的侵蚀,容积不断增大,我们希望找出使用次数与增大容积之间的函数关系数与增大容积之间的函数关系. .实验数据如下:实验数据如下:表表4.2 钢包使用次数与增大容积钢包使用次数与增大容积使用使用次数次数23456789增大增大容积容积6.428.29.589.59.7109.939.99使用使用次数次数101112 1314 151
9、6增大增大容积容积10.4910.5910.610.810.610.910.76分别选择函数分别选择函数 拟合钢包容积与使用次数的关系拟合钢包容积与使用次数的关系 ,在同一坐标系内在同一坐标系内作出函数图形作出函数图形.matlab实现非线性拟合x1=2:16;y1=6.42,8.2,9.58,9.5,9.7,10,9.93,9.99,10.49,10.59,10.6,10.8,10.6,10.9,10.76;b01=0.1435,0.084; %初始参数值初始参数值fun1=inline(x./(b(1)+b(2)*x),b,x); % 定义函数定义函数b1,r1,j1=nlinfit(x1
10、,y1,fun1,b01);y=x1./(0.1152+0.0845*x1); %根据根据b1写出具体函数写出具体函数 plot(x1,y1,*,x1,y,-or);下面给出分式函数拟合程序:下面给出分式函数拟合程序:初始参数初始参数b0的计算,的计算, 由于确定两个参数值,因此我们由于确定两个参数值,因此我们选择已知数据中的两点(选择已知数据中的两点(2,6.42)和()和(16,10.76)代入)代入方程,得到方程组:方程,得到方程组:可决系数计算:可决系数计算:matlab实现非线性拟合上述方程组有两种解法:手工,上述方程组有两种解法:手工,Matlab,下面介下面介绍绍Matlab 解方程组的方法解方程组的方法x,y=solve(6.42*(2*a+b)=2,10.76*(16*a+b)=16)取点:取点:(2,6.42),(8,9.93),(10,10.49)代入上述方程代入上述方程 a,b,c=solve(log(b)+c*2=log(6.42/a-1),log(b)+c*10=log(10.49/a-1),log(b)+c*8=log(9.93/a-1)注意:如果出现复数解,则只取实部注意:如果出现复数解,则只取实部matlab实现非线性拟合