曲线拟合实验报告
数值分析 课程设计报告 学生姓名
学生学号
所在班级
指导教师
一、课程设计名称 函数逼近与曲线拟合 二、课程设计目的及要求 实验目的: ⑴学会用最小二乘法求拟合数据的多项式,并应用算法于实际问题。
⑵学会基本的矩阵运算,注意点乘与叉乘的区别。
实验要求: ⑴编写程序用最小二乘法求拟合数据的多项式,并求平方误差,做出离散函数 与拟合函数的图形; ⑵用 MATLAB 的内部函数 polyfit 求解上面最小二乘法曲线拟合多项式的系数及平方误差,并用MATLAB的内部函数plot作出其图形,并与(1)结果进行比较。
三、课程设计中的算法描述 用最小二乘法多项式曲线拟合,根据给定的数据点,并不要求这条曲线精确的经过这些点,而就是拟合曲线无限逼近离散点所形成的数据曲线。
思 路 分 析 : 从 整 体 上 考 虑 近 似 函 数 ) (x p 同 所 给 数 据 点 )
(i iy x , 误 差i i iy x p r ) ( 的大小,常用的方法有三种:一就是误差i i iy x p r ) ( 绝对值的最大值im ir 0max ,即误差向量的无穷范数;二就是误差绝对值的与 miir0,即误差向量的 1成绩评定
范数;三就是误差平方与 miir02的算术平方根,即类似于误差向量的 2 范数。前两种方法简单、自然,但不便于微分运算,后一种方法相当于考虑 2 范数的平方,此次采用第三种误差分析方案。
算法的具体推导过程: 1、设拟合多项式为:
2、给点到这条曲线的距离之与,即偏差平方与:
3、为了求得到符合条件的 a 的值,对等式右边求 偏导数,因而我们得到了:
4、将等式左边进行一次简化,然后应该可以得到下面的等式
5、把这些等式表示成矩阵的形式,就可以得到下面的矩阵:
niininiiknikinikinikinikiniiniinikiniiyyyaax x xx x xx x11i11012111111211 1an 6. 将这个范德蒙得矩阵化简后得到 n kkn nkkyyyaaax xx xx x 21102 21 1111 7、因为 Y A X * ,那么 X Y A / ,计算得到系数矩阵,同时就得到了拟合曲线。
四、课程设计内容 ⑴实验环境:MATLAB2010 ⑵实验内容:给定的数据点
0 0、5 0、6 0、7 0、8 0、9 1、0
1 1、75 1、96 2、19 2、44 2、71 3、00 1) 用最小二乘法求拟合数据的多项式; 2) 用 MATLAB 内部函数 polyfit 函数进行拟合。
⑶实验步骤 1)首先根据表格中给定的数据,用 MATLAB 软件画出数据的散点图(图 1)。
2)观察散点图的变化趋势,近似于二次函数。则用二次多项式进行拟合,取一组基函数 ,并令 ,其中 就是待定系数 。
3)用 MATLAB 程序作线性最小二乘法的多项式拟合,求待定系数。
算法实现代码如下: x=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y=[1 1、75 1、96 2、19 2、44 2、71 3、00]; R=[(x、^2)" x" ones(7,1)]; A=R\y"
4) 用 MATLAB 程序计算平均误差。
算法实现代码如下: y1=[1 1、75 1、96 2、19 2、44 2、71 3、00]; x=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y=x、^2+x+1; z=(y-y1)、^2; sum(z) 5) 作出拟合曲线与数据图形(图 2)。
6) 用MATLAB 的内部函数 polyfit 求解上面最小二乘法曲线拟合多项式的系数及平方误差。
算法实现代码如下: x=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y=[1 1、75 1、96 2、19 2、44 2、71 3、00]; A=polyfit(x,y,2);%二次多形式拟合% z=polyval(A,x); A d=sum((z-y)、^2) 7)绘制使用 polyfit 函数实现的拟合图形。(图 3) 五、程序流程图
图 5-1 用最小二乘法求多项式拟合曲线流程图
图 5-2 用 polyfit 函数求多项式拟合曲线流程图 六、实验结果 输入初始数据点 根据原始数据绘制散点图 分析数据点变化趋势,确定拟合多项式 用最小二乘法求系数矩阵,确定多项式 用所求的多项式,计算误差 绘制拟合曲线 输入初始数据点 调用 polyfit 函数,确定多形式的系数 调用 plot 函数进行绘图 调用 polyval 函数,进行多项式求值
图 6-1 表中数据的散点图
图 6-2、 最小二乘法实现的拟合曲线 第 1 问
系数为 A =
1、0000
1、0000
1、0000 则多项式的方程为
平方误差与为 ans =1、9722e-031
图 6-3、 polyfit 函数实现的拟合函数 第 2 问 系数为 A =
1、0000
1、0000
1、0000 则多项式的方程为
平方误差与为 ans =
1、9722e-031
七、实验结果分析 编写程序用最小二乘法求拟合曲线的多项式的过程中,求出的数据与拟合函数的平方误差很小,达到了很高的精度要求,以及通过散点求得的拟合曲线比较
光滑。而用 MATLAB 的内部函数求 polyfit 求解的曲线拟合多项式与平方误差与程序求得的相同,还有就就是虽然求解过程简单了,但用 MATLAB 的内部函数做出的图形由明显的尖点,不够光滑。
此次实验数据较少,而且数据基本都就是可靠数据。但就是在应用实际问题中,数据会很庞杂,此时对于最小为乘法的算法就需要进一步的细化。例如在进行数据采集时,由于数据采集器(各种传感器)或机器自身的原因及其外部各种因素的制约,导致数据偶尔会有大幅度的波动,及产生一些偏差极大的数据,不能真实反映数据的可靠性,所以会对数据进行筛选或修正。而此时就可应用曲线拟合的最小二乘法的进行处理。
八、实验心得体会 在日常的学习与生活中,我们可能会遇到各种方面的跟数据有关的问题,并不就是所有的数据都就是有用,必须对数据进行适当的处理,然后找出数据之间的关系,然后进行分析得出结果。此次实验结果基本没有大的区别,可就是MATLAB 提供给我们一个特别简洁的办法,应用一个函数即可实现相同的结果。虽然很方便,但就是对于初学者来说,我觉得打好基础才就是关键,对于一个知识点,应该掌握其最基本的原理,然后在将它应用于实际。
通过这个实验我也理解到了,数值分析就是一个工具学科,它教给了我们分析与解决数值计算问题得方法,使我从中得到很多关于算法的思想,从中受益匪浅。
附录:源代码 散点图: x=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y=[1 1、75 1、96 2、19 2、44 2、71 3、00]; plot(x,y,"r*") title("实验数据点的散点图"); legend("数据点(xi,yi)"); xlable("x"); ylable("y"); 最小二乘拟合:
x=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y=[1 1、75 1、96 2、19 2、44 2、71 3、00]; R=[(x、^2)" x" ones(7,1)]; A=R\y" x1=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y1=[1 1、75 1、96 2、19 2、44 2、71 3、00]; x=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y=x、^2+x+1; plot(x1,y1,"k+",x,y,"r") title("实验数据点的散点图及拟合曲线"); z=(y-y1)、^2; sum(z) Polyfit 函数拟合: x=[0 0、5 0、6 0、7 0、8 0、9 1、0]; y=[1 1、75 1、96 2、19 2、44 2、71 3、00]; A=polyfit(x,y,2);%二次多形式拟合% z=polyval(A,x); A d=sum((z-y)、^2) plot(x,y,"k+") title("实验数据点的散点图及拟合曲线"); hold on plot(x,z,"r")
上一篇:教学常规自检自查报告
下一篇:电势-PH曲线实验报告