多项式差值方法上机习题报告

合集下载

插值法实验报告

插值法实验报告

实验二插值法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--插值法

数值分析实验报告--实验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章 多项式插值方法

第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 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 插值方法稍稍大一些的可能原因有:三次自然样条插值时解矩阵方程会引入更大的误差;选取的插值节点比较少。

相关文档
最新文档