当前位置:文档之家› 计算方法大作业1 克服Runge现象

计算方法大作业1 克服Runge现象

6
《计算方法》大作业(一)
三次样条插值克服 Runge 现象
出,此时不会出现多项式插值时出现的 Runge 现象,插值函数与原函数拟合程度很高, 插值效果明显提高。
图 3 三次样条插值曲线
经过编程求解可以得到三次样条插值函数 Sn (x) ,最终得到的三次样条插值多项式的 系数如下表。
S ( x)
五、 计算结果
从图 1 与图 2 可以看出,采用多项式插值法时,其等距节点的高次多项式插值函数
在端点会产生剧烈震荡,且震荡随着 n 的增加会越明显,即 Runge 现象。
图 1 n=10 时 Lagrange 插值曲线
图 2 n=5,10,15 时 Lagrange 插值曲线
为了克服 Runge 现象我们采用了三次样条插值(第二类边界条件),从图 3 可以看
条件满足
S (x0 0) S (xn

S
''( x0

0)

S
''(
xn
0), S 0)
'( x0

0)

S
'( xn

0)
.
设 S (x) 在 xi 处的二阶导数值为 M i (i = 0,1,…,n), M i 为待定参数,由式(1)可以得
到 S (x) 在区间[ xi1 , xi ] 上的表达式为
采用三次样条插值,构造函数:
scfit.m
function S=scfit(X,Y,dx0,dxn) N=length(X)-1; H=diff(X);
4
《计算方法》大作业(一)
D=diff(Y)./H; A=H(2:N-1); B=2*(H(1,N-1)+H(2:N)); C=H(2:N); U=6*diff(D); B(1)=B(1)-H(1)/2; U(1)=U(1)-3*(D(1)); B(N-1)=B(N-1)-H(N)/2; U(N-1)=U(N-1)-3*(-D(N)); for k=2:N-1
《计算方法》
上机大作业(一)
题目:三次样条插值法克服 Runge 现象
姓名: 李楠 班级: B1603193 学号: 116031910075
2016 年 11 月
《计算方法》大作业(一)
三次样条插值克服 Runge 现象
一、 题目描述 对于多项式插值,插值多项式的次数随着节点个数的增加而升高,然而高次插值的
(7)
三次样条插值函数的关键是要解式(5)、(6)或(7)所示的方程组,将得到的M i
代入公式(2)中可得到相应的插值函数。 三、 算法框图
输入插值节点个数 n 插值 节点 ,插值点函数值
第一类 输入
计算 选择边界条件
第几类边界条件 第三类
第二类 输入
得到 n-1 阶方程组 式(5)
得到 n 阶方程组 式(7)
设在区间[a, b]上给定 n+1 个节点 xi (a = x0 < x1 < … < xn = b),在节点 xi 处的函数
值为 yi f (xi ) (i = 0,1,…,n).若函数 S (x) 满足以下三个条件: (1)在每个子区间[ xi , xi1 ] (i = 0,1,…,n-1)上, S (x) 是三次多项式;
(2) S (xi ) yi (i = 0,1,…,n); (3)在区间[a, b]上, S (x) 的二阶导数 S ''(x) 连续;
则称 S (x) 为函数 y f (x) 在区间[a, b]上的三次样条插值函数。
由定义知要求出 S (x) ,在每个小区间[ xi , xi1 ] 上要确定 4 个待定系数,而共有 n 个小区间,故要确定 4n 个参数。根据 S (x) 在[a, b]上二阶导数连续,因此有
S (xi 0 ) S x(i 0 )

S
'
(xi

0) S
xi' (
0 )i

S
'
'
x(i

0)S
xi' ' (
0)
1 ,n2, . . . , 1
(1)
这里共有了 3n-3 个条件,再加上条件(2)中的 n+1 个插值条件,共有 4n-2 个条件,
因此还需要 2 个方程才能确定 S (x) .通常可在区间[a, b]的端点 a x0,b xn 上各加一个边
temp=A(k-1)/B(k-1); B(k)=B(k)-temp*C(k-1); U(k)=U(k)-temp*U(k-1); end M(N)=U(N-1)/B(N-1); for k=N-2:-1:1 M(k+1)=(U(k)-C(k)*M(k+2))/B(k); end M(1)=3*(D(1)-dx0)/H(1)-M(2)/2; M(N+1)=3*(dxn-D(N))/H(N)-M(N)/2; for k=0:N-1 S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1)); S(k+1,2)=M(k+1)/2; S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6; S(k+1,4)=Y(k+1); end
由式(1)内点拼接条件,可得
i M i1 2M i i M i1 d j i 1, 2,..., n 1
(3) (4)
其中
i

hi 1 hi1
, hi

i

hi hi 1

,d hi
i
6
yi 1 yi hi
yi


h1i
y1i
/h(1i h i ) .

dn1

1
2


Mn


dn

(6)
2 1


2
2
2
1 M1 d1

M2


d2




n 1
2
n
1


M
n
1

dn1
n
n 2 M n dn
(2)
要得到 S (x) 的表达式,首先要求出 M i 的值,对(2)式求一阶导,得
S '(x)

( xi x)2 2 hi 1
M i1

( x xi1)2 2 hi 1
Mi

yi yi1 hi 1

1 6 (Mi
M i1 )hi1, x [ xi1, xi ]

d n1

n 1 M
n

(2)第二边界条件
(5)
2
《计算方法》大作业(一)
三次样条插值克服 Runge 现象
(3)第三边界条件
2 1

1
2
1
M0 d0

M1


d1




n 1
2
n
1


M
n
1
因此考虑三种边界条件的三弯矩方程分别如下:
(1)第一边界条件
2 1


2
2
2
M1 d1 1M 0

M2


d2





n2
2
n2


M
n2


dn2


n 1
2


M
n
1

S
M i1

( x xi1 )3 6 hi 1
Mi


yi 1

h2 i 1 6
M i1

xi x hi 1


yi

h2 i 1 6
Mi

x
xi1 hi 1
, x [ xi1, xi ]
在给定 n+1 个节点和相应的函数值后构造 n 次的 Lagrange 插值多项式,其等距节 点的高次多项式插值函数在端点会产生剧烈震荡,因此多项式对函数的逼近并不是随着 次数增高而越理想,这种现象就是 Runge 现象。解决 Runge 现象的方法通常有分段线性 插值、三次样条插值等方法。这里采用三次样条插值方法。
x3
x2
x
1
S1 ( x)
-0.34685
0.2086
0.073964
0.038462
S2 (x)
逼近效果往往不理想,会产生 Runge 现象。采用三次样条插值可以有效克服这一现象, 并且取得较好的插值效果。
采用函数 f (x) 1 进行数值插值,插值区间为[-1,1],取不同的节点数 n,在 1 25x 2
区间[-1,1]上取等距节点为插值点,给定节点为 xj=-1+jh,h=0.1,j=0,…,n。再采用三次 样条插值,并比较二者插值效果。 二、 数学原理
5
《计算方法》大作业(一)
三次样条插值克服 Runge 现象
>> x=-1:0.001:1; >> y=1./(25*x.^2+1); >> plot(x,y,'r') >> hold on >>plot(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,x9,y9,x10,y10,x,y,'-')
相关主题