数值分析实验报告-插值、三次样条Word版
数值分析实验报告2
实验报告
实验项目名称函数逼近与快速傅里叶变换实验室数学实验室
所属课程名称数值逼近
实验类型算法设计
实验日期
班级
学号
姓名
成绩
512*x^10 - 1280*x^8 + 1120*x^6 - 400*x^4 + 50*x^2 - 1
并得到Figure,图像如下:
实验二:编写程序实现[-1,1]上n阶勒让德多项式,并作画(n=0,1,…,10 在一个figure中)。要求:输入Legendre(-1,1,n),输出如a n x n+a n-1x n-1+…多项式。
在MATLAB的Editor中建立一个M-文件,输入程序代码,实现勒让德多项式的程序代码如下:
function Pn=Legendre(n,x)
syms x;
if n==0
Pn=1;
else if n==1
Pn=x;
else Pn=expand((2*n-1)*x*Legendre(n-1)-(n-1)*Legendre(n-2))/(n);
end
x=[-1:0.1:1];
A=sym2poly(Pn);
yn=polyval(A,x);
plot (x,yn,'-o');
hold on
end
在command Windows中输入命令:Legendre(10),得出的结果为:
Legendre(10)
ans =
(46189*x^10)/256 - (109395*x^8)/256 + (45045*x^6)/128 - (15015*x^4)/128 + (3465*x^2)/256 - 63/256
并得到Figure,图像如下:
实验三:利用切比雪夫零点做拉格朗日插值,并与以前拉格朗日插值结果比较。
数值计算方法( 三次样条插值)
y j 1 ( x x j 1 )( y j y j 1 ) /( x j x j 1 )
分段线性插值
算法: 1.输入xi , yi (i 0,1,...,n) 2.按k 1,2,...,m做 (1)输入插值点u (2)对于j 1,2,...,n做 如果u x j 则
两边同除 xi 1 xi 1 ( xi 1 xi xi xi 1 ) hi 1 hi hi hi 得 M i 1 2 M i M i 1 6 f [ xi 1 , xi , xi 1 ] hi 1 hi hi 1 hi 即得
i M i 1 2M i i M i 1 6 f [ xi 1 , xi , xi 1 ]
其中I j
x xj x j 1 x j
y j 1
x x j 1 x j x j 1
yj
y j 1 ( x x j 1 )( y j y j 1 ) /( x j x j 1 )
缺点:I(x)连续,但不光滑,精度较低,仅在
1 j n
2M 0 M 1 6 f [ x0 , x0 , x1 ]
三次样条插值
同理(2)式中令i n得 M n 1 2M n 6 f [ xn 1 , xn , xn ] 即有 2M 0 M 1 6 f [ x0 , x0 , x1 ] ) i M i 1 2M i i M i 1 6 f [ xi 1 , xi , xi 1 ] (i 1,2,...,n 1 M 2M 6 f [ x , x , x ] n n 1 n n n 1
“数值分析”中的三次样条插值实践教学探讨
“数值分析”中的三次样条插值实践教学探讨作者:徐圣兵
来源:《广东工业大学学报(社会科学版)》2009年第05期
摘要:文章阐述了“数值分析”中的三次样条插值教学中加入实践教学环节的必要性,并通过具体实例介绍了作者在三次样条插值教学中进行了实践教学的尝试和探讨,旨在对今后的三次样条插值的教学起到一定的促进作用。
关键词:数值分析课程三次样条样条插值实践教学创新能力
中图分类号:G642.0文献标识码:A
高次多项式插值过程具有“龙格”现象和数值不稳定的缺点,而利用分段低次多项式,在分段处具有一定光滑性的样条插值过程有较好的稳定性和收敛性。20世纪60年代中期,样条与计算机辅助几何设计相结合,在外形设计(汽车、飞机、船等)方面得到了成功的应用。同时,样条理论研究亦逐步深入,后被作为函数逼近的有力工具。针对有关文章中指出的数值分析教学中存在的问题,…笔者在广东工业大学应用数学学院的信息与计算科学(信息计算)专业班上尝试了“数值分析”课程中三次样条插值的实践教学探讨,在教学探索过程中有收获,有心得,也有困难和困惑,现给予阐述。愿与同行交流,共同建立一个数值分析实践教学平台。
一、三次样条插值教学中存在的问题
一是教材的三次样条理论性过强,教学与实际结合较少。在传统的三次样条教学中,大多数教师只重视课堂教学,仅仅注重对三次样条理论知识的讲解,而很少开设或不开设上机实验,忽略了三次基本理论的应用和实践教学,结果导致三次样条学起来抽象难懂,从而抑制了学生的学习积极性,难于激发学生积极思考,影响了学生创新意识和创新能力的培养。因此,在三次样条的教学中适当引入实践环节已成为当务之急。
数值分析上机实验报告(插值)
数值分析第一次上机练习实验报告
——Lagrange 插值与三次样条插值
一、 问题的描述
设()2119f x x =
+, []1,1x ∈-,取15
i
i
x =-+,0,1,2,...,10i =.试求出10次Lagrange 插值多项式()10L x 和三次样条插值函数()S x (采用自然边界条件),并用图画出()f x ,()10L x ,
()S x .
二、 方法描述——Lagrange 插值与三次样条插值
我们取15
i i
x =-+
,0,1,2,...,10i =,通过在i x 点的函数值()2119i i f x x =+来对原函数
进行插值,我们记插值函数为()g x ,要求它满足如下条件:
()()2
1
,0,1,2,...,1019i i i g x f x i x ==
=+ (1)
我们在此处要分别通过Lagrange 插值(即多项式插值)与三次样条插值的方法对原函数
()2
1
19f x x
=
+进行插值,看两种方法的插值结果,并进行结果的比较。 10次的Lagrange 插值多项式为:
()()10
100
i i i L x y l x ==∑ (2)
其中:
()2
1
,0,1,2,...,1019i i i
y f x i x ==
=+ 以及
()()()()()()()()()
011011......,0,1,2,...,10......i i n i i i i i i i n x x x x x x x x l x i x x x x x x x x -+-+----=
=----
我们根据(2)进行程序的编写,我们可以通过几个循环很容易实现函数的Lagrange 插值。
数值分析三次样条插值
9
其中
M M M d i
2
i1
i i
,i 0,1, 2, , n 1,
i1
i
h h
i1 ,
i
i
i 1 i ,
h h h h i1
i
i1
i
d x x x 6 f [ ,
].
i
i1 i, i1
上述方程组是关于 Mi 的方程组,有 n 1 个未知数,但只有 n 1
5
Sk (x)是[xk , xk 1 ]上的三次样条插值多项 式,应有4个待定的系数 即要确定 S(x)必须确定 4n个待定的系数 少两个条件 并且我们不能只对插值函数在中间节点的状态进行限制
也要对插值多项式在两端点的状态加以要求
也就是所谓的边界条件:
第一类(转角)边界条件: S(x0 0) m0 S(xn 0) mn------(5)
则对任意
x 有[a,b]
f
x
sx
5 384
M 4h4
,
f
x
s x
1 8
M 4h2
,
f
x
s x
1 24
M 4h3
f
x s x
1
2
M 4h
计算方法大作业——三次样条插值
hn n 1 n , , hn h1
dn
6 y1 yn yn yn1 。 hn h1 h1 hn
三次样条插值函数的关键是要解式(7)、(8)或(9)所示的方程组,将得到的 Mi 代入
公式(6)中可得到相应的插值函数。其计算流程如图 7 所示。
S ( xi ) S ( xi ), ( xi ) S ( xi ), S S ( x ) S ( x ), i i i 1, 2, , n 1
(5)
再加上条件(2)的 n+1 个方程, 共有 4n-2 个方程,因此还需要增加两个条件才可以确定 出 4n 个待定参数。所增加的条件称为边界条件或端点条件。常用的三种边界条件为: ①已知 f (a), f (b) ;②已知 f (a) f (b) ;③已知 f(x)是以 T=b-a 为周期的周期函数。 设 S(x)在节点 xi 处的二阶导数值为 Mi (i = 0,1,…,n), Mi 为待定参数。 根据公式(5)可 以得到 S(x)在区间[xi-1, xi]上的表达式为
(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)的曲线画在同一个
数值分析实验报告2——Runge现象
数值分析课程实验报告——插值逼近
题目一.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 现象。
关于三次样条插值函数的学习报告
关于三次样条插值函数的学习报告
三次样条插值函数是一种广泛应用于数值分析领域的插值方法,用于
逼近一组已知数据点构成的函数。在这篇学习报告中,我将介绍三次样条
插值函数的定义、原理、应用及其优缺点,并通过实际例子说明其如何在
实际问题中使用。
一、三次样条插值函数的定义
三次样条插值函数是指用分段三次多项式对一组已知数据点进行插值
的方法。具体来说,对于已知数据点
$(x_0,y_0),(x_1,y_1),...,(x_n,y_n)$,三次样条插值函数会在每相邻
两个数据点之间构造一个三次多项式,使得这些多项式在相应的数据点上
满足插值条件,并且在相邻两个多项式之间满足一定的连续性条件。
二、三次样条插值函数的原理
三次样条插值函数的原理是利用三次多项式在每个数据点上的取值和
导数值来确定三次多项式的系数,从而构造出满足插值条件和连续性条件
的插值函数。具体来说,对于每个相邻的数据点
$(x_i,y_i),(x_{i+1},y_{i+1})$,我们可以构造一个三次多项式
$S_i(x)$,满足以下条件:
1.$S_i(x_i)=y_i$,$S_i(x_{i+1})=y_{i+1}$,即在数据点上满足插
值条件;
2.$S_i'(x_{i+1})=S_{i+1}'(x_{i+1})$,
$S_i''(x_{i+1})=S_{i+1}''(x_{i+1})$,即在数据点上满足连续性条件。
通过求解上述条件,可以得到每个相邻数据点之间的三次多项式
$S_i(x)$,从而得到整个插值函数。
三、三次样条插值函数的应用
三次样条插值函数在数值分析领域有广泛的应用,尤其在曲线拟合、
第八节三次样条插值
i
hi
hi hi1
,
i
hi
hi1 hi1
gi
hi
6 hi1
(
f [xi , xi1]
f [xi1, xi ])
内江师范学院数学与信息科学学院 吴开腾 制作
即有
h1 1.5, h2 1, h3 1
f [x0 , x1] 0.75, f [x1, x2 ] 2, f [x2, x3] 8 于是,有
第八节 三次样条插值
一、问题的提出
分段低次插值虽然具有计算简单、稳定性好、收 敛性有保证且容易在计算机上实现等特点,但它 只能保证各小曲线在连接点上的连续性,却不能 保证整条曲线的光滑性,这就不能满足某些工程 技术上的要求。下面将要介绍的样条插值方法构 造的样条函数可以保留分段低次插值得优点,又 提高了插值函数的光滑性。如今在许多领域得到 了广泛的应用,形成了极其重要的分支。
内江师范学院数学与信息科学学院 吴开腾 制作
mi1 2mi hi1
2mi
mi1 hi
3
yi
yi1 h2
i 1
wk.baidu.com
yi1 hi2
yi
令
i
hi1 hi1 hi
, i
3 (1i )
yi yi1 hi1
i
yi1 yi hi
则有
f [xi1, xi ]
三次样条插值的编程
三次样条插值的编程
一、概念
三次样条插值是一种数值分析方法,用于在给定的数据点上构造一个光滑的曲线或函数。它通过在相邻数据点之间拟合三次多项式来实现插值,以达到光滑曲线的效果。
二、原理
1. 插值多项式的选择
三次样条插值使用三次多项式作为插值函数。在每个相邻数据点之间,插值多项式的系数由相邻数据点的函数值和导数值决定。
2. 条件限制
为了保证插值曲线的光滑性,三次样条插值要求插值函数在给定数据点处的一阶导数值相等。这个要求可以通过构造一个三对角矩阵来实现。
3. 矩阵方程的求解
通过将条件限制转化为矩阵方程,可以求解出插值多项式的系数。然后,将系数代入插值多项式中,就可以得到三次样条插值的函数表达式。
三、编程实现
下面以Python为例,介绍如何使用编程实现三次样条插值。
1. 导入所需库
我们需要导入numpy和scipy库,它们提供了许多数值计算和插值函数。
```python
import numpy as np
from scipy.interpolate import CubicSpline
```
2. 定义数据点
接下来,我们定义一些数据点。假设我们有一组x和y的数据。
```python
x = np.array([1, 2, 3, 4, 5])
y = np.array([3, 5, 4, 6, 8])
```
3. 进行插值计算
利用CubicSpline函数可以进行三次样条插值的计算。
```python
cs = CubicSpline(x, y)
```
4. 绘制插值曲线
我们可以使用matplotlib库绘制出插值曲线。
《数值分析》上机实验报告
数值分析上机实验报告
《数值分析》上机实验报告
1.用Newton 法求方程 X 7-X 4+14=0
在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据:
设函数在有限区间[a ,b]上二阶导数存在,且满足条件
{}αϕ上的惟一解在区间平方收敛于方程所生的迭代序列
迭代过程由则对任意初始近似值达到的一个中使是其中上不变号
在区间],[0)(3,2,1,0,)
(')
()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20
)()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a
b c f x f b a x f b f x f k k k k k k ==-
==∈≤-≠>+
令
)9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3
2
2
5
333647>⋅''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f
故以1.9为起点
⎪⎩
⎪⎨
⎧
='-
=+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。
1.2 C语言程序原代码:
#include
(完整版)数值分析插值法
第二章插值法
2.在区间[-1,1]上分别取n=10,20用两组等距节点对龙哥函数f(x)=1/(1+25*x^2)做多项式插值及三次样条插值,对每个n值,分别画出插值函数及f(x)的图形。
(1)多项式插值
①先建立一个多项式插值的M-file;
输入如下的命令(如牛顿插值公式):
function [C,D]=newpoly(X,Y)
n=length(X);
D=zeros(n,n)
D(:,1)=Y'
for j=2:n
for k=j:n
D(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1));
end
end
C=D(n,n);
for k=(n-1):-1:1
C=conv(C,poly(X(k)))
m=length(C);
C(m)= C(m)+D(k,k);
end
②当n=10时,我们在命令窗口中输入以下的命令:
clear,clf,hold on;
X=-1:0.2:1;
Y=1./(1+25*X.^2);
[C,D]=newpoly(X,Y);
x=-1:0.01:1;
y=polyval(C,x);
plot(x,y,X,Y,'.');
grid on;
xp=-1:0.2:1;
z=1./(1+25*xp.^2);
plot(xp,z,'r')
得到插值函数和f(x)图形:
③当n=20时,我们在命令窗口中输入以下的命令:clear,clf,hold on;
X=-1:0.1:1;
Y=1./(1+25*X.^2);
[C,D]=newpoly(X,Y);
x=-1:0.01:1;
y=polyval(C,x);
数值分析作业-三次样条插值
数值计算方法作业
实验4.3 三次样条差值函数
实验目的:
掌握三次样条插值函数的三弯矩方法。
实验函数:
dt e
x f x
t ⎰
∞
--
=
2
221)(π
实验容:
(1) 编程实现求三次样条插值函数的算法,分别考虑不同的边界条件; (2) 计算各插值节点的弯矩值;
(3) 在同一坐标系中绘制函数f(x),插值多项式,三次样条插值多项式的曲
线比较插值结果。
实验4.5 三次样条差值函数的收敛性
实验目的:
多项式插值不一定是收敛的,即插值的节点多,效果不一定好。对三次样条插值函数如何呢?理论上证明三次样条插值函数的收敛性是比较困难的,通过本实验可以证明这一理论结果。
实验容:
按照一定的规则分别选择等距或非等距的插值节点,并不断增加插值节点的个数。
实验要求:
(1) 随着节点个数的增加,比较被逼近函数和三样条插值函数的误差变化情
况,分析所得结果并与拉格朗日插值多项式比较;
(2) 三次样条插值函数的思想最早产生于工业部门。作为工业应用的例子,考
虑如下例子:某汽车制造商根据三次样条插值函数设计车门曲线,其中一
算法描述:
拉格朗日插值:
其中是拉格朗日基函数,其表达式为:()
∏
≠=--=n
i j j j i j
i x x x x x l 0)
()(
牛顿插值:
)
)...()(](,...,,[....
))(0](,,[)0](,[)()(1102101210100----++--+-+=n n n x x x x x x x x x x f x x x x x x x f x x x x f x f x N
其中⎪⎪⎪⎪⎪
数值分析-插值法
数值分析-插值法
我们能得到⼀个函数f在区间[a,b]上某些点的值或者这些点上的⾼阶导数
我们就能通过插值法去得到⼀个函数g,g与f是⾮常相近的
⼀般来说g分为三类,⼀类是n次多项式 a n*x n +a n-1*x n-1 + .......+a0,⼀类是三⾓多项式,最后⼀类是分段n次多项式
多项式插值
这个可以说是最简单的插值了
对于a n*x n +a n-1*x n-1 + .......+a0,我们有n+1个未知数,我只需要知道n+1个点的函数值就可以解出这n+1个未知数将解出的值带⼊即可
优点:简单粗暴
缺点:要解n+1个⽅程,时间复杂度较⾼,n不好确定,若n过⼤,容易过拟合,若n过⼩,容易⽋拟合
拉格朗⽇插值
先说⼀阶多项式
我们有两点式
f(x) = y k*(x k+1 - x) / (x k-x k+1) + y k+1*(x-x k) / (x k+1 - x k)
此两点式可以看做∂ * y k + (1-∂) * y k+1
那么⾃然的在x=x k的时候 ∂=0 在x=x k+1的时候∂=1
这⾥的∂其实是与x相关的⼀阶多项式
再说⼆阶多项式
对于⼀个⼆次函数,我们有三个点(x k-1,y k-1) ,(x k,y k) ,(x k+1,y k+1)
我们有l k-1,l k,l k+1
f(x) = l k-1*y k-1 + l k*y k + l k+1*y k+1
其中l是与x相关的⼆次多项式
我们可以把l当作基函数
这样的话就有
x = x k-1 时l k-1 = 1, l k=0, l k+1 = 0
三次样条插值
数值分析实验报告
实验名称:三次样条插值算法系别:计算机系
一:思路
利用第一种边界条件情况通过书中的公式,得出M矩阵,再代入公式得出分段函数。二:实验代码
三:运行结果测试
书上例题:
课后习题第20题运行测试:
数值分析实验报告-插值、三次样条
实验报告:牛顿差值多项式&三次样条
... . (1)
问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数f (x)---作多项式插
25 x 2
值及三次样条插值对每个n值,分别画出插值函数矽(x)的图形。
实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。应用所编程序解决实际算例。
实验要求:
1.认真分析问题,深刻理解相关理论知识并能熟练应用;
2.编写相关程序并进行实验;
3.调试程序,得到最终结果;
4.分析解释实验结果;
5.按照要求完成实验报告。
实验原理:
详见《数值分析第5版》第二章相关容。
实验容:
(1)牛顿插值多项式
1.1 当 n=10 时:
在Matlab下编写代码完成计算和画图。结果如下:
代码:
clear all
clc
x1=-1:0.2:1;
y1=1./(1+25.*x1.八2);
n=length(x1);
f=y1(:);
for j=2:n
for i=n:-1:j
f(i) = (f(i)-f(i-1))/(x1(i)-x1(i-j+1));
end
end
syms F x p;
F(1)=1;p(1)=y1(1);
for i=2:n
F(i)=F(i-1)*(x-x1(i-1));
p(i)=f(i)*F(i);
end
syms P
P=sum(p);
P10=vpa(expand(P),5);
x0=-1:0.001:1;
y0=subs(P,x,x0);
y2=subs(1/(1+25火x八2),x,x0);
plot(x0,y0,x0,y2)
grid on
xlabel('x')
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告:牛顿差值多项式&三次样条
问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数21()25f x x
作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。
实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。应用所编程序解决实际算例。
实验要求:
1. 认真分析问题,深刻理解相关理论知识并能熟练应用;
2. 编写相关程序并进行实验;
3. 调试程序,得到最终结果;
4. 分析解释实验结果;
5. 按照要求完成实验报告。
实验原理:
详见《数值分析 第5版》第二章相关内容。
实验内容:
(1)牛顿插值多项式
1.1 当n=10时:
在Matlab 下编写代码完成计算和画图。结果如下:
代码:
clear all
clc
x1=-1:0.2:1;
y1=1./(1+25.*x1.^2);
n=length(x1);
f=y1(:);
for j=2:n
for i=n:-1:j
f(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));
end
end
syms F x p ;
F(1)=1;p(1)=y1(1);
for i=2:n
F(i)=F(i-1)*(x-x1(i-1));
p(i)=f(i)*F(i);
end
syms P
P=sum(p);
P10=vpa(expand(P),5);
x0=-1:0.001:1;
y0=subs(P,x,x0);
y2=subs(1/(1+25*x^2),x,x0);
plot(x0,y0,x0,y2)
grid on
xlabel('x')
ylabel('y')
P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36*x^4+2.0 202e-14*x^3-16.855*x^2-6.6594e-16*x+1.0
并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。
Fig.1 牛顿插值多项式(n=10)函数和原函数图形
从图形中我们可以明显的观察出插值函数在两端点处发生了剧烈的波动,产生了极大的误差,即龙格现象,当n=20时,这一现象将更加明显。
1.2 当n=20时:
对n=10的代码进行修改就可以得到n=20时的代码。将“x1=-1:0.2:1;”改为“x1=-1:0.1:1;”即可。运行程序,我们得到n=20时的牛顿插值多项式,结果为:P20(x)= 260188.0*x^20 - 1.0121e6*x^18 + 2.6193e-12*x^17 + 1.6392e6*x^16 + 2.248e-11*x^15 - 1.4429e6*x^14 - 4.6331e-11*x^13 + 757299.0*x^12 + 1.7687e-11*x^11 - 245255.0*x^10 + 2.1019e-11*x^9 + 49318.0*x^8 + 3.5903e-12*x^7 - 6119.2*x^6 - 1.5935e-12*x^5 + 470.85*x^4 + 1.3597e-14*x^3 - 24.143*x^2 - 1.738e-14*x + 1.0
同样的,这里得到了该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.2)。
Fig.2牛顿插值多项式(n=20)函数和原函数图形
当n=20时,端点处发生了更加剧烈的震荡。表明随着分段不断增加,牛顿插值多项式与原函数的误差不但没有减少,反而变得更大了。
(2)三次样条
2.1 当n=10时:
在Matlab下编写代码完成计算和画图。结果如下:
代码:
clear all
clc
x1=-1:0.2:1;
y1=1./(1+25.*x1.^2);
syms x
m1=subs(diff(1/(1+25*x^2)),-1);
m2=subs(diff(1/(1+25*x^2)),1);
n=length(x1);
syms a b h f d
for i=1:n-1
h(i)=x1(i+1)-x1(i);
f(i)=(y1(i+1)-y1(i))/(x1(i+1)-x1(i));
end
a(n)=1;
b(1)=1;
for i=2:n-1
a(i)=h(i-1)/(h(i-1)+h(i));
b(i)=h(i)/(h(i-1)+h(i));
end
d(1)=6/h(1)*(f(1)-m1);
d(n)=6/h(n-1)*(m2-f(n-1));
for i=2:n-1
d(i)=6*(f(i)-f(i-1))/(h(i-1)+h(i));
end
D=d';
A=2.*eye(n);
for i=1:n-1
A(i,i+1)=b(i);
A(i+1,i)=a(i+1);
end
M=A^-1*D;
for i=1:n-1
s(i)=M(i)*(x1(i+1)-x)^3/h(i)/6+M(i+1)*(x-x1(i))^3/h(i)/6+(y1(i)-M(i)*h(i)^2/6)*(x1( i+1)-x)/h(i)+(y1(i+1)-M(i+1)*h(i)^2/6)*(x-x1(i))/h(i);
end
S=vpa(expand(s.'),5);
for i=1:n-1
x0=-1-(2/(n-1))+(2/(n-1))*i:0.001:-1+(2/(n-1))*i;
y0=subs(s(i),x,x0);
plot(x0,y0)
hold on
end
y2=subs(1/(1+25*x^2),x,-1:0.001:1);
plot(-1:0.001:1,y2,'r')
grid on
xlabel('x')
ylabel('y')
S即为我们所求的三次样条,其结果为:
S10(x) =
0.08225*x^3+0.36953*x^2+0.56627*x+0.31745[-1,-0.8]
0.96279*x^3+2.4828*x^2+2.2569*x+0.76829[-0.8,-0.6]
0.81773*x^3+2.2217*x^2+2.1002*x+0.73696[-0.6,-0.4]
13.413*x^3+17.336*x^2+8.1461*x+1.5431[-0.4,-0.2]
-54.471*x^3-23.394*x^2-1.8741e-17*x+1.0[-0.2,0]
54.471*x^3-23.394*x^2+1.9683e-17*x+1.0[0,0.2]
-13.413*x^3+17.336*x^2-8.1461*x+1.5431[0.2,0.4]
-0.81773*x^3+2.2217*x^2-2.1002*x+0.73696[0.4,0.6]
-0.96279*x^3+2.4828*x^2-2.2569*x+0.76829[0.6,0.8]
-0.08225*x^3+0.36953*x^2-0.56627*x+0.31745[0.8,1]并且这里可以得到该三次样条的在[-1,1]上的图形,并和原函数进行对比(见Fig.3)。