论文题目: 基于多项式插值与三次样条插值曲线拟合的比较姓 名: XXX 学 号: XXXXXXXXXXX 学 院: XXXXXXXXXXXXXXX 专业方向: XXXXXXXXXXXXXXX 联系方式:(QQ号) (手机号 ) 导师姓名:
完成人(亲笔)签字
二0一五年十二月
基于多项式插值与三次样条插值曲线拟合的比较
摘要:在数值计算中经常要计算函数,当函数只在有限点集上给定函数值要包含改点集
的区间上用公式给出函数的简单表达式,这就涉及在已知区间上用简单函数逼近已知复杂函数问题。本文为了解决这类问题就采用多项式插值与三次样条插值两种插值法并利用MATLAB数值分析软件进行编程,实现相应数据的曲线拟合以获得最佳曲线模型与相应数据的曲线拟合,选出最优的插值法以解决所给数据的曲线拟合问题。
关键词:函数;多项式插值;三次样条插值;曲线拟合;MATLAB
Abstract:In numerical analysis ,the function value is often calculated .when the function is only
given a function point set ,the simple expression of the function is given by the interval .which involves the use of a simple function to approximate the known complex function .in order to solve this problem ,we use polynomial interpolation and cubic spline interpolation tow kind of interpolation method and use MATLAB numerical analysis software to program ,to achieve the curve fitting of the corresponding date to obtain the best cure fitting ,and to choose the best interpolation method to solve the problem of curve fitting to the date.
Keyword: Function ; Polynomial interpolation ; Cubic spline interpolation ; Fitting of a
curve ; MATLAB
前言
现代科学研究中,物理量之间的相互关系通量是用函数来描述的,许多实际问题都用函数y=f(x)来表示某种内在规律的数量关系其中相当一部分函数是通过试验或观测得到的也有少量函数关系是由经典物理分析推导得到的,但许多实际问题很难用经典理论分析得出,因为虽然f(x)在某个区间[a,b]上是存在的,有的还是连续的,但往往这个f(x)并不包含我们所得函数表的所有值因此我们希望根据给定的函数表做一个即能反应函数f(x)的特行,又便于计算的简单函数p(x),用p(x)近似f(x),这样确定的p(x)就是我们希望得得到的插值函数。 插值法是一种古老的数学方法。在现代机械工业中用计算机程序控制加工机械零件,根据设计可给零件外形曲线的某些点加工是为控制每步走刀方向及步数就要算出零件外形曲线其他点的函数值才能加工外形光滑的零件,插值函数就能很好解决这类问题,本文主要采用多项式插值与三次样条插值来解决给定的实验数据利用这两种插值法构造一个近似解析式y=f(x)p(x)利用该公式得出的p(x)函数曲线虽然不能保证通过所有样点,但能很好地“逼近”它们从分反映已知数据间内在的数量关系,本文利用多项式插值与三次样条插值两种插值方法分别“逼近”已知点比较出最佳插值法。
第一章 数值算法的介绍
一 多项式插值
设函数y=f(x)在区间[a,b]上有定义,且已知在点a„上的值 ,,„,,若存在一简单函数p(x)使
P()= ,i=0,1,„n (1.1)
成立就成P(x)为F(x)的插值函数,点,,„,称为插值节点,包括插值节点的区间[a,b]称为插值区间,求插值函数p(x)的方法成为插值法。若p(x)是次数不超过n的代数多项式,即
P(x)=++ „ + (1.2) 其中为实数就称p(x)为插值多项式。
多项式插值包含多种插值法这里主要介绍拉格朗日插值法。 若n次多项式(x)(j=0,1,„,n)在n+1个节点上满足条件 j,k=0,1,„,n (1.3)
就称n+1个n次多项式上的n次插值基函数。所以拉格朗日插值多项式公式 (X)=yk (1.4)
k0n其中(x)=(x-)(x-)„(x-), ()=(-) „(-)(-)„(-) 二 三次样条插值
在机械领域早期工程师制图时,把富有弹性的细长木条(所谓的样条)用压铁固定在样点上,在其他地方让它弯曲,然后延木条画下曲线,称为样条曲线样条曲线实际上是由分段三次曲线并接而成在连接点即样点上要求二阶导数连续,从数学上加以概括就得到·数学样条这一概念。
定义:函数S(x)∈[a,b] ,且在每个小区间[ ,+1 ]上是三次多项式,其中a =<<...< = b 是给定节点,则称S(x)是节点,,...上的三次样条函数。若在节点上给定函数值= f ().( j =0, 1, , n) ,并成立
S() = .( j= 0, 1, , n) , (2.1) 则称S(x)为三次样条插值函数。
由于插值节点有n+1个,故得到n个小区间,而每个小区间上要求一个三次多项式,每个区间需要4个条件,所以要确定样条函数S,共需要4n个条件。在插值节点上,S() = f(),j = 0,1,2,...,n,得到n+1个条件,在j = 1,2,...,n-1,由S,S的一阶导数,S的二阶导数连续可以得到3(n-1)个条件,所以总共得到
了,4n-2个条件,要确定S还需要两个条件。就是通常所说的边界条件。常见的有一下3种:
(1)已知两端的一阶导数值,即
S'(x0)f0',S'(xn)fn'
(2)两端的二阶导数已知,即
S\"(x0)f0\",S\"(xn)fn\"
\" 特殊情况为 S\"(x S(00)nx) 此式称为自然边界。
(3)当f(x)是以xnx0为周期的周期函数时,则要求S(x)也是周期函数这时边界条件赢满足
S(x00)S(xn0),S'(x00)S'(xn0) S\"(x00)S\"(xn0)
此时(2.1)式中y0yn。这样确定样条函数S(x)称为周期样条函数。
第二章 曲线拟合问题
下列数据点的插值: X Y 0 0 1 1 4 2 9 3 16 4 25 5 36 6 49 7 64 8
可以得到平方根函数的近似,[0,64]上作图。 (1) 用这9个点做8次多项式插值(X);
(2) 用三次样条(第一边界条件)程序求S(x).
(3) 从得到结果看[0,64]上,那个插值更准确;在区间[0,1]上两种插值那个
更准确?
第三章 用MATLAB求解过程以及对结果的分析
MATLAB是一种高级的数值分析处理软件,本文的问题就是通过MATLAB来求解的通过有MATLAB编程分别求出用多项式(这里采用拉格朗日插值多项式)和三次样条插值多项式的表达式再利用MATLAB语言编程处理图像,我们可以根据图像来分析具体如下:
(1) 拉格朗日差值多项式的MATLAB语言编程
syms x l;
x1=[0 1 4 9 16 25 36 49 64]; y1=[0 1 2 3 4 5 6 7 8]; n=length(x1); Ls=sym(0); for i=1:n
l=sym(y1(i)); for k=1:i-1
l=l*(x-x1(k))/(x1(i)-x1(k)); end
for k=i+1:n
l=l*(x-x1(k))/(x1(i)-x1(k)); end
Ls=Ls+l; end
Ls=simplify(Ls) %为所求插值多项式Ls(x).
通过此程序求出多项式表达式:
Ls=-24221063/63504000*t.^2+95549/72072*t-1/3048192000*t.^8-2168879/435456000*t.^4+19/283046400*t.^7+657859/10886400*t.^3+33983/152409600*t.^5-13003/2395008000*t.^6
(2)三次样条插值MATLAB语言程序 syms x1;
x1=[0 1 4 9 16 25 36 49 64]; y1=[0 1 2 3 4 5 6 7 8]; x2=[0:1:64];
y3=spline(x1,y1,x2);
p=polyfit(x2,y3,3); %得到三次样条拟合函数 S=p(1)+p(2)*x+p(3)*x^2+p(4)*x^3 %得到S(x) 其运行结果
S(x)=
2288075067923491/73786976294838206464-2399112304472833/576460752303423488*x+4552380473376713/18014398509481984*x^2+999337332656867/1125899906842624*x^3 (3)图像处理 clear;
x=[0 1 4 9 16 25 36 49 64]; y=[0:8];
t=[0:0.1:64]; Y=t.^(0.5);
Ls=-24221063/63504000*t.^2+95549/72072*t-1/3048192000*t.^8-2168879/435456000*t.^4+19/283046400*t.^7+657859/10886400*t.^3+33983/152409600*t.^5-13003/2395008000*t.^6 s=interp1(x,y,t,'spline');
plot(x,y,'ro',t,Y,'r',t,Ls,'b't,s,'g');grid; 图像如下;
图1
其中:
(1) 红色代表已知点连接的曲线 (2) 绿色代表三次样条差值曲线 (3) 蓝色代表拉格朗日插值曲线
所以有图中可知在区间[0,64]上三次样条插值明显比多项式插值更逼近已知点几乎与已知点重合,而在[0,1]区间上没有明显的差别。下图为[0,1]区间图像;
学习心得体会
数值分析是计算机求解各种数学问题的数值计算方法通过近一个学期的学习,对于理论基础知识我有了一定的了解。作为一名研究生在今后的科研中数值分析这门课程将成为我处理许多数学建模问题的一种很好的方法。在这一学期的学习中也是存在很多问题,这主要是因为自己对基础掌握的不够,但通过老师的指导数值分析这门课真正使我们做到理论与实际相结合,让我们学会了学以致用。 通过此次大作业我真正认识到自己的不足之处,看是简单的大作业我自己做起来是那么的困难,能真正能够完成此次作业多靠同学们的帮助,这也让我认识到各门知识要相互结合的重要性即动手能力的提高,通过自己的经历,我意识到上机操作的重要性因此希望老师在以后的教学中能抽出一些时间用以实际上机操作,多练习争取一些联系作业在上机时间完成这样更能起到让每一个人同学都能参与其中这样能起到更好的教学效果。
参考文献
[1]李庆扬,王能超,易大义.数值分析[M].北京:清华大学出版社为,2008:22-26
[2]蔡旭晖,刘卫国,蔡立燕.MATLAB基础与应用教程[M].-北京:人民邮政出版社:52-54,113-121
因篇幅问题不能全部显示,请点此查看更多更全内容