用多项式模型进行数据拟合实验报告附代码.docx
《用多项式模型进行数据拟合实验报告附代码.docx》由会员分享,可在线阅读,更多相关《用多项式模型进行数据拟合实验报告附代码.docx(10页珍藏版)》请在冰豆网上搜索。
用多项式模型进行数据拟合实验报告附代码
实验题目:
用多项式模型进行数据拟合实验
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)根据已知数据(ch3huaxuefy.m),绘制出数据的散点图,如图1所示:
注:
x从1开始取值,值与值间隔为1。
y取文件ch3huaxuefy.m中的数据。
图1已知数据散点图
(2)计算矩阵
,该矩阵为(n+1)*(n+1)矩阵。
(3)计算矩阵
。
(4)写出正规方程,求出
。
(5)绘制出数据拟合后的曲线图。
分别取n=6,n=8,n=10,n=11,n=12,n=13,n=14,曲线图如下所示:
图2n=6时拟合曲线
图3n=8时拟合曲线
图4n=10时拟合曲线
图5n=11时拟合曲线
图6n=12时拟合曲线
图7n=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.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'散点图'
holdon
%计算矩阵A
m=229;n=10;
A=zeros(n+1);
forj=1:
n+1
fori=1:
n+1
fork=1:
m+1
A(j,i)=A(j,i)+x(k)^(j+i-2)
end
end
end;
%计算矩阵B
B=[00000000000];
forj=1:
n+1
fori=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('拟合图')
感谢下载!
欢迎您的下载,资料仅供参考