多项式差值方法上机习题报告
插值法实验报告
实验二插值法1、实验目的:1、掌握直接利用拉格郎日插值多项式计算函数在已知点的函数值;观察拉格郎日插值的龙格现象。
2、了解Hermite插值法、三次样条插值法原理,结合计算公式,确定函数值。
2、实验要求:1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;2)编写上机实验程序,作好上机前的准备工作;3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);4)分析和解释计算结果;5)按照要求书写实验报告;3、实验内容:1) 用拉格郎日插值公式确定函数值;对函数f(x)进行拉格郎日插值,并对f(x)与插值多项式的曲线作比较。
已知函数表:(0.56160,0.82741)、(0.56280,0.82659)、(0.56401,0.82577)、(0.56521,0.82495)用三次拉格朗日插值多项式求x=0.5635时函数近似值。
2) 求满足插值条件的插值多项式及余项1)4、题目:插值法5、原理:拉格郎日插值原理:n次拉格朗日插值多项式为:Ln (x)=yl(x)+y1l1(x)+y2l2(x)+…+ynln(x)n=1时,称为线性插值,L 1(x)=y(x-x1)/(x-x1)+y1(x-x)/(x1-x)=y+(y1-x)(x-x)/(x1-x)n=2时,称为二次插值或抛物线插值,L 2(x)=y(x-x1)(x-x2)/(x-x1)/(x-x2)+y1(x-x)(x-x2)/(x1-x)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x)/(x2-x1)n=i时,Li= (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n)(X-X0)……(X-X i-1)(x-x i+1) ……(x-x n)6、设计思想:拉格朗日插值法是根据n + 1个点x0, x1, ... x n(x0 < x1 < ... x n)的函数值f (x0), f (x1) , ... , f (x n)推出n次多項式p(x),然后n次多項式p (x)求出任意的点x对应的函数值f (x)的算法。
计算方法第三章(插值法)解答
Aitken(埃特肯)算法 N 0,1,,k , p ( x) L( x) N 0,1,,k ( x)
N 0,1,,k 1, p ( x) N 0,1,,k ( x) x p xk
Neville(列维尔)算法
( x xk )
Ni ,i 1,,k ( x) L( x) Ni ,i 1,,k 1 ( x) Ni 1,i 2,k ( x) Ni ,i 1,,k 1 ( x) xk xi ( x xi )
( x0 , y0 ), ( x1 , y1 )
容易求出,该函数为:
x x0 x x1 y y0 y1 x0 x1 x1 x0
一般插值问题:求过n+1个点
( x0 , y0 ), ( x1 , y1 ),,( xn , yn )
的不超过n次多项式 Ln ( x )。
Ln ( x) yi li ( x )
例子:求方程 x3-2x-5=0 在(2 , 3)内的根 思路: 设 y = f(x) =x3-2x-5 ,其反函数为 x=f -1(y),则 根为x* =f -1(0) 。先用3= f -1(16), 2= f -1(-1)插值,得 N0,1 (y) ≈f -1(y), 计算N0,1 (0)= 2.058823, f(2.058823) = -0.39 ,以-0.39为新的节点,继续……
第三章 插值法
第一节 插值多项式的基本概念
假设已经获得n+1点上的函数值
f xi yi , i 0,1,, n,
即提供了一张数据表
x
y f x
x0
y0
x1
y1
x2
xn
y2
数值分析实验报告--实验2--插值法
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),即插值效果越来越好。
多项式插值方法上机报告
上机报告1400012428汪颖问题:对函数R(x)=1/(1+x^2),利用下列条件做插值逼近,并比较图像①10次Newton差值多项式,等距节点xi=-5+i,i=0,1,2 (10)②20次Lagrange差值多项式,等距节点xi=5cos((2i+1)π/42),i=0,1,2 (20)③分段线性插值函数,等距节点xi=-5+i,i=0,1,2 (10)④分段三次Hermite插值函数,等距节点xi=-5+i,i=0,1,2 (10)⑤三次自然样条插值函数,等距节点xi=-5+i,i=0,1,2 (10)解决问题的方法:①②计算各项数值代入,循环计算③④⑤循环判断并计算使用的软件及代码:MATLAB初始方程程序:x=[-5:0.01:5]y=1./(1+x.*x)plot(x,y)①:xList=[-5:1:5]yList=1./(1+xList.*xList)cL=[1:1:11]b=0for k=1:1:11sum=0for i=1:1:kmul=1for j=1:1:kif i~=jmul=mul*(xList(i)-xList(j))endendsum=sum+yList(i)/mulendcL(k)=sumendx=[-5:0.01:5]mul=1y=0for i=1:1:11y=y+cL(i)*mulmul=mul.*(x-xList(i))endplot(x,y)hold on②:num=[0:1:20]xList=5*cos(pi*(1+2.*num)/42+pi) yList=1./(1+xList.*xList)x=[-5:0.01:5]y=0for i=1:1:21mul=1for j=1:1:21if j~=imul=mul*(xList(i)-xList(j))endendmulx=1for j=1:1:21if j~=imulx=mulx.*(x-xList(j))endendy=y+(yList(i)/mul)*mulxendplot(x,y)③:xx=0yy=0s=1xList=[-5:1:5]yList=1./(1+xList.*xList)for x=-5:0.01:5y=0for i=1:1:11if i==1y=y+yList(i)/(xList(i)-xList(i+1)).*(x-xList(i+1))endelseifi==11if x>=xList(i-1) & x<=xList(i)y=y+yList(i)/(xList(i)-xList(i-1)).*(x-xList(i-1))endelseif x>=xList(i-1) & x<=xList(i)y=y+yList(i)/(xList(i)-xList(i-1)).*(x-xList(i-1))elseif x>=xList(i) & x<=xList(i+1)y=y+yList(i)/(xList(i)-xList(i+1)).*(x-xList(i+1))endendendxx(s)=xyy(s)=ys=s+1endplot(xx,yy)④:xx=0yy=0s=1xList=[-5:1:5]yList=1./(1+xList.*xList)ydList=-2.*xList./((1+xList.*xList).*(1+xList.*xList))for x=-5:0.1:5y=0for i=1:1:11if i==1if x>=xList(i) & x<=xList(i+1)y=y+(yList(i)*(1+2*(x-xList(i))/(xList(i+1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i+1))/(xList(i)-xList(i+1)))*((x-xList(i+1))/(xList(i)-xList(i+1))) endelseifi==11if x>=xList(i-1) & x<=xList(i)y=y+(yList(i)*(1+2*(x-xList(i))/(xList(i-1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i-1))/(xList(i)-xList(i-1)))*((x-xList(i-1))/(xList(i)-xList(i-1))) endelsey=y+(yList(i)*(1+2*(x-xList(i))/(xList(i-1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i-1))/(xList(i)-xList(i-1)))*((x-xList(i-1))/(xList(i)-xList(i-1))) elseif x>=xList(i) & x<=xList(i+1)y=y+(yList(i)*(1+2*(x-xList(i))/(xList(i+1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i+1))/(xList(i)-xList(i+1)))*((x-xList(i+1))/(xList(i)-xList(i+1))) endendendxx(s)=xyy(s)=ys=s+1endplot(xx,yy)⑤:xx=0yy=0s=1xList=[-5:1:5]yList=1./(1+xList.*xList)for i=1:1:10h(i)=xList(i+1)-xList(i)endlambda(1)=1mu(1)=3*(yList(2)-yList(1))/h(1)lambda(11)=0mu(11)=3*(yList(11)-yList(10))/h(10)for i=2:1:10lambda(i)=h(i-1)/(h(i-1)+h(i))mu(i)=3*((1-lambda(i))*(yList(i)-yList(i-1))/h(i-1)+lambda(i)*(yList(i+1)-yList (i))/h(i))endAList(11,11)=0for i=1:1:11if i==1AList(1,1)=2AList(1,2)=lambda(1)elseifi==11AList(11,10)=1-lambda(11)AList(11,11)=2elsefor j=1:1:3AList(i,i-1)=1-lambda(i+1)AList(i,i)=2AList(i,i+1)=lambda(i+1)endendmuList(i,1)=mu(i)endm=AList\muListfor i=1:1:11ydList(i)=m(i,1)endfor x=-5:0.1:5y=0for i=1:1:11if i==1if x>=xList(i) & x<=xList(i+1)y=y+(yList(i)*(1+2*(x-xList(i))/(xList(i+1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i+1))/(xList(i)-xList(i+1)))*((x-xList(i+1))/(xList(i)-xList(i+1))) endelseifi==11if x>=xList(i-1) & x<=xList(i)y=y+(yList(i)*(1+2*(x-xList(i))/(xList(i-1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i-1))/(xList(i)-xList(i-1)))*((x-xList(i-1))/(xList(i)-xList(i-1))) endelseif x>=xList(i-1) & x<=xList(i)y=y+(yList(i)*(1+2*(x-xList(i))/(xList(i-1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i-1))/(xList(i)-xList(i-1)))*((x-xList(i-1))/(xList(i)-xList(i-1))) elseif x>=xList(i) & x<=xList(i+1)y=y+(yList(i)*(1+2*(x-xList(i))/(xList(i+1)-xList(i)))+ydList(i)*(x-xList(i)))* ((x-xList(i+1))/(xList(i)-xList(i+1)))*((x-xList(i+1))/(xList(i)-xList(i+1))) endendendxx(s)=xyy(s)=ys=s+1endplot(xx,yy)数值结果:用图表示自上而下分别是原函数图①②③④⑤数值结果分析:我们看到,使用等距Newton插值会出现Runge现象,而Lagrange插值选择点可以较好拟合,分段三次Hermite插值与三次自然样条插值效果明显好于前三种。
第三章多项式插值方法习题
4、经过点(0,1),(1,2),(2,5)的插值多项式 P(x) ( D )
(A) x
(B) x 1
(C) 2x 1 (D) x2 1
x 0 2 51
5、已知函数 y f (x) 的数据表
,
y 3 6 9 0
则 y f (x) 的拉格朗日插值基函数 l2 (x) ( A )
(A) x(x 2)( x 1) (B) (x 2)( x 5)( x 1)
第三章 习 题
1、 n 次拉格朗日插值多项式的余项是( A )
(A) Rn (x)
f (n (n
1) ( )
1)!
n1
(
x)
(B) Rn (x)
f
(n)
n
(
!
)
n
(
x)
f (n1) ( )
(C) Rn (x) (n 1)!
(D)
Rn (x)
f (n) ( )
n!
x 0 0.5 1 1.5 2 1 1 x x 1 x 2 1 x3 3 x2 1。
2
2
22
又: R3 x f x px 满足: R0 1, R1 2, R2 3, R0 0 ,
使
xi
x
xi1 ,
令 h xi1 xi ,则: R(x)
f
'' (
2
)
(x
xi
)(x
xi1 )
,
解:对
x
[0,
2
]
,必有某个
x
i
使
xi
x
xi1 ,
令 h xi1 xi ,则: R(x)
f
'' (
第3章 多项式插值方法
1.1 多项式插值问题
给定 n + 1 个互异点 x 0 , x1 , " , x n ,对任意一组数 y 0 , y1 , " , y n , 求 次数不大于 n 的多项式 pn ( x ) ∈ Pn ,使其满足如下插值条件
pn ( xi ) = yi , i = 0,1," , n
(3.4)
称 x 0 , x1 , " , x n 为插值节点, pn ( x ) 为插值多项式, (3.4)称为 插值条件。
n n
定理 满足插值条件 pn ( x k ) = yk (k = 0,", n) 的如上式的 n次插值多项式唯一。
29
w( x ) pn ( x ) = ∑ lk ( x ) yk = ∑ yk k =0 k =0 ( x − xk ) w′ ( xk )
n n
定义 (3.7)称作为 Lagrange 插值多项式,并记为
x0
x1
16
y = p1 ( x ) 其几何意义是已知平面上两点 ( x 0 , y 0 ) , ( x1 , y1 ) 的一
条直线,由直线的两点式公式可知:
y1 − y 0 P 1( x) = y0 + ( x − x0 ) 。 x1 − x 0
x − x0 x − x1 P 1 ( x) = y0 + y1 x0 − x1 x1 − x0
析表达式的简单函数,所以它在 x
= x 处的值可以按表达式精
确地计算出来。这样我们就可以将 g ( x ) 看成 y = f ( x ) 的近似 值了。
6
本章只研究多项式插值,亦即g(x)是x的多项式的 情形。这不仅仅因为多项式是最简单的函数,而且因 为在许多场合,函数容易用多项式近似地表示出来。 此外,用多项式作插值函数可满意地解决一系列有应 用价值的重要问题。特别是数值积分与数值微分的问 题。
插值数值实验报告(3篇)
第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
数值分析上机报告插值法
0.0522 0.0000 0.0875 0.0000 0.1375 0.0000 -0.0625 0.0000 -0.0625 0.0000 0.1375 0.0000 0.0875 0.0000 0.0522 0.0000 0.0114 0.0206 0.0274 0.0318 0.0337 0.0328 0.0291 0.0225 0.0128 0.0000
0.0794 0.1000 0.1500 0.2000 0.3500 0.5000 0.7500 1.0000 0.7500 0.5000 0.3500 0.2000 0.1500 0.1000 0.0794 0.0588 0.0568 0.0548 0.0527 0.0507 0.0486 0.0466 0.0446 0.0425 0.0405 0.0385
二、方法描述
1. Lagrange 插值 Lagrange 插值是基于基函数的插值方法,其插值多项式可以表示为:
Ln ( x) = ∑ yi li ( x)
i =0
n
其中,
( xi ) = yi f=
i 次基函数
1 , i = 0,1, 2, , n 1 + 25 xi 2
li ( x) =
同时满足
-3.9971 0.0000 0.8397 0.0000 -0.2351 0.0000 0.0543 0.0000 0.0543 0.0000 -0.2351 0.0000 0.8397 0.0000 -3.9971 0.0000 3.9907 9.4467 16.3087 24.2507 32.5478 39.9039 44.2322 42.3774 29.7702 0.0000
L(x) 0.0385 1.2303 1.8044 1.9590 1.8458 1.5787 1.2402 0.8881 0.5604 0.2802 0.0588
讲解多项式插值(包含例题)
第三章多项式插值方法教学目的及要求:要求掌握基本的定理及各种插值方法。
插值方法是数学分析中很古老的一个分支.它有悠久的历史.等距结点内插公式是由我国隋朝数学家刘焯(公元544—610年)首先提出的;而不等距结点内插公式是由唐朝数学家张遂(公元683—727年) 提出的.这比西欧学者相应结果早一千年.插值方法在数值分析的许多分支(例如, 数值积分, 数值微分, 微分方程数值解,曲线曲面拟合,函数值近似计算,等等)均有应用.下面仅以近似计算函数值为例来说明设已知某个函数关系()x f y =的列表函数值nn y y y yx x x x110而()n i x x i ,1,0=≠问应该如何估值().x f y =对于函数关系()x f y =,我们所知道仅仅上述的表列值,它们常常是间接求得的.例如是由实验(观测)得来的,或者是从级数或微分方程求得的.我们可以使用插值方法估计y. 插值方法的目的是寻求简单的连续函数()x ϕ,使它在n+1个点n x x x ,,,10 处取给定值()()),,1,0(n i x f y x i i i ===ϕ,而在别处希望它也能近似地代表函数()x f .因为()x ϕ已是有解析表达式的简单函数,所以它在x x =处的值可以按表达式精确地计算出来.这样我们就可以将()x ϕ看成().x f y =的近似值了给定点n x x x ,,,10 为插值结点.称函数()x ϕ为函数()x f 的关于n x x x ,,,10 的插值函数.称()x f y =为被插函数.严格的说,插值方法一词只用于x 落在给定点n x x x ,,,10 之间的情形,所以也称它为内插法.如果x 落在给定点n x x x ,,,10 之外,并且仍以插值函数()x ϕ在x 处近似地代替().x f ,则一般称这种近似计算函数的方法为外插法.本章我只研究多项式插值,亦即()x ϕ是x 的多项式的情形.这不仅仅因为多项式是最简单的函数,而且因为在许多场合,函数()x f 容易用多项式近似地表示出来.此外,用多项式作插值函数可满意地解决一系列有应用价值的重要问题.特别是数值积分与数值微分的问题.本章讲不涉及三角插值法.其实,只要理解了代数多项式插值方法的实质读者就不难自行导出关于三角多项式插值方法的一系列相应与代数多项式插值方法的理论结果§1. Lagrange 插值公式设()x f y =是实变量x 得单值函数,且已知()x f 在给定的n+1个互异点n x x x ,,,10 处的值n y y y ,,,10 ,即().,,0,n i x f y i i ==插值的基本问题是,寻求多项式()x p ,使得 ()()1.1.,0,n i y x p i i ==设()x p 是一个m 次多项式()0,2210≠++++=m m m a x a x a x a a x p则插值问题是,如何确定()x p 中的系数m a a a ,,,10 ,使得(1.1)式得以满足.所以该问题等价于求解下述的线性方程组:()2.1,,,22101121211000202010⎪⎪⎩⎪⎪⎨⎧=++++=++++=++++n m n m n n mm mm y x a x a x a a y x a x a x a a y x a x a x a a上述的线性方程组的系数矩阵为⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=m n m m nnx x x x x x x x x A102211200111 它是一个(n+1)×(m+1)矩阵.当m>n 时,A 的列数大于行数.不难证明矩阵A 的秩数为n+1.因为A 的前n+1列所组成的行列式为(称为Vandermonde 行列式)()mnmm n n n n x x x x x x x x x d e f x x x W10221120010111,.,-我们有()()()3.1,.,10∏>--=ij i j n n x x x x x W为证(1.3),考虑n 次多项式()nnnn n n n n n xx xx x x x x x x x x x x x W2121112110200101111,.,----= 显然110,,,-n x x x 均为它的零点,且它的n x 系数恰为()10.,-n x x W 即 ()()()()101010.,,.,-----=n n n x x x x x x W x x x W 从而有下述递推关系式()()()()101010.,,.,-----=n n n n n n x x W x x x x x x x W运用它即可证明(1.3)式根据(1.3),并注意到诸n x x x ,,,10 互异,从而线性方程组(1.2)的系数矩阵的秩数为n+1 .它表明(1.2)的解是不唯一的,即插值问题(1.1)的解不唯一。
数值计算方法上机实验报告
数值计算方法上机实验报告实验目的:复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。
利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。
上机练习任务:利用计算机基本C 语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。
掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。
一、各算法的算法原理及计算机程序框图1. 列主元高斯消去法算法原理:高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘一个方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。
列选住院是当高斯消元到第k 步时,从k 列的kk a 以下(包括kk a )的各元素中选出绝对值最大的,然后通过行交换将其交换到kk a 的位置上。
交换系数矩阵中的两行(包括常数项),只相当于两个方程的位置交换了,因此,列选主元不影响求解的结果。
●源程序:#define N 200#include "stdio.h"#include "math.h"FILE *fp1,*fp2;void LZ(){int n,i,j,k=0,l;double d,t,t1;static double x[N],a[N][N];fp1=fopen("a1.txt","r");fp2=fopen("b1.txt","w");fscanf(fp1,"%d",&n);for(i=0;i<n;++i)for(j=0;j<=n;++j){fscanf(fp1,"%lf",&a[i][j]);}{d=a[k][k];l=k;i=k+1;do{if(fabs(a[i][k])>fabs(d)) /*选主元*/{d=a[i][k];l=i;}i++;}while(i<n);if(d==0){printf("\n输入矩阵有误!\n");}else{ /*换行*/if(l!=k){for(j=k;j<=n;j++){t=a[l][j];a[l][j]=a[k][j];a[k][j]=t;}}}for(j=k+1;j<=n;j++) /*正消*/ a[k][j]/=a[k][k];for(i=k+1;i<n;i++)for(j=k+1;j<=n;j++)a[i][j]-=a[i][k]*a[k][j];k++;}while(k<n);if(k!=0){for(i=n-1;i>=0;i--) /*回代*/ {t1=0;for(j=i+1;j<n;j++)t1+=a[i][j]*x[j];x[i]=a[i][n]-t1;}for(i=0;i<n;i++)fprintf(fp2,"\n 方程组的根为x[%d]=%lf",i+1,x[i]); fclose(fp1); fclose(fp2); }main() { LZ(); }● 具体算例及求解结果:用列选主元法求解下列线性方程组⎪⎩⎪⎨⎧=++=++=-+28x x 23x 2232832321321321x x x x x x 输入3 输出结果:方程组的根为x[1]=6.0000001 2 -3 8 方程组的根为x[2]=4.000000 2 1 3 22 方程组的根为x[3]=2.000000 3 2 1 28● 输入变量、输出变量说明:输入变量:ij a 系数矩阵元素,i b 常向量元素 输出变量:12,,n b b b 解向量元素2. 杜里特尔分解法解线性方程● 算法原理:求解线性方程组Ax b =时,当对A 进行杜里特尔分解,则等价于求解LUx b =,这时可归结为利用递推计算相继求解两个三角形(系数矩阵为三角矩阵)方程组,用顺代,由Ly b =求出y ,再利用回带,由Ux y =求出x 。
数值分析上机实习题
数值分析上机实习题第2章插值法1. 已知函数在下列各点的值为试⽤四次⽜顿插值多项式)(x p 4及三次样条韩式)(S x (⾃然边界条件)对数据进⾏插值。
⽤图给出(){}10,11,1,0,08.02.0,,x i =+=i x y i i ,)(x p 4及)(x S Python 代码import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesfont_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=12) #求⽜顿n 次均差 def qiujuncha(x,f,n): for i in range(1,n): for j in range(4,i-1,-1):f[j]= (f[j] - f[j-1])/(x[j]-x[j-i]) #根据⽜顿多项式求值 def niudun(x,f,x1): sum = f[0]; tmp = 1;for i in range(1,5): tmp *= (x1-x[i-1]) sum = sum + f[i]*tmp return sum#⽜顿插值画图 def drawPic(x,f):x1 = np.linspace(0.2, 1, 100) plt.plot(x1, niudun(x,f,x1))plt.title(u"⽜顿四次插值",fontproperties=font_set) plt.xlabel(u"x 轴",fontproperties=font_set) plt.ylabel(u"y 轴", fontproperties=font_set) plt.show() def qiu_h(x,h): n = len(x) -1 for i in range(n): print(i)h[i] = x[i+1]-x[i]#⾃然边界条件下的三次样条插值求Mdef qiu_m(h,f,o,u,d):n = len(h)o[0] = 0u[n] = 0d[n] = d[0] = 0a = []for i in range(1,n):u[i] = h[i-1]/(h[i-1]+h[i])for i in range(1,n):o[i] = h[i]/(h[i-1]+h[i])for i in range(1,n-1):d[i] = 6*(f[i+1]-f[i])/(h[i-1]+h[i])t = [0 for i in range(5)]t[0] =2t[1] = o[0]a.append(t)for i in range(1,n):t = [0 for i in range(5)]t[i - 1] = u [i + 1]t[i] = 2t[i + 1] = o [i + 1]a.append(t)t = [0 for i in range(5)]t[n - 1] = u[n]t[n] = 2a.append(t)tmp = np.linalg.solve(np.array(a),np.array(d))m = []for i in range(5):m.append(tmp[i])return m#根据三次条插值函数求值def yangtiao(x1,m,x,y,h,j):returnm[j]*(x[j+1]-x1)**3/(6*h[j])+m[j+1]*(x1-x[j])**3/(6*h[j])+(y[j]-m[j]*h[j]**2/6)*(x[j+1]-x1)/h[j] +(y[j+1]-m[j+1]*h[j]**2/6)*(x1-x[j])/h[j] def main():x = [0.2, 0.4, 0.6, 0.8, 1.0]y = [0.98, 0.92, 0.81, 0.64, 0.38]f = y[:]f1 = y[:]h = [0.2,0.2,0.2,0.2]u = [0 for n in range(5)]d = [0 for n in range(5)]o = [0 for n in range(5)] qiujuncha(x,f,4) qiujuncha(x,f1,2)m = qiu_m(h,f1,o,u,d) x1 = np.linspace(0.2, 0.4, 10)p1= plt.plot(x1, yangtiao(x1,m,x,y,h,0),color='red') x1 = np.linspace(0.4, 0.6, 10)plt.plot(x1, yangtiao(x1, m, x, y, h, 1),color='red') x1 = np.linspace(0.6, 0.8, 10)plt.plot(x1, yangtiao(x1, m, x, y, h, 2),color='red') x1 = np.linspace(0.8, 1.0, 10)plt.plot(x1, yangtiao(x1, m, x, y, h, 3),color='red') x1 = np.linspace(0.2, 1.0, 40)p2 = plt.plot(x1,niudun(x,f,x1),color='green') plt.xlabel(u"x 轴", fontproperties=font_set) plt.ylabel(u"y 轴",fontproperties=font_set) plt.title("三次样条插值和⽜顿插值")plt.legend(labels=[u'三次样条插值',u'⽜顿插值'],prop=font_set,loc="best") plt.show() main()实验结果运⾏结果可得插值函数图(如图1-1),4次⽜顿插值函数)(x p 4和三次样条插值函数)(x S 如下:)6.0(*)4.0(*)2.0(625.0)4.0(*)2.0(*3.098.0)(4-------=x x x x x x x P 98.0)8.0(*)6.0(*)4.0(*)2.0(*20833.0+-----x x x x]4.0,2.0[),2.0(467.4)4.0(9.4)2.0(167.1)(S 3∈-+-+-=x x x x x]6.0,4.0[),4.0(113.4)6.0(6467.4)4.0(575.1)6.0(167.1)(S 33∈-+-+----=x x x x x x ]8.0,6.0[),6.0(2.3)8.0(113.4)6.0(575.1)(S 3∈-+-+--=x x x x x]0.1,8.0[),8.0(9.1)0.1(2.3)(S ∈-+-=x x x x图1-1三次样条插值和⽜顿插值图2.在区间[-1,1]上分别取n = 10,20⽤两组等距节点对龙格函数做多项式插值三次样条插值,对每个n值画出插值函数及图形。
《数值计算方法》---多项式插值实验报告
1
2
3
4
5
6
y
0
0.6931
1.0986
1.3863
1.6094
1.7918
2根据下面的数据点,分别求牛顿前插多项式和牛顿后插多项式,并计算x=1.55时y的值。
x
1
2
3
4
5
6
y
0
0.6931
1.0986
1.3863
1.6094
1.79ቤተ መጻሕፍቲ ባይዱ8
3根据下面的数据点,求埃尔米特插值多项式,并计算x=1.44时y的值。
《数值计算方法》---多项式插值实验报告
实验名称:多项式插值
实验目的:
1、熟悉Matlab的编程。
2、学会求解拉格朗日插值、牛顿插值及埃尔米特插值多项式并估计函数在某点处的值。
实验设备与环境:计算机,Windows系统,Matlab等。
实验内容:
1.根据下面的数据点,分别求拉格朗日插值多项式和牛顿插值多项式,并计算x=1.5时y的值。
x
1
1.2
1.4
1.6
1.8
y
1
1.0954
1.1832
1.2649
1.3416
y’
0.5000
0.4564
0.4226
0.3953
0.3727
f =
10850.7*(t - 1.0)^2*(t - 1.4)^2*(t - 1.6)^2*(t - 1.8)^2*(9.58473*t - 10.4063) - 10850.7*(t - 1.0)^2*(t - 1.2)^2*(t - 1.4)^2*(t - 1.8)^2*(10.1455*t - 17.4978) + 24414.1*(t - 1.0)^2*(t - 1.2)^2*(t - 1.6)^2*(t - 1.8)^2*(0.4226*t + 0.59156) - 678.168*(27.5773*t - 50.9807)*(t - 1.0)^2*(t - 1.2)^2*(t - 1.4)^2*(t - 1.6)^2 + 678.168*(t - 1.2)^2*(t - 1.4)^2*(t - 1.6)^2*(t - 1.8)^2*(21.3333*t - 20.3333)
计算方法大作业——三次样条插值
计算方法上机报告
此完成所有数据的输入。继续按 Enter 键会出现提示“选择封闭方程组的边界条件: 第 一类边界条件输入 1,第二类边界条件输入 2,第三类边界条件输入 3。 ”根据已知情况 选择相应的边界条件,若为自然三次样条插值,则选 1,并将插值区间两端点的二阶导 数值设置为 0。输入完成之后按 Enter 开始求解,程序运行结束后命令窗口会显示要求 的三次样条插值函数,同时会出现该插值函数以及插值节点的图像,便于直接观察。 2.3 算例及计算结果 (1) 《数值分析》课本第 137 页的例题 4.6.1,已知函数 y=f(x)的数值如下表,求它 的自然三次样条插值函数。 xi yi -3 7 -1 11 0 26 3 56 4 29
(2) 给定函数 f ( x)
3 x 1 1 x 0 0 x3 3 x 4
1 (1 x 1) 。取等距节点,构造牛顿插值多项式 N5(x) 1 25x 2 和 N10(x)及三次样条插值函数 S10(x)。分别将三种插值多项式与 f(x)的曲线画在同一个
N10 x
22757 10 5444 8 20216 6 17147 4 3725 2 x x x x x 1 103 11 53 139 221
将牛顿插值多项式 N5(x)和 N10(x)及三次样条插值函数 S10(x)分别与 f(x)的曲线画在 同一个坐标系上进行比较,如图 12。可以看出三次样条函数与原函数符合的非常好, 对于低次的牛顿插值多项式,与原函数的大致趋势相同,而高次的牛顿插值多项式由 于龙格现象的出现,与原函数之间相差比较大。
S ( xi ) S ( xi ), ( xi ) S ( xi ), S S ( x ) S ( x ), i i i 1, 2, , n 1
计算方法上机实习一
计算方法上机实习一实习内容一 拉格朗日插值多项式的构造1、方法简介:设y=f(x)是区间[a,b]上的连续函数,已知它在[a,b]上的n+1个互不相同的点x0,x1,…xn 上取值y0,y1,…yn, 希望构造一个函数P(x)作为f(x)的近似表达式,且满足:P(xi)=f(xi)=yi (I=0,1,…n),这类问题即为插值问题。
拉格朗日插值多项式的公式为:2、使用说明:输入参数:N 整变量,插值节点个数。
X0 N 个元素的一维实数组,存放给定的插值节点。
Y0 N 个元素的一维实数组,存放给定的插值节点上相应的函数值。
X 实变量,插值点。
输出参数:Y 实变量,插值结果。
3、实例:(1)据探测资料已知:各标准等压面(300hPa, 500hPa,700hPa, 850hPa, 1000hPa )上各个网格点(100*100)的位势高度值(8280gpm ,5800gpm ,3140gpm ,1520gpm ,770gpm ),用拉格朗日插值多项式求400hPa, 600hPa, 800hPa 个层网格上的位势高度值。
Subroutine LAGR (X0,Y0,N,X,y)Dimension X0(N),Y0(n)Y=0.0Do 30 I=1,nP=1,0Do 20 J=1,nIf(i.ne.j) p=p*(x-x0(j)/(x0(i)-x0(j))20 continue30 y=y+p*y0(i)ReturnEndi j i j n ji j n i n y x x x x x P y ∙--==∏∑≠==)()(004、流程图:5 实习要求及实习报告要求按以上过程完成实习内容,将结果输出到文件中,完成实习报告。
实习报告包括:实习内容,要求,基本原理,运行结果,结果分析和总结。
数值分析上机作业1-1解析
数值计算方法上机题目11、实验1. 病态问题实验目的:算法有“优”与“劣”之分,问题也有“好”和“坏”之别。
所谓坏问题就是问题本身的解对数据变化的比较敏感,反之属于好问题。
希望读者通过本实验对此有一个初步的体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。
病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式∏=-=---=201)()20)...(2)(1()(k k x x x x x p (E1-1)显然该多项式的全部根为l ,2,…,20,共计20个,且每个根都是单重的(也称为简单的)。
现考虑该多项式方程的一个扰动0)(19=+xx p ε (E1-2)其中ε是一个非常小的数。
这相当于是对(E1-1)中19x 的系数作一个小的扰动。
我们希望比较(E1-1)和(E1-2)根的差别,从而分析方程(E1-1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个 Matlab 函数:“roots ”和“poly ”,输入函数u =roots (a )其中若变量a 存储1+n 维的向量,则该函数的输出u 为一个n 维的向量。
设a 的元素依次为121,...,,+n a a a ,则输出u 的各分量是多项式方程0...1121=++++-n n n n a x a x a x a的全部根,而函数b=poly(v)的输出b 是一个n +1维变量,它是以n 维变量v 的各分量为根的多项式的系数。
可见“roots ”和“Poly ”是两个互逆的运算函数.ve=zeros(1,21); ve(2)=ess;roots(poly(1:20))+ve)上述简单的Matlab 程序便得到(E1-2)的全部根,程序中的“ess ”即是(E1-2)中的ε。
实验要求:(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。
数值分析_第三次上机
4.求f(x)=sin x 在[0,π/2]上的最佳一次逼近多项式。
解:设P 1(x)=a 0+a 1x 是f(x) 的最佳一次逼近多项式,则P 1(x)在[0,π/2]上有三个交错点, 满足0<=x 1<x 2<x 3<=π/2。
由于 [f(x)- P 1(x)]’’=(cos x-a 1)’= -sin x 在[0,π/2]上小于0,定号, 故(cos x-a 1)’在[0,π/2]上单调递减,且仅有一个驻点。
故f(x)- P 1(x)在[0,π/2]上只有一个偏差点x 2,满足[f(x)- P 1(x)]’|x=x2 =cos x 2-a 1=0 (1)。
另外两个偏差点x 1=0 ,x 3=π/2 .于是sin 0-a 0 =sin π/2-a 0-π/2a 1 (2), sin x 2 –a 0-a 1x 2= -( sin 0-a 0) (3) 由(1)(2)(3)式得:a 1=2/π x 2=arccos 2/π=0.88 a 0=-1.18 所以P 1= -1.18+2/π x 。
6.求f(x)=2x 4+3x 3-x 2+1在[-1,1]上的三次最佳一致逼近多项式。
解:设f(x)的三次最佳一致逼近多项式为P 3(x),由切比雪夫多项式的极性可得 1/2[f(x)- P 3(x)]=1/8T 4(x)=1/8(8x 4-8x 2+1)所以P 3(x)=f(x)-1/4(8x 4-8x 2+1)= 2x 4+3x 3-x 2+1-2x 4+2x 2-1/4 =3x 3+x 2+3/49.求函数f(x)在指定区间上关于Φ(x)=span{1,x}的最佳平方逼近多项式。
(3)f(x)=cosπx, x ∈[0,1];(4)f(x)=ln x, x ∈[1,2].解:(3)在[0,1]上,经计算得 d 0= ⎰1)(f dx x =0 ,d 1=⎰1)(x dx x f = -2/π2得到法方程组为a 0+1/2a 1=0 ,1/2a 0+1/3a 1= -2/π2 由上面两式解得 a 0=12/π2 ,a 1= -24/π2所以f(x)=cosπx 在[0,1]上的最佳平方逼近多项式为 S 1*=12/π2 -24/π2 x 。
数值分析第五版上机实验答案实验一~实验六
实验一Lagrange插值算法实验目的:掌握拉格朗日(Lagrange)插值算法的基本原理,理解插值基函数的性质,掌握基本的误差概念。
学习用计算机语言编写程序实现算法。
[参考程序]#include "stdio.h"//定义插值节点及所求点数据,根据题目不同而修改double x[]={0.32,0.34,0.36};double y[]={0.314567,0.333487,0.352274};double xx=0.3367;// Lagrange插值算法函数,利用循环计算具有对称性的基函数和最终结果double Lagrange(double xxx,int n){int i;double result=0,temp;for(i=0;i<=n;i++){temp=1;for(int j=0;j<= n;j++){if(j!=i){temp=temp*(xxx-x[j])/(x[i]-x[j]);}}result=result+temp*y[i];}return result;}void main(){int n;printf("Please input n:");scanf("%d",&n);printf("Sin(%f) = %f \n",xx,Lagrange(xx,n));}实验二Newton均差插值算法实验目的:掌握Newton均差插值算法的基本原理,理解均差的概念,掌握均差表的计算方法。
学习用计算机语言编写程序实现算法。
[参考程序]#include "stdio.h"#define N 10double f[N][N];//定义插值节点及所求点数据,根据题目不同而修改double x[]={0.4,0.55,0.65,0.80,0.90,1.05};double y[]={0.41075,0.57815,0.69675,0.88811,1.02652,1.25382};double fx(int i,int j);double S(int start,int end,double xx);main(){int loopi,loopj,n;double result,xx;scanf("%d",&n);scanf("%lf",&xx);for(loopi=0;loopi<=n;loopi++){//零阶均差作为均差表二维数组的第0列f[loopi][0]=y[loopi];}//循环计算均差表中的所有数据for(loopi=1;loopi<=n;loopi++){for(loopj=1;loopj<=loopi;loopj++){f[loopi][loopj]=fx(loopi,loopj);}}result=S(0,n,xx);printf("Result is: %f",result);return 1;}//求均差的函数double fx(int i,int j){if(j==0){return f[i][j];}else{//这种表示方法需要注意两个x的下标return (fx(i,j-1)-fx(i-1,j-1))/(x[i]-x[i-j]);}}//用秦九韶算法计算插值多项式结果double S(int start,int end,double xx){if(start==end){return f[end][end];}else{return (S(start+1,end,xx)*(xx-x[start])+f[start][start]);}}实验三Newton差分插值算法实验目的:掌握Newton差分插值算法的基本原理,理解差分的概念,掌握差分表的计算方法。
插值多项式实验报告
2010年——2011年第一学期合肥学院数理系实验报告课程名称:数值分析实验项目:插值多项式实验类别:验证性专业班级: 08数学与应用数学(2)班姓名:卢王菲学号:0807022048 实验地点: 7#604实验时间:指导教师:孙梅兰成绩:一.实验目的:熟悉插值多项式构造,通过计算机解决实验问题;龙格现象的发生、防止,通过拉格朗日插值、分段线性插值以及三次样条插值进行插值效果的比较通过分析、推导,掌握数据插值的思想方法;通过对插值方法的进一步讨论,了解插值的“龙格”现象;熟悉常用的分段线性插值和样条插值的使用方法;掌握上机编程与调试能力。
二.实验内容:1、拉格朗日插值2、分段线性插值3、三次样条插值三. 实验步骤或程序:第一题:L的函数近似值用四次拉格朗日多项式求)5.0(4function yy=Lagrange(x,y,xi)m=length(x);n=length(y);if m~=n,error('向量x与y的长度必须一致');ends=0;for i=1:nz=ones(1,length(xi));for j=1:nif j~=iz=z.*(xi-x(j))/(x(i)-x(j));endends=s+z*y(i);endyy=s;在命令窗口调用Lagrange函数如下>> x=[0.4,0.5,0.80,0.9,1];>> y=[0.41075,0.57815,0.88811,1.02652,1.17520];>> xi=[0.5];>> yi=Lagrange(x,y,xi)第二题:已知sin(0.32)= 0.314567,sin(0.34)=0.333487用Lagrangeq求sin(0.33)的近似值x=[0.32,0.34];y=[0.314567,0.333487];xi=[0.33];yi=Lagrange(x,y,xi)yi = 0.3240>> plot(x,y,'o',xi,yi,'g)用拉格朗日多项式求x=21.4的函数近似值x=[20,21,22,23,24];y=[1.30130,1.32222,1.34242,1.36173,1.38021]; xi=[21.4];yi=Lagrange(x,y,xi)yi =1.3304>> plot(x,y,'o',xi,yi,'g^')四.实验总结:通过本次试验,我初步了解并掌握了用拉格朗日插值、分段线性插值以及三次样条插值解决多项式求解问题,认识到数值分析的重要作用,其在生活实际中有不可忽视的作用,我需要刻苦努力脚踏实地的认真学习。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法多项式插值方法上机习题报告
(一)问题:
对Runge函数R(x)=1
1+x
,x∈[-5,5],利用下列条件做插值逼近,并与R(x)的图像进行比较.
(1)用等距节点x i= -5 + i, i=0, 1, 2,…,10,绘出它的10次Newton插值多项式的图像;
(2)用节点x i= 5cos(2i+1
42
π), i=0, 1, 2,…,20,绘出它的20次Lagrange插值多项式的图像;
(3)用等距节点x i= -5 + i, i=0, 1, 2,…,10,绘出它的分段线性插值函数图像;
(4)用等距节点x i= -5 + i, i=0, 1, 2,…,10,绘出它的分段三次Hermite插值函数的图像;
(5)用等距节点x i= -5 + i, i=0, 1, 2,…,10,绘出它的三次自然样条插值函数的图像。
(二)解决问题的算法
由于问题中已经明确了被插函数(Runge函数)及所用的插值方法,所以下面简单介绍一下各插值方法。
(1)Newton插值方法
对于被插函数,选取插值点(x1,f x1),…,(x n,f(x n)).
定义k阶插商(k≥1)为:
f x i,x i+1,…,x i+k=f x i+1,x i+2,…,x i+k−f x i,x i+1,…,x i+k−1
i+k i
.
此外,规定f(x)在节点x j上的0阶插商为f[x j]=f(x j).
定义函数:
ωn (x)=(x-x0)(x-x1)…(x-x n).
则牛顿插值多项式为:
N n(x)=f[x0]+f[x0,x1]ω0 (x)+…+f[x0,x1,…,x n]ωn-1 (x).
在具体的计算机实现过程中,可以使用一个二维数组,使得角标为(i, j)(i≤j+1)的位置存储f[x i-1,…,x j],从而得到牛顿插值多项式.
(2)Lagrange插值方法
对于被插函数,选取n+1个插值节点并求出其函数值:(x0,f x0),…,(x n,f(x n)).
定义:
l i x=
x−x0…x−x i−1x−x i+1……(x−x n) x i−x0…x i−x i−1x i−x i+1……(x i−x n)
.
则拉格朗日插值多项式为:
p(x)=f x i∗l i(x)
n
i=1
(3)分段线性插值方法
过被插函数上若干点(即插值点)做一条折线以近似一条曲线,就可以得到使用分段线性插值方法得到的插值曲线。
其实现方式最为简单,不做过多介绍(即具体的函数形式不在此列出).
(4)分段三次Hermite插值方法
设选取n+1个插值节点:x0,x1,…,x n,记被插函数f(x)在这些点的函数值与导数值
分别为y i,m i. 定义:
α0x=αL x;x0,x1,xϵx0,x1, 0, xϵx1,x n,
β0x=βL x;x0,x1,xϵx0,x1, 0, xϵx1,x n,
αi x αR x;x i−1,x i,xϵx i−1,x i,
αL x;x i,x i+1,xϵx i,x i+1,
0, x∉x i−1,x i+1,
1≤i≤n−1
βi x
βR x;x i−1,x i,xϵx i−1,x i,
βL x;x i,x i+1,xϵx i,x i+1,
0, x∉x i−1,x i+1,
1≤i≤n−1αn x=
0, xϵ[x0,x n−1]
αR x;x n−1,x n,xϵ[x n−1,x n]
βn x=
0, xϵ[x0,x n−1]
βR x;x n−1,x n,xϵ[x n−1,x n]
其中:
αL x;a,b=1+2x−a
b−a
x−b
a−b
2
,
αR x;a,b=1+2x−a
a−b
x−a
b−a
2
,
βL x;a,b=x−a x−b2
,
βR x;a,b=x−b x−a2
.
则分段三次多项式可写为:
Hℎx= y iαi x+m iβi x.
n
i=0
使用三次Hermite插值方法,可以克服线性插值函数不光滑的缺点。
(5)三次自然样条插值方法
设选取n+1个插值节点:x0,x1,…,x n,记被插函数f(x)在这些点的函数值与导数值分别为y i,m i.(注:此时m i为未知量)设ℎi=x i+1−x i.
设:
λ0=1,λi=
ℎi−1
i−1i
,λn=0
μ0=3(y1−y0)
ℎ0
,μi=3
1−λi
ℎi−1
y i−y i−1+
λi
ℎi
y i+1−y i,μn=
3(y n−y n−1)
ℎn−1
在自然边界条件下,可以得到关于m i的封闭的线性代数方程组:
2λ00 1−λ12λ1⋯00
00
⋮⋱⋮
00 00⋯
1−λn−12λn−1
01−λn2
m0
m1
m2
⋮
m n−1
m n
=
μ0
μ1
μ2
⋮
μn−1
μn
这个方程组可以用追赶法快速求解,从而求出m i.
利用分段三次Hermite函数插值的基函数αi x和βi x,可以得到样条插值法得到
的插值多项式:
n
Sℎx= y iαi x+m iβi x.
i=0
三次样条插值也是一种分段三次多项式插值,它在每个插值节点处比分段三次
Hermite插值函数更光滑,具有二阶连续导数,而且不需要被插函数f(x)在节点的
导数的信息。
(三)使用的软件
IDL
(四)数值结果
(1)10次Newton插值多项式的图像(等距节点x i= -5 + i, i=0, 1, 2,…,10)与R(x)函数图像的比较
π), i=0, 1, 2,…,20)与R(x)(2)20次Lagrange插值多项式的图像(节点x i= 5cos(2i+1
42
函数图像的比较
(3)分段线性插值函数图像(等距节点x i= -5 + i, i=0, 1, 2,…,10)与R(x)函数图像的比较
(4)分段三次Hermite插值函数的图像(等距节点x i= -5 + i, i=0, 1, 2,…,10)与R(x)函数图像的比较
(5)三次自然样条插值函数(等距节点x i= -5 + i, i=0, 1, 2,…,10)与R(x)函数图像的比较
(五)数值结果分析
1、使用等距节点对Runge函数进行Newton插值,随着插值节点的增多,生成的插值函数L n(x)在[-5, 5]区间的两端点附近偏差迅速增大;而且因为多项式次数较高(10次),函数的稳定性也很差。
2、与使用等距节点对Runge函数进行Newton插值生成的插值函数L n(x)(下图左)与被插函数的最大偏差相比,使用非等距节点对Runge函数进行Lagrange插值生成的插值函数R n(x)(下图右)与被插函数的最大偏差要小很多!考虑到在插值节点相同时,L n(x)≈R n(x);而在本例中R n(x)是20次多项式,L n(x)只是10次多项式。
由此可见:插值点的选取是否得当对插值多项式的逼近效果好坏有很大的影响。
等距插值节点的newton 插值与非等距插值节点的Lagrange 插值比较图
3、为了避免Runge 现象,使用分段低阶多项式确实是一项很有利的手段。
随着插值节点的增多,分段线性插值函数和相对误差将会越来越小,不过分段线性插值函数的缺点之一是函数不够连续。
4、使用两点三次Hermite 插值方法得到的曲线、三次自然样条插值函数得到的曲线与原函数曲线几乎重合,可见其插值效果的优良性。
图中三次自然样条插值函数的误差较两点三次Hermite 插值方法稍稍大一些的可能原因有:三次自然样条插值时解矩阵方程会引入更大的误差;选取的插值节点比较少。