数值分析实验报告2——Runge现象
- 格式:docx
- 大小:140.72 KB
- 文档页数:9
数值分析实验报告数值分析实验报告姓名:张献鹏学号:173511038专业:冶金工程班级:重冶二班目录1拉格朗日插值 (1)1.1问题背景 (1)1.2数学模型 (1)1.3计算方法 (1)1.4数值分析 (2)2复化辛普森求积公式 (2)2.1问题背景 (2)2.2数学模型 (3)2.3计算方法 (3)2.4数值分析 (5)3矩阵的LU分解 (6)3.1问题背景 (6)3.2数学模型 (6)3.2.1理论基础 (6)3.2.2实例 (7)3.3计算方法 (7)3.4小组元的误差 (8)4二分法求方程的根 (9)4.1问题背景 (9)4.2数学模型 (9)4.3计算方法 (9)4.4二分法的收敛性 (11)5雅可比迭代求解方程组 (11)5.1问题背景 (11)5.2数学模型 (11)5.2.1理论基础 (11)5.2.2实例 (12)5.3计算方法 (12)5.4收敛性分析 (13)6Romberg求积法 (14)6.1问题背景 (14)6.2数学模型: (14)6.2.1理论基础 (14)6.2.2实例 (14)6.3计算方法 (15)6.4误差分析 (16)7幂法 (16)7.1问题背景 (16)7.2数学模型 (16)7.2.1理论基础 (16)7.2.2实例 (17)7.3计算方法 (17)7.4误差分析 (18)8改进欧拉法 (18)8.1问题背景 (18)8.2数学模型 (19)8.2.1理论基础 (19)8.2.2实例 (19)8.3数学模型 (19)8.4误差分析 (21)1 拉格朗日插值1.1 问题背景对于函数211)(x x f +=,55≤≤-x 求拉格朗日插值。
10=n ,把)(x f 和插值多项式的曲线画在同一张图上进行比较,观察数值积分中的Lagrange 插值。
1.2 数学模型取等距差值节点=-5+/n ,=0,1,…..,n ,构造n 次lagrange 插值多项式:当n =10时,十次插值多项式L 10(x )以及函数f (x )的图像可以由Matlab 画出。
数值分析实验报告(02)一、实验目的通过上机绘制Runge 函数图像,理解高次插值的病态性质。
二、实验内容在区间[-1,1]上分别取n=10,n=20用两组等距节点对龙格(Runge)函数21()125f x x =+作多项式插值,对每个n 值分别画出()f x 和插值函数的图形。
三、编程思路(相关背景知识、算法步骤、流程图、伪代码)四、程序代码(Matlab 或C 语言的程序代码)function yt=Untitled8(x,y,xt)%UNTITLED5 ´Ë´¦ÏÔʾÓйش˺¯ÊýµÄÕªÒª% ´Ë´¦ÏÔʾÏêϸ˵Ã÷n=length(x);ny=length(y);if n~=nyerror('²åÖµ½ÚµãxÓ뺯ÊýÖµy²»Ò»ÖÂ');endm=length(xt);yt=zeros(1,m);for k=1:nlk=ones(1,m);for j=1:nif j~=klk=lk.*(xt-x(j))/(x(k)-x(j));endend ;yt=yt+y(k)*lk;endn=input('n=');x=linspace(-1,1,n);y=1./(1+25.*x.^2);xf=linspace(-1,1,100);yf=1./(1+25.*xf.^2)xl=xf;yl=Untitled8(x,y,xf);plot(xf,yf,'-b',xl,yl,'-r')五、数值结果及分析(数值运行结果及对结果的分析)当n=10时当n=20六、实验体会(计算中出现的问题,解决方法,实验体会)出现符号错误,代码函数变量不明重新输入,查询错误,找到并改正编码需要认真仔细,一定要头脑清晰,避免出现一些低级错误。
1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。
龙格(Runge )给出一个例子是极著名并富有启发性的。
设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。
(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。
(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。
1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。
1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。
Matlab 脚本文件为Experiment2_1_1fx.m 。
可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。
试验2.1 多项式插值的振荡现象实验目的:观察多项式插值的振荡现象,了解多项式的次数与逼近效果的关系。
实验内容:问题提出:考虑在一个固定的区间上用插值逼近一个函数。
显然Lagrange 插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时,Ln(x)是否也更加靠近被逼近的函数。
Runge 给出的一个例子是极著名并富有启发性的。
设区间[-1,1]上的函数225x11)x (+=f ,考虑区间[-1,1]上的一个等距划分,分点为n2i 1x i +-=,i=0,1,2,…,n则拉格朗日插值多项式为:)x (l 25x11)x (Ln i ni 2i∑=+=,其中的)x (l i ,i=0,1,2,…,n 是n 次拉格朗日插值基函数。
实验要求:1、选择不断增大的分点数目n=2,3,………,画出原函数)x (f 及插值多项式函数)x (Ln 在[-1,1]上的图像,比较并分析试验结果。
2、选择其他的函数,例如定义在区间[-5,5]上的函数4()1x h x x=+,()arctan g x x =,重复上述的实验看其结果如何。
实验步骤及结果分析:1、选择不断增大的分点数目n=2,3,4,5,6,7,8,9,10做)x (f 的拉格朗日插值多项式)x (Ln ,并与原函数值做比较,如下图所示。
观察图像可知:n=2,3时插值函数和原函数差别很大,n=4,5,6时插值函数与原函数的逼近程度相对较好,继续增加插值次数n ,插值函数在插值区域的中间部分收敛,而在这区间外是发散的,此外,n=7,9时在插值中间区域逼近效果不好。
因此,适当提高插值多项式次数,可以提高逼近的精度,但是次数太高反而产生相反的效果。
2、选择其他的函数进行插值。
原函数4()1x h x x=+,区间[-5,5],插值结果如下图:观察图像可知:低次插值时,插值效果不好。
n=7,8,9,10时,在区间[-2,2],插值函数与原函数逼近程度好,但在区间外插值函数发散。
数值分析实验报告(四)题目:Runge现象的产生和克服学院:机电工程学院(二专业)专业:机械设计制造及其自动化班级:1008108班姓名:***学号:**********号Runge现象的产生和克服摘要:对于多项式插值运算,随着插值阶数的逐渐增多,如果带入离散点过于密集,使得定义域中的“边缘区域”,没有有效的点,将导致插值函数的边缘区域大幅度的偏离函数的真值,该现象称之为“Runge现象”。
0 前言(目的与意义):了解Runge现象,体会插值运算的不准确性,以及其差值带来的误差甚至是错误。
1 数学背景:插值运算的误差公式:|w n (x)||R n (x)|<M n+1(n+1)!M n+1=max{f(n+1)(x i)}于是,如果函数的n+1阶导数一旦很大,则会出现函数的误差很大的情况。
2 程序及代码:(1)lagrange多项式插值函数syms f x p dp lx L;f=1/(1+25*x^2);N=input('请输入插值节点数N=');xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);syms x;p=p*(x-xx(i));enddp=diff(p);for j=1:(N+1)x=xx(j);k=eval(dp);syms x;lx=p/((x-xx(j))*k);L=L+lx*ff(j);endaa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];for i=1:length(aa)x=aa(i);S(i)=eval(L);fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e)ezplot(f,[-1,1])hold onezplot(L,[-1,1])hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off(2)分段线性插值函数syms f x p lx;f=1/(1+25*x^2);N=input('请输入插值节点数N=');xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);endsyms xfor i=1:Nfor j=1:(N+1)if j==ilx(i,j)=(x-xx(i+1))/(xx(i)-xx(i+1)); else if j==i+1lx(i,j)=(x-xx(i))/(xx(i+1)-xx(i)); elselx(i,j)=0;endendendendp=lx*ff';aa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];for i=1:length(aa)x=aa(i);for j=1:N+1if x<xx(j)breakendendS(i)=eval(p(j-1));fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e)ezplot(f,[-1,1])hold onxxx=(-1:0.01:1);for i=1:length(xxx)x=xxx(i);for j=1:N+1if x<xx(j)breakendendSS(i)=eval(p(j-1));endplot(xxx,SS,'r')hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off(3):三转角插值法函数syms f x df s s1 s2 s3 s4;f=1/(1+25*x^2);df=diff(f);N=input('请输入插值节点数N=');h=2/N;xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);dff(i)=eval(df);endsyms xfor i=1:Ns1=(x-xx(i+1))^2*(h+2*(x-xx(i)))*ff(i)/h^3; s2=(x-xx(i))^2*(h+2*(xx(i+1)-x))*ff(i+1)/h^3; s3=(x-xx(i+1))^2*(x-xx(i))*dff(i)/h^2;s4=(x-xx(i))^2*(x-xx(i+1))*dff(i+1)/h^2;s(i)=s1+s2+s3+s4;endaa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96]; for i=1:length(aa)x=aa(i);for j=1:N+1if x<xx(j)breakendendS(i)=eval(s(j-1));fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e) ezplot(f,[-1,1])hold onxxx=(-1:0.01:1);for i=1:length(xxx)x=xxx(i);for j=1:N+1if x<xx(j)breakendendSS(i)=eval(s(j-1));endplot(xxx,SS,'r')hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off(4).三弯矩插值法函数:syms f x ddf s;f=1/(1+25*x^2);ddf=diff(diff(f));N=input('请输入插值节点数N=');h=2/N;xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);ddff(i)=eval(ddf);endsyms xfor i=1:NA=(ff(i+1)-ff(i))/h-h*(ddff(i+1)-ddff(i))/6;B=ff(i)-h^2*ddff(i)/6;s(i)=(xx(i+1)-x)^3*ddff(i)/(6*h)+(x-xx(i))^3*ddff(i+1)/(6*h)+A*(x-xx(i))+B; endaa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];for i=1:length(aa)x=aa(i);for j=1:N+1if x<xx(j)breakendendS(i)=eval(s(j-1));fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e)ezplot(f,[-1,1])hold onxxx=(-1:0.01:1);for i=1:length(xxx)x=xxx(i);for j=1:N+1if x<xx(j)breakendendSS(i)=eval(s(j-1));endplot(xxx,SS,'r')hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off3 总结与评价:函数的Runge现象可以通过三转角插值和三弯矩插值来解决,而且对于三转角和三弯矩插值来说,带入的数据越多,其插值效果越好4 实验结果:图1:观察Runge现象图2:分段线性插值图3:三转角插值:图4:三弯矩插值:。
1. 对Runge 函数22511)(x x R +=用在区间[-1, 1]下列条件作插值逼近,并和)(x R 的图像进行比较。
(1) 用等距节点ih x i +-=1,h=0.2, 绘出它的10次Newton 插值多项式的图像。
(2) 用节点)2212cos(1π++-=i x i (i=0,1,…,10),绘出它的10次Newton 插值多项式的图像。
(3) 用等距节点ih x i +-=1,h=0.2, 绘出它的分段线性插值多项式的图像。
(4) 用等距节点ih x i +-=1,h=0.2, 绘出它的三次自然样条线性插值多项式的图像。
解:Newton 插值曲线与原曲线比较x 轴y 轴当x 在中间取值范围时,Newton 插值曲线与原曲线比较接近,但是当x 在两端时,Newton 插值曲线与原曲线相差越来越大,出现了Runge 现象。
插值余项∏=-=ni in n x x x x x x f x R 010)(],,,,[)( .由插值多项式的唯一性知)()(x N x L n n =,因此,牛顿插值与拉格朗日插值有相同的余项表达式,即∏∏==+∈-=-+=-=ni i n ni i n n n b a x x x x x f x x n f x N x f x R 000)1(],[),(],,,[)()!1()()()()(ξξ 由此有)!1()(],,,[)1(0+=+n f x x x f n n ξ .牛顿前插公式为002000!)1()1(!2)1()(f n n t t t f t t f t f th x N nn ∆+--++∆-+∆+=+ .其余项为),(),()!1()()1()()()(010n n n n x x f h n n t t t th x N x f x R ∈+--=+-=+ξξ牛顿后插公式为n nn n n n n f n n t t t f t t f t f th x N ∇-++++∇++∇+=+!)1()1(!2)1()(2 . 其余项为),(),()!1()()1()()()(0)1(1n n n n n n x x f h n n t t t th x N x f x R ∈+++=+-=++ξξLagrange 插值曲线与原曲线比较x 轴y 轴在这里由于x 不是等距节点,Lagrange 插值曲线与原曲线比较接近,没有出现Runge 现象。
《数值分析》实验报告实验序号:实验五 实验名称: 分段线性插值法1、 实验目的:随着插值节点的增加,插值多项式的插值多项式的次数也增加,而对于高次的插值容易带来剧烈的震荡,带来数值的不稳定(Runge 现象)。
为了既要增加插值的节点,减小插值的区间,以便更好的逼近插值函数,又要不增加插值多项式的次数以减少误差,可采用分段线性插值。
2、 实验内容:求一个函数ϕ(x )用来近似函数f (x ),用分段线性插值的方法来求解近似函数ϕ(x )并画出近似函数图像及原函数图像。
设在区间[a,b]上,给定n+1个插值节点b x x x x a n =<<<<=...210和相应的函数值n y y y ,...,,10,求一个插值函数)(x ϕ,满足以下条件:(1)),...,2,1,0()(n j y x j j ==ϕ; (2) )(x ϕ在每一个小区间[1,+j j x x ]上是线性函数。
对于给定函数11-,2511)(2≤≤+=x x x f 。
在区间[]11-,上画出f (x )和分段线性插值函数)(x ϕ的函数图像。
1. 分段线性插值的算法思想:分段线性插值需要在每个插值节点上构造分段线性插值基函数)(x l j ,然后再作它们的线性组合。
分段线性插值基函数的特点是在对应的插值节点上函数值取 1,其它节点上函数值取0。
插值基函数如下:⎪⎩⎪⎨⎧≤≤--=其它 ,0,)(101010x x x x x x x x l ⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧≤<--≤≤--=+++---其它 ,0,,)(111111j j j j j j j j j j j x x x x x x x x x x x x x x x l⎪⎩⎪⎨⎧≤≤--=---其它 ,0,)(111n n n n n n x x x x x x x x l 设在节点a ≤x0<x1<…≤b=f(xi),(i=0,1,2,…,n)求折线函数L (x )满足:(1) L(x)∈C[a,b](2) L(x[i]=y[i])(3) L(x)在每个小区间(x[i],x[i+1])上是线性插值函数¢(x )叫做区间[a,b]上对数据(x[j],y[j])(j=0,1,2,…,n)的分段区间函数。
⾼等数值分析插值程序题Runge现象插值程序题1.对Runge函数RR(xx)=1/(1+25xx2)在区间[-1,1]做下列插值逼近,并和RR(xx)的图像进⾏⽐较,并对结果进⾏分析。
(1)等距节点xx ii=?1+ii?,?=0.1,0≤?≤20,20次netown插值多项式图像;(2)节点xx ii=cos?2ii+142ππ?,(i=0,1,2,…,20),20次Lagrange插值多项式的图像;(3)等距节点xx ii=?1+ii?,?=0.1,0≤?≤20,20次分段线性插值函数图像;(4)等距节点xx ii=? 1+ii?,?=0.1,0≤?≤20,20次三次样条插值函数的图像。
解:(1)20次等距节点netown插值多项式和R(xx)的图像⽐较图如下所⽰(求值点之间的间隔为0.0001,以下相同):从图像可以看出,在插值区间中部netown插值多项式与原Runge函数符合得较好;但在插值区间的两端两者的差别很⼤(netown在区间[-1,-0.9]的最⼩值为-59.7819),此时的插值余项不满⾜要求,因此⽤等距20次netown插值多项式来对Runge 函数在区间[-1,1]做插值逼近并不合适,会出现明显的Runge现象。
(2)20次⾮等距节点Lagrange插值多项式(切⽐雪夫多项式零点插值)和R(xx)的图像⽐较图如上所⽰。
此时插值的节点并不等距,插值节点两边密,中间疏,虽然此时Lagrange插值多项式也是20次,但相⽐等距netown插值,⾮等距Lagrange插值曲线与原函数吻合得很好,没有出现明显的Runge现象,两端⽐较密的插值节点较好地抑制了Runge现象。
为了⽐较节点选取对⾼次插值结果的影响,⽤20次等距Lagrange插值也原函数在区间[-1,1]进⾏了插值,其与原函数图像⽐较如下:其图像与(1)中netown插值⼏乎⼀样,因此对⾼次插值多项式,插值时适当的选取插值节点,能有效的抑制Runge现象。
实验报告一题目:非线性方程求解摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。
本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。
前言:(目的和意义)掌握二分法与Newton法的基本原理和应用。
数学原理:对于一个非线性方程的数值解法很多。
在此介绍两种最常见的方法:二分法和Newton 法。
对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。
重复运行计算,直至满足精度为止。
这就是二分法的计算思想。
Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式产生逼近解x*的迭代数列{x k},这就是Newton法的思想。
当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。
另外,若将该迭代公式改进为其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。
程序设计:本实验采用Matlab的M文件编写。
其中待求解的方程写成function的方式,如下function y=f(x);y=-x*x-sin(x);写成如上形式即可,下面给出主程序。
二分法源程序:clear%%%给定求解区间b=1.5;a=0;%%%误差R=1;k=0;%迭代次数初值while (R>5e-6) ;c=(a+b)/2;if f12(a)*f12(c)>0;a=c;elseb=c;endR=b-a;%求出误差k=k+1;endx=c%给出解Newton法及改进的Newton法源程序:clear%%%% 输入函数f=input('请输入需要求解函数>>','s')%%%求解f(x)的导数df=diff(f);%%%改进常数或重根数miu=2;%%%初始值x0x0=input('input initial value x0>>');k=0;%迭代次数max=100;%最大迭代次数R=eval(subs(f,'x0','x'));%求解f(x0),以确定初值x0时否就是解while (abs(R)>1e-8)x1=x0-miu*eval(subs(f,'x0','x'))/eval(subs(df,'x0','x'));R=x1-x0;x0=x1;k=k+1;if (eval(subs(f,'x0','x'))<1e-10);breakendif k>max;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值ss=input('maybe result is error,choose a new x0,y/n?>>','s');if strcmp(ss,'y')x0=input('input initial value x0>>');k=0;elsebreakendendendk;%给出迭代次数x=x0;%给出解结果分析和讨论:1.用二分法计算方程在[1,2]内的根。
数值分析课程实验报告——插值逼近
题目一.Runge 函数的插值
1. Runge 函数
Runge 函数的表达式为:
2
1()125R x x =+ 其在[-1,1]区间上的函数图像如图1.1。
在课程学习中我们知道,对Runge 函数进行高次插值时有可能在两端出现不收敛的情况,即Runge 现象。
下面将分别用四种不同的插值方法在[-1,1]区间上对Runge 函数进行插值,并分析是否产生Runge 现象,比较插值效果。
图1.1.Runge 函数在[-1,1]区间的函数图像
2.Newton 插值
首先根据课本上的Newton 插值算法进行编程(代码略)。
核心思想就是用符号变量进行中间运算,以便将最终的插值函数用符号表达式表示出来,并进一步生成图像。
此处插值节点选择为等距插值节点,即:
0.1(0,1,2,,)i x ih i =-+= (20)
其中h=0.1。
插值曲线与原曲线的对比如图1.2(蓝色为原曲线,红色为插值曲线)。
从图中看出,在区间中部,二者吻合较好;但在区间两端二者则产生了明显偏差,甚至可以达到一个非常大的数值(e20量级)。
因此,在等距节点的20次Newton 插值下,产生了明显的Runge 现象。
图1.2.Newton 插值曲线与原曲线对比
3. Lagrange 插值
此处同样是根据Lagrange 插值的具体算法进行编程。
但插值节点不再是等距分布,而是如下形式:
21cos()(0,1,2,,)42
i i x i π+==…20 插值曲线与原曲线的对比如图1.3(蓝色为原曲线,红色为插值曲线)。
从图中看出,插值曲线与原曲线吻合的很好,没有产生明显的Runge 现象。
对比产生了明显Runge 现象的20次Newton 插值,Lagrange 插值的最高次数虽然也是20,但由于此处的插值节点不是等距分布的(事实上,此处采用的插值节点正是Chebyshev 多项式的零点),而是中间疏两边密,因此两侧较密的节点很好地抑制了Runge 现象。
图1.3. Lagrange插值曲线与原曲线对比
4.分段线性插值
分段线性插值是这几种插值方法中最容易处理的一个,只需要将每个节点对应的函数值求出再将相邻的数据点两两用直线相连即可。
此处采用了等距节点,所得插值曲线与原曲线对比如图1.4(蓝色为原曲线,红色为插值曲线)。
从图中
图1.4. 分段线性插值曲线与原曲线对比
看出,此处分段线性插值的效果也还是不错的,二者只在区间中部略微存在一些偏差,而在其他区域整体上吻合的很好,并且不存在Runge现象。
这是由于分段线性插值通过对插值区间分段的方法将插值函数的次数有效降低,因而即使是等距节点分布,也很好地避免了出现Runge现象的倾向。
5.三次样条插值
三次样条插值是这四种插值方法中编程最麻烦的,但并不是说存在多大的技术难度,只是因为插值过程中的步骤比较繁琐,因而代码也显得较为冗长。
此处依然采用等距节点,所得插值曲线与原曲线对比如图1.5(蓝色为原曲线,红色为插值曲线)。
从图中看出,三次样条插值的效果比分段线性插值更胜一筹,三次样条插值曲线和原曲线在整个插值区间都基本处于重合状态,几乎没有肉眼可见的偏差。
同样,由于三次样条插值的插值函数最高次数只有3,在等距节点下也没有产生Runge现象。
图1.5.三次样条插值曲线与原曲线对比
题目二.分段函数的插值
1. 分段函数
定义在[-1,1]区间的分段函数的函数表达式为:
sin ,101()cos ,0210,12
x x f x x x x ππ⎧⎪-≤<⎪⎪=≤<⎨⎪⎪≤≤⎪⎩ 其函数图像如图2.1。
分段函数最大的特点就是在个别点上函数值或导数值存在突变,因此可以预计,除了可能出现的Runge 现象外,在那些突变点附近的插值结果也可能会出现较大的偏差。
下面将分别采用之前的四种插值方法在该函数的[-1,1]定义域内对其进行插值。
图2.1.分段函数图像
2.Newton 插值
首先根据课本上的Newton 插值算法进行编程。
此处插值节点选择为等距插值节点,即:
0.1(0,1,2,,)i x ih i =-+= (20)
其中h=0.1。
插值曲线与原曲线的对比如图2.2(蓝色为原曲线,红色为插值曲线)。
从图中看出,与Newton 法对Runge 函数的插值结果相比,Newton 法对于该分段函数的插值效果显得更加糟糕:不仅在区间两端产生了极强烈的震荡(即Runge 现象),就连区间中部也存在较小的上下震荡。
因此,从整体来看,几乎所有距插值节点稍远的点都存在较大的偏差,这表明该分段函数在等距节点下的20次Newton 插值效果非常不理想。
图2.2.Newton 插值曲线与原曲线对比
3. Lagrange 插值
此处同样是根据Lagrange 插值的具体算法进行编程。
但插值节点不再是等距分布,而是如下形式:
21cos()(0,1,2,,)42
i i x i π+==…20 插值曲线与原曲线的对比如图2.3(蓝色为原曲线,红色为插值曲线)。
从图中看出,与同样次数的Newton 法相比,Lagrange 法所得的插值曲线虽然在区间中部的分布与其相似,但在区间两端较好地收敛到了原曲线上,即较好地消除了Runge 现象。
这同样是因为此处的插值节点不是等距分布的(事实上,此处采用的插值节点正是Chebyshev 多项式的零点),而是中间疏两边密,因此两侧较密的节点很好地抑制了Runge 现象。
图2.3. Lagrange插值曲线与原曲线对比
4.分段线性插值
分段线性插值是这几种插值方法中最容易处理的一个,只需要将每个节点对应的函数值求出再将相邻的数据点两两用直线相连即可。
此处采用了等距节点,
图2.4. 分段线性插值曲线与原曲线对比
所得插值曲线与原曲线对比如图2.4(蓝色为原曲线,红色为插值曲线)。
从图中看出,此处分段线性插值的效果较好,二者只在区间中部函数值的突变点附近存在一些偏差,而在其他区域整体上吻合的很好,不存在Runge现象。
这是由于分段线性插值通过对插值区间分段的方法将插值函数的次数有效降低,因而即使是等距节点分布,也很好地避免了出现Runge现象的倾向。
5.三次样条插值
三次样条插值是这四种插值方法中编程最麻烦的,但并不是说存在多大的技术难度,只是因为插值过程中的步骤比较繁琐,因而代码也显得较为冗长。
此处依然采用等距节点,所得插值曲线与原曲线对比如图2.5(蓝色为原曲线,红色为插值曲线)。
从图中看出,三次样条插值的效果与分段线性插值相近,也是在区间中部的函数值突变处有一定的偏差,而其他区域都吻合较好,也没有产生Runge现象。
同样,这也是由于三次样条插值的插值函数最高次数只有3,因此在等距节点下进行插值也没有产生Runge现象。
图2.5.三次样条插值曲线与原曲线对比
三.总结
本文通过matlab编程分别采用Newton插值法、Lagrange插值法、分段线性插值法以及三次样条插值法对Runge函数和一个分段函数进行了插值逼近,插值区间[-1,1],插值节点21个,并通过分析计算结果主要得到了以下结论:
1.插值多项式次数过高时会产生严重的Runge现象。
本实验中,无论是Runge 函数还是分段函数的20次Newton插值多项式都产生了严重的Runge现象,区间两端处的插值出现剧烈震荡,严重失真。
2.同样是高次插值多项式,若适当选取插值节点能够在一定程度上抑制Runge现象。
本实验中,Runge函数和分段函数的20次Lagrange插值多项式由于采用了中间疏两边密的非等距结点,而不是Newton插值多项式所用的等距节点,有效地抑制或消除了本应出现的Runge现象(这里说“本应出现”是经过计算验证的,若取等距节点,则20次的Lagrange插值多项式也会出现严重Runge 现象)。
3.降低插值多项式的次数能有效避免Runge现象。
本实验中,分段线性插值法(各区间上均为1次)和三次样条插值法(最高次数为3)都取得了较为理想的差值逼近效果,没有出现Runge现象,且在整个插值区间都与原函数的图像吻合的很好。
4.与连续函数相比,存在不连续点的分段函数的插值逼近误差更大,且更加不稳定。
本实验中,对连续的Runge函数进行插值逼近时,除了等距节点的高次Newton多项式出现严重Runge现象,其余三种方法基本都收敛到了原曲线上,取得了不错的插值逼近效果;而对分段函数进行插值逼近时,除了等距节点的高次Newton多项式的逼近效果非常糟糕外(巨大偏差,严重震荡),其余三种方法虽然没有出现Runge现象,但在不连续点(x=0)的附近区域都存在一定的误差,整体逼近效果逊色于对连续Runge函数的插值逼近。
综上,在实际运用中,为了取得较好的插值逼近效果,应尽量保证以下几点:不采用次数过高的插值多项式;适当选取插值节点;避免函数值突变,若不得已对存在不连续点的函数进行插值逼近,可以尝试分段插值,并将不连续点都处理到子区间的端点上,从而原函数在各子区间内分段连续,以便提高插值逼近的效果。