数值分析报告上机实验报告(插值)

数值分析第一次上机练习实验报告

——Lagrange插值与三次样条插值

一、 问题的描述

1ix??1?设f?x??, ,取,i?0,1,2,...,10.试求出10次Lagrange插x??1,1??i1?9x25值多项式L10?x?和三次样条插值函数S?x?(采用自然边界条件),并用图画出f?x?,L10?x?,

S?x?.

二、 方法描述——Lagrange插值与三次样条插值

我们取xi??1?i1,i?0,1,2,...,10,通过在xi点的函数值f?xi??来对原函数251?9xi进行插值,我们记插值函数为g?x?,要求它满足如下条件:

g?xi??f?xi??1,i?0,1,2,...,10 (1) 21?9xi我们在此处要分别通过Lagrange插值(即多项式插值)与三次样条插值的方法对原函数

f?x??1进行插值,看两种方法的插值结果,并进行结果的比较。 21?9x10次的Lagrange插值多项式为:

L10?x???yili?x? (2)

i?010其中:

yi?f?xi??以及

1,i?0,1,2,...,10

1?9xi2li?x???x?x0?...?x?xi?1??x?xi?1?...?x?xn?,?xi?x0?...?xi?xi?1??xi?xi?1?...?xi?xn?i?0,1,2,...,10

我们根据(2)进行程序的编写,我们可以通过几个循环很容易实现函数的Lagrange插值。

理论上我们根据区间??1,1?上给出的节点做出的插值多项式Ln?x?近似于f?x?,而多

项式Ln?x?的次数n越高逼近f?x?的精度就越好。但实际上并非如此,而是对任意的插值节点,当n???的时候Ln?x?不一定收敛到f?x?;而是有时会在插值区间的两端点附近

1 / 6

会出现严重的Ln?x?偏离f?x?的现象,即所谓的Runge现象。因此用高次插值多项式因而人们通常在选择插值方式的时候不用高次多项Ln?x?近似f?x?的效果并不总是好的,

式插值,而用分段低次插值,而这样的插值效果往往是非常好的,能够克服高次多项式插值的弱点,达到令人满意的效果。

分段低次插值包括分段线性插值、分段三次Hermite插值、三次样条插值等。前两种插值函数都具有一致收敛性,但是光滑性较差,而在实际问题中我们往往要求函数具有二阶光滑度,即有二阶连续导数。而对第三种插值方式,我们得到的是一个样条曲线,它是由分段三次曲线拼接而成,在连接点(即样点)上二阶导数连续。

我们记三次样条插值函数为S?x?,它在每个小区间??xj,xj?1??,j?0,1,2,...,9上是三次函数,因此在每个区间上需要确定4个参数,总共有10个小区间,因此共需确定40个未知

参数。首先我们有插值条件:

S?xj??yj?1,21?9xjj?0,1,2,...,10 (3)

其次在每个节点xj,j?1,2,...,9上满足连续性条件:

S?xj?0??S?xj?0?,S'?xj?0??S'?xj?0?,S''?xj?0??S''?xj?0? (4)

此外在端点处满足自然边界条件:

S''?x0??S''??1??0,S''?x10??S''?1??0 (5)

我们假设S''xj?Mj,j?0,1,2,...,10。则在每个小区间??xj,xj?1??,j?0,1,2,...,9上:

??S?x??Mj其中:

?xj?1?x?36hj?Mj?1?x?x?j36hj??xj?1?x??x?xjMjh2Mj?1h2jj(6) ??yj???yj?1?????h??h66j????jj?0,1,2,...,9

x???xj,xj?1??,及

hj?xj?1?xj

我们利用边界条件(3)(4)(5)可以得到:

?jMj?1?2Mj??jMj?1?dj,j?1,2,...,9 (7)

其中:

?j?hj?1hj?1?hj,?j?hjhj?1?hj

2 / 6

以及

f?xj,xj?1??f?xj?1,xj??????6f?x,x,x? dj?6?j?1jj?1?hj?1?hj两端点处的边界条件为:

M0?M10?0 (8)

将边界条件写成矩阵形式为:

?2?0???12?1???????????92???10?其中根据自然边界条件(8)有:

??M0??d0??????M??1??d1?????????????? (9)

????????9??M9??d9??????????2??M10??d10???0??10?0,d0?d10?0

我们解方程(9)就可以得到Mj,j?0,1,...,10,将他们代入(6)就可以得到各段区间上的S?x?的值。

三、 方案设计

我们通过编写Matlab程序来进行10次Lagrange插值与三次样条插值的工作。在我们的程序文件中interplotion.m文件是主程序文件;L10.m文件是计算10次Lagrange插值多项式

L10?x?的子程序文件,给它任一个x???1,1?,此程序将返回L10?x?的值;Mspline.m是根

据(9)计算各节点二阶导数值Mj,j?0,1,2,...,10的子程序文件,它将会返回在自然边界条件下的各节点的二阶导数值Mj;然后spline.m是根据Mj以及(6)计算三次样条插值函数

S?x?的子程序文件。然后运行主程序将给出三幅曲线图,分别是f?x?与L10?x?曲线,

f?x?与S?x?曲线,以及f?x?、L10?x?与S?x?三条曲线共同画在一幅图上得到的图象。

解决这个问题的思路很简单,按部就班的来就可以。首先我们计算各节点xi上的函数值yi?f?xi?以备后用,然后调用Mspline.m计算Mj,j?0,1,2,...,10。随后我们给出一系列x的值,计算f?x?,并分别调用L10.m与spline.m分别计算L10?x?与S?x?。然后根据我们得到的数据绘图观察插值结果。具体程序的实现可参见所给程序的相关注释。

3 / 6

四、 计算结果及其分析

下面是我们根据程序计算结果得到的数据,其中分别给出了在各典型x处的的原函数的值f?x?、Lagrange插值结果L10?x?与样条插值结果S?x?;以及绝对误差L10?x??f?x?和

L10?x??f?x?S?x??f?x?,。由于在两端点处进行Lagrange插值S?x??f?x?,相对误差

f?x?f?x?插值的时候可能出现Runge现象,因此我们在两端点附近多给了几个点的数据。 x f(x) L10(x) S(x) 误差 L10(x)-f(x) 0.00000 0.31228 0.46122 0.49980 0.46841 0.39716 0.30781 0.21547 0.13001 0.05725 0.00000 -0.07474 0.00000 0.02614 0.00000 -0.01314 0.00000 0.00504 0.00000 0.00504 0.00000 -0.01314 0.00000 0.02614 0.00000 -0.07474 0.00000 0.05725 0.13001 0.21547 0.30781 0.39716 0.46841 相对误差 (L10(x)-f(x))/ f(x) 0.00000 3.01147 4.28677 4.47440 4.03656 3.29244 2.45313 1.64974 0.95560 0.40368 0.00000 -0.40433 0.00000 0.08494 0.00000 -0.02378 0.00000 0.00549 0.00000 0.00549 0.00000 -0.02378 0.00000 0.08494 0.00000 -0.40433 0.00000 0.40368 0.95560 1.64974 2.45313 3.29244 4.03656 误差 S(x)-f(x) 0.00000 0.00040 0.00064 0.00075 0.00076 0.00069 0.00057 0.00042 0.00026 0.00012 0.00000 0.00000 0.00000 -0.00129 0.00000 0.00380 0.00000 -0.00227 0.00000 -0.00227 0.00000 0.00380 0.00000 -0.00129 0.00000 0.00000 0.00000 0.00012 0.00026 0.00042 0.00057 0.00069 0.00076 相对误差 (S(x)-f(x))/ f(x) 0.00000 0.00383 0.00592 0.00669 0.00651 0.00569 0.00452 0.00320 0.00192 0.00082 0.00000 0.00000 0.00000 -0.00419 0.00000 0.00689 0.00000 -0.00247 0.00000 -0.00247 0.00000 0.00689 0.00000 -0.00419 0.00000 0.00000 0.00000 0.00082 0.00192 0.00320 0.00452 0.00569 0.00651 -1.00 0.10000 0.10000 0.10000 -0.98 0.10370 0.41597 0.10409 -0.96 0.10759 0.56881 0.10823 -0.94 0.11170 0.61150 0.11245 -0.92 0.11604 0.58445 0.11680 -0.90 0.12063 0.51779 0.12131 -0.88 0.12548 0.43329 0.12604 -0.86 0.13061 0.34608 0.13103 -0.84 0.13605 0.26605 0.13631 -0.82 0.14181 0.19906 0.14193 -0.80 0.14793 0.14793 0.14793 -0.70 0.18484 0.11010 0.18484 -0.60 0.23585 0.23585 0.23585 -0.50 0.30769 0.33383 0.30640 -0.40 0.40984 0.40984 0.40984 -0.30 0.55249 0.53935 0.55629 -0.20 0.73529 0.73529 0.73529 -0.10 0.91743 0.92247 0.91516 0.00 1.00000 1.00000 1.00000 0.10 0.91743 0.92247 0.91516 0.20 0.73529 0.73529 0.73529 0.30 0.55249 0.53935 0.55629 0.40 0.40984 0.40984 0.40984 0.50 0.30769 0.33383 0.30640 0.60 0.23585 0.23585 0.23585 0.70 0.18484 0.11010 0.18484 0.80 0.14793 0.14793 0.14793 0.82 0.14181 0.19906 0.14193 0.84 0.13605 0.26605 0.13631 0.86 0.13061 0.34608 0.13103 0.88 0.12548 0.43329 0.12604 0.90 0.12063 0.51779 0.12131 0.92 0.11604 0.58445 0.11680 4 / 6

0.94 0.11170 0.61150 0.11245 0.96 0.10759 0.56881 0.10823 0.98 0.10370 0.41597 0.10409 1.00 0.10000 0.10000 0.10000

0.49980 0.46122 0.31228 0.00000 4.47440 4.28677 3.01147 0.00000 0.00075 0.00064 0.00040 0.00000 0.00669 0.00592 0.00383 0.00000 尽管从数据可以看出一些端倪,但是通过图象我们更能清楚地看到最终插值结果的定性情况。首先我

们给出

f?x?与L10?x?曲线:

其中蓝色的曲线代表f?x?曲线,绿色的曲线代表L10?x?曲线。可见此时两者之间具有很大的差别,尤其在端点附近会出现严重的L10?x?偏离f?x?的现象,即出现了所谓的Runge现象。而此时f?x?曲线与我们用样条插值得到的S?x?的曲线为:

5 / 6

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4