最小二乘曲线拟合及其MATLAB实现课件 下载本文

需要说明的是,对于K?t?,显然K?ti??ki?i?1,2,3,4,5?,但是根据曲线拟合的最

小二乘原理,从整体趋势上使偏差达到最小,此处的偏差

??K?t??k?iii?152?0.1887,这个

值已经很小了、满足要求。

2.3 总结归纳求解步骤

下面我们就以上摩尔(Moore)预测公式实例总结利用最小二乘曲线拟合原理求解实际问题的步骤:

(1)分析数据,根据散点图设定拟合函数

K?t??a?bt

(2)代入数据得到超定方程组

a?bti?ki,i?1,2,3,4,5

该超定方程组的矩阵形式为Ax?y,其中

?1?1?A??1??1??1t1??1?1t2???t3???1??t4??1t5??1??1959?1962??1963?,

?1964?1965??TTTx??a,b?,y??k1,k2,k3,k4,k5???1,3,4,5,6?.

(3)如表 2所示,建立法方程组ATAx?ATy.

ti 1959 1962 1963 ki 1 3 4 tiki 1959 5886 7852 ti2 3837681 3849444 3853369 第 11 页 共 26 页

1964 1965 5 6 9820 11790 3857296 3861225 ?ti?15i?9813 ?ti?15i?19 ?tkii?15i?37307 ?ti?152i ?19259015表 2

据表 2中计算结果得

??mATA??5?t?i??i?1?t?i?9813??5i?1???5?, 9813192590152???ti??i?1?TT5ATy???ki,?tiki???19,37307?

其中m为实测数据组数。 (4)解法方程组得拟合参数向量

x*?a*,b*并据此得到拟合曲线函数

?????1625.5503,0.8302?TT

K?t???1625.5503?0.8302t

(5)通过将所得的拟合函数曲线与原始数据散点图进行同坐标对比或计算总体趋势上的偏差值检验拟合函数的精度。

3 基于MATLAB的最小二乘曲线拟合

3.1 MATLAB软件介绍

MATLAB是matrix和laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为

第 12 页 共 26 页

科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类

科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。

3.2 求解的基本理论阐述

假设有一组数据xi,yi?i?1,2,?,n?,且已知这组数据满足某一函数原型

第 13 页 共 26 页

?y?x??f?a,x?,其中a为待定系数向量,则最小二乘曲线拟合的目标就是求出这一组待定系数值,使得目标函数

??xi???min??yi?f?a,xi?? J?min??yi?y22ai?1ai?1nn最小。MATLAB的统计工具箱提供了Isqcurvefit函数,可以解决最小二乘曲线拟合问题。

该函数的调用格式如下:

?a,jm??Isqcurvefit?Fun,a0,x,y?

其中,Fun为原始函数的MATLAB表示,可以是M-函数或inline函数;a0为

最优化的初值;x,y为原始输入输出向量。调用该函数,将返回待定系数向量a,以及在此系数下的目标函数的值Jm.。

3.3 结合实例进行MATLAB解算

此处我们就结合上面的Moore实例进行分析,通过对散点图的分析我们已经假设出了初始函数

K?t??a?bt.

其实现的MATLAB程序如下: t=[1959 1962 1963 1964 1965]; k=[1 3 4 5 6];

令a1?a,a2?b这样,原函数就可以写出K?t??a1?a2t,可以用MATLAB程序代码写出: function k = K( a,t ) k=a(1)+a(2)*t;

end %定义原型函数k

第 14 页 共 26 页

format long%小数精度定义为小数点后15位

[a,JM]=lsqcurvefit('K',[1;1],t,k); %调用Isqcurvefit函数求系数和偏差值结果如下: a a =

1.0e+03 *

-1.625528269401662

0.000830188662693 JM JM =

0.188679245282990

由结果可知a=a(1)=-1625.528269,b=a(2)=0.830189,即由MATLAB解算出来的拟合函数为

K?t???1625.528296?0.830189t

JM???K?ti??ki??0.1886792i?15这与上面手工解算的结果基本一致。

另外,我们可以将原始数据的散点图和得到的拟合曲线画在一个坐标画面上以检测拟合函数的精度,编写程序如下: ti=[1959 1962 1963 1964 1965]; ki=-1625.528296+0.830189*ti; plot(t,k,'o',ti,ki)

结果如图 2所示,最小二乘法曲线拟合的结果是找到符合经验公式的最优曲线,但这一经验公式是否有效还需要事后检验,一般就是从图像上做出判断。定量的方法也是有的,一般是计算残差平方和,再进行统计检验,对此就不做多余的讲解了。通过对图 2的分析可知拟合曲线与原始数据是比较稳合的,满足要求。

第 15 页 共 26 页