用多项式模型进行数据拟合实验报告(附代码)(共8页).doc
精选优质文档-倾情为你奉上实验题目: 用多项式模型进行数据拟合实验 1 实验目的本实验使用多项式模型对数据进行拟合,目的在于:(1)掌握数据拟合的基本原理,学会使用数学的方法来判定数据拟合的情况;(2)掌握最小二乘法的基本原理及计算方法;(3)熟悉使用matlab进行算法的实现。2 实验步骤2.1 算法原理 所谓拟合是指寻找一条平滑的曲线,最不失真地去表现测量数据。反过来说,对测量的实验数据,要对其进行公式化处理,用计算方法构造函数来近似表达数据的函数关系。由于函数构造方法的不同,有许多的逼近方法,工程中常用最小平方逼近(最小二乘法理论)来实现曲线的拟合。 最小二乘拟合利用已知的数据得出一条直线或曲线,使之在坐标系上与已知数据之间的距离的平方和最小。模型主要有:1.直线型2.多项式型3.分数函数型4.指数函数型5.对数线性型6.高斯函数型等,根据应用情况,选用不同的拟合模型。其中多项式型拟合模型应用比较广泛。 给定一组测量数据,其中,共m+1个数据点,取多项式P(x),使得,则称函数P(x)为拟合函数或最小二乘解,此时,令,使得,其中为待求的未知数,n为多项式的最高次幂,由此该问题化为求的极值问题。由多元函数求极值的必要条件:,其中得到:,其中,这是一个关于的线性方程组,用矩阵表示如下所示: 因此,只要给出数据,数据点个数m,所要拟合的参数n,就可求出未知数据阵2.2 实验步骤(1) 根据已知数据(ch3 huaxuefy.m),绘制出数据的散点图,如图1所示:注:x从1开始取值,值与值间隔为1。y取文件ch3 huaxuefy.m中的数据。 图1 已知数据散点图(2) 计算矩阵,该矩阵为(n+1)*(n+1)矩阵。(3) 计算矩阵。(4) 写出正规方程,求出。(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=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.4 26.0,25.8,25.6,25.2,25.0,24.6,24.2,24.0,23.7,23.4 23.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 %计算矩阵A m=229;n=10; A=zeros(n+1); for j=1:n+1 for i=1:n+1 for k=1:m+1 A(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+1 B(j)=B(j)+y(i)*x(i)(j-1) end end %写出正规方程,求出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('拟合图') 专心-专注-专业