当前位置:文档之家› 用多项式模型进行数据拟合实验报告(附代码)

用多项式模型进行数据拟合实验报告(附代码)

实验题目: 用多项式模型进行数据拟合实验 1 实验目的本实验使用多项式模型对数据进行拟合,目的在于:(1)掌握数据拟合的基本原理,学会使用数学的方法来判定数据拟合的情况; (2)掌握最小二乘法的基本原理及计算方法; (3)熟悉使用matlab 进行算法的实现。

2 实验步骤2.1 算法原理所谓拟合是指寻找一条平滑的曲线,最不失真地去表现测量数据。

反过来说,对测量 的实验数据,要对其进行公式化处理,用计算方法构造函数来近似表达数据的函数关系。

由于函数构造方法的不同,有许多的逼近方法,工程中常用最小平方逼近(最小二乘法理论)来实现曲线的拟合。

最小二乘拟合利用已知的数据得出一条直线或曲线,使之在坐标系上与已知数据之间的距离的平方和最小。

模型主要有:1.直线型2.多项式型3.分数函数型4.指数函数型5.对数线性型6.高斯函数型等,根据应用情况,选用不同的拟合模型。

其中多项式型拟合模型应用比较广泛。

给定一组测量数据()i i y x ,,其中m i ,,3,2,1,0Λ=,共m+1个数据点,取多项式P (x ),使得min )]([0202=-=∑∑==mi i im i i y xp r ,则称函数P (x )为拟合函数或最小二乘解,此时,令∑==nk kk n x a x p 0)(,使得min ])([02002=⎪⎪⎭⎫ ⎝⎛-=-=∑∑∑===mi n k i ki k mi i i n y x a y x p I ,其中n a a a a ,,,,210Λ为待求的未知数,n 为多项式的最高次幂,由此该问题化为求),,,(210n a a a a I I Λ=的极值问题。

由多元函数求极值的必要条件:0)(200=-=∂∂∑∑==m i j i nk i k i k i x y x a a I,其中n j ,,2,1,0Λ= 得到:∑∑∑===+=n k mi i j i k mi kj iy x a x)(,其中n j ,,2,1,0Λ=,这是一个关于n a a a a ,,,,210Λ的线性方程组,用矩阵表示如下所示:⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡+∑∑∑∑∑∑∑∑∑∑∑=====+==+====m i i n i m i i i m i i n mi n i mi n imi n i mi n i mi im i imi n imi iy x y x y a a a x xx x xxx x m 000100201001020001M MΛM MM ΛΛ 因此,只要给出数据()i i y x ,,数据点个数m ,所要拟合的参数n ,就可求出未知数据阵),,,,(210n a a a a Λ2.2 实验步骤(1)根据已知数据(ch3 huaxuefy.m ),绘制出数据的散点图,如图1所示: 注:x 从1开始取值,值与值间隔为1。

y 取文件ch3 huaxuefy.m 中的数据。

图1 已知数据散点图(2)计算矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡+=∑∑∑∑∑∑∑∑==+==+====mi n i mi n imi n i mi n i mi im i imi n i mi i x xx x xxx x m A 0201010201ΛM MM ΛΛ,该矩阵为(n+1)*(n+1)矩阵。

(3)计算矩阵⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡=∑∑∑===m i i n i m i i i m i i y x y x y B 000M 。

(4)写出正规方程,求出n a a a a ,,,,210Λ。

(5)绘制出数据拟合后的曲线图。

分别取n=6,n=8,n=10,n=11,n=12,n=13,n=14,曲线图如下所示:图2 n=6时拟合曲线图3 n=8时拟合曲线图4 n=10时拟合曲线图5 n=11时拟合曲线图6 n=12时拟合曲线图7 n=13时拟合曲线3 实验结果分析通过运用最小二乘法对多项式模型进行数据拟合处理,获得n 次多项式及其系数n a a a a ,,,,210 。

分别取多项式次数n=6,n=8,n=10,n=11,n=12,n=13,n=14绘制拟合曲线,观察曲线图可知,对于最高次数不同的多项式,拟合结果是不一样的,即对于数据的逼近程度是不相同的。

随着n 的增大,曲线拟合效果变好;当n=10时,达到最好拟合效果;n 继续增大,曲线拟合效果又变差。

因此,对于相同的数据,并不是多项式的次数n 越高,拟合程度就越好。

4 实验结论通过实际做实验,得出了如下结论:离散数据点,可以采用多项式模型进行拟合,通过最小二乘法可以求得其最优多项式。

此外,还得出一个结论:对于数据拟合,并不是多项式次数越高,拟合就越逼近。

对此现象,在数值分析的参考书中找到了原因,这是龙格现象,即对于一个等间距节点的高次插值多项式,不收敛于插值函数。

参考文献[1] 陈光,任志良,孙海柱. 最小二乘曲线拟合及Matlab实现[J]. 软件技术, 2005.24(3).[2] 陈桂秀.用程序求解最小二乘拟合多项式的系数[J]. 青海师范大学学报, 2010(3).[3] 邵慧莹.数据拟合算法分析及C语言实现[J]. 信息科学, 2009.[4] 马正飞,殷翔.数学计算方法与软件的工程应用[M].北京:化学工业出版社,2002.[5] 徐士良.数值分析与算法[M]北京:机械工业出版社,2007.[6] 何仁斌. MATLAB6工程计算及应用[M]. 重庆: 重庆大学出版社, 2001.附录(源代码)Matlab%绘制散点图x=1:1:230;y=[26.6,27,27.1,27.1,27.1,27.1,26.9,26.8,26.7,26.426.0,25.8,25.6,25.2,25.0,24.6,24.2,24.0,23.7,23.423.1,22.9,22.8,22.7,22.6,22.4,22.2,22.0,21.8,21.4,20.9,20.3,19.7,19.4 ,19.3,19.2,19.1,19.0,18.9,18.9,19.2,19.3,19.3,19.4,19.5,19.6,19.6,19. 6,19.6,19.6,19.7,19.9,20.0,20.1,20.2,20.3,20.6,21.6,21.9,21.7,21.3,21.2,21.4,21.7,22.2,23.0,23.8,24.6,25.1,25.6,25.8,26.1,26.3,26.3,26.2,26.0,25.8,25.6,25.4,25.2,24.9,24.7,24.5,24.4,24.4,24.4,24.4,24.4,24.3,24.4,24.4,24.4,24.4,24.4,24.5,24.5,24.4,24.3,24.2,24.2,24.0,23.9,23.7,23.6,23.5,23.5,23.5,23.5,23.5,23.7,23.8,23.8,23.9,23.9,23.8,23.7,23.6,23.4,23.2,23.0,22.8,22.6,22.4,22.0,21.6,21.3,21.2,21.2,21.1,21.0,20.9,21.0,21.0,21.1,21.2,21.1,20.9,20.8,20.8,20.8,20.8,20.9,20.8,20.8,20.7,20.7,20.8,20.9,21.2,21.4,21.7,21.8,21.9,22.2 ,22.5,22.8,23.1,23.4,23.4,23.8,24.1,24.6,24.9,24.9,25.1,25.0,25.0,25.0,25.0,24.9,24.8,24.7,24.6,24.5,24.5,24.5,24.5,24.5,24.5,24.5,24.4,24.4,24.2,24.2,24.1,24.1,24.0,24.0,24.0,23.9,23.8,23.7,23.7,23.6 ,23.7,23.6,23.6,23.6,23.5,23.5,23.4,23.3,23.3,23.3,23.4,23.4,23.3,23.2,23.3,23.3,23.2,23.1,22.9,22.8,22.6,22.4,22.2,21.8,21.3,20.8,20.2,19.7,19.3,19.1,19.0,18.8,0,0,0,0];plot(x,y,'*')xlabel 'x轴'ylabel 'y轴'title '散点图'hold on%计算矩阵Am=229;n=10;A=zeros(n+1); for j=1:n+1 for i=1:n+1 for k=1:m+1A(j,i)=A(j,i)+x(k)^(j+i-2) end end end ;%计算矩阵BB=[0 0 0 0 0 0 0 0 0 0 0 ]; for j=1:n+1 for i=1:m+1B(j)=B(j)+y(i)*x(i)^(j-1) end end%写出正规方程,求出n a a a a ,,,,210 B=B'; a=inv(A)*B;%绘制出拟合曲线图x=[1.0:0.0001:230.0];z=a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4+a(6)*x.^5+a(7)*x.^6+a(8)*x.^7+a(9)*x.^8+a(10)*x.^9+a(11)*x.^10; plot(x,z)legend('离散点','y=a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4+a(6)*x.^5+a(7)*x.^6+a(8)*x.^7+a(9)*x.^8+a(10)*x.^9+a(11)*x.^10') title('拟合图')。

相关主题