埃尔米特(Hermite)插值
1.6 埃尔米特插值
(2)基函数方法
基函数方法:
0 (x0 ) 1, 0 (x1 ) 0 (x0 ) 0 1 (x1 ) 1, 1 (x0 ) 1(x0 ) 0 0 (x0 ) 1, 0 (x0 ) 0 (x1 ) 0
2
0
( x)
1
x x1
x0 x0
2
1 ( x)
2
x x0 x1 x0
0
(
x)
(
x
x0 )(x (x1 x0
)2
x1
)
第三种解法
(3)待定系数法
p2(x) ax2 bx c p2(x) 2ax b
aaxx1022
bx0 bx1
c c
y0 y1
2ax0 b y0
题4
不同插值节点,同一个插值节点上仅有函数值(或 者一阶导数值)
设x0 x2,求作次数 2的多项式p(x),使满足条件 p(x0 ) y0, p(x1) y1, p(x2 ) y2
由此可导出(29)式
2,数学描述
设在节点 a x0 x1 xn b上,
y j f (x j ) , mj f (x j ) ( j 0, 1, , n)
要求插值多项式 H (x) 满足条件 H (x j ) y j , H (x j ) m j ( j 0, 1, , n)
Hermite插值问题常用解法
(1)基函数构造法 (2)待定系数法 (3)基于承袭性
根据有函数值的插值节点条件构造插 值多项式(泰勒,拉格朗日,牛顿等), 再结合其他插值节点的导数条件构造一个 附加项,由待定系数法给出系数,从而得 到所求插值多项式
例:按下表求Hermite插值多项式
解法一:由于插值条件有5
2.4埃尔米特插值
2 1
x − x0 x −x 0 1
2
2
β 0 ( x ) = ( x − x0 ) ⋅ l02 ( x ) = ( x − x0 ) x − x1 x −x 1 0
β 1 ( x ) = ( x − x1 ) ⋅ l ( x ) = ( x − x1 )
两个节点就可以用2 × 1 + 1 = 3次多项式作为插值函数
( 2 ) 同样 , 若要求P( x )在[ a , b ]上具有m阶导数( m阶光滑度) 显然P( x )在节点 x0 , x1 ,⋯ , xn处必须满足
P( xi ) = f ( xi ) = yi
P′( xi ) = f ′( xi ) = yi′ P′′( xi ) = f ′′( xi ) = yi′′
其中
α 0 ( x0 ) = 1
α 1 ( x0 ) = 0
α 0 ( x1 ) = 0
α 1 ( x1 ) = 1 β 0 ( x1 ) = 0
′ α 0 ( x0 ) = 0 ′ α 1 ( x0 ) = 0 ′ β 0 ( x0 ) = 1 ′ β 1 ( x0 ) = 0
′ α 0 ( x1 ) = 0
所以,两点三次Hermite插值的余项为
f ( 4 ) (ξ ) R3 ( x ) = ( x − x0 )2 ( x − x1 )2 4!
x0 ≤ ξ ≤ x1
以上分析都能成立吗?
当f ( 4 ) ( x )在[ x0 , x1 ]上存在且连续时 , 上述余项公式成立
例.
已知f ( x )在节点1,处的函数值为f (1) = 2 , f ( 2 ) = 3 2 f ( x )在节点1,处的导数值为f ′(1) = 0 , f ′( 2 ) = −1 2
埃尔米特(Hermite)插值
实验二埃尔米特(Hermite)插值一、实验目的:1.掌握埃尔米特插值算法原理;2.使用C语言编程实现埃尔米特插值算法。
二、实验准备:阅读《数值分析》2.4节二、实验要求:某人从甲地开车去乙地,每隔一段时间对行车距离和速率进行一次采样,得到在n+1 个采样时刻点t i 的里程s i和速率v i(i=0, 1, ..., n)。
要求编程构造埃尔米特插值多项式H2n+1(t),满足H2n+1(t i)=s i,H'2n+1(t i)=v i,对所有i=0, 1, ..., n成立,并据此计算m个给定时刻的里程和速率。
函数接口定义:void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] );其中N为采样点个数(注意这个N不是公式中的最大下标n,而是等于n+1),采样时刻点t i、里程s i、速率v i分别通过t、s、v传入;m是需要估算的给定时刻的个数,ht传入给定的时刻点,相应计算出的里程和速率应分别存储在hs和hv中。
裁判程序如下:裁判输入数据:20.0 1.00.0 1.00.0 0.050.0 0.2 0.5 0.8 1.030.0 0.5 1.0100.0 170.0 200.030.0 150.0 0.050.0 0.25 0.5 0.75 1.050.0 1.0 2.0 3.0 4.00.0 60.0 160.0 260.0 300.05.0 70.0 100.0 120.0 20.0100.5 1.0 1.5 2.0 2.5 3.0 3.5 3.8 3.95 4.0标准输出数据:0.0000 0.1040 0.5000 0.8960 1.00000.0000 0.9600 1.5000 0.9600 0.0000100.0000 127.9297 170.0000 195.9766 200.000030.0000 165.4688 150.0000 52.9688 0.000030.2222 60.0000 105.9303 160.0000 206.3438 260.0000 307.9764 305.7687 299.9796 300.000062.6024 70.0000 109.0488 100.0000 92.9745 120.0000 41.2374 -44.8421 -16.2783 20.0000#include<stdio.h>#define MAXN 5 /* 最大采样点个数 */#define MAXM 10 /* 最大估算点个数 */void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] ){double l[10],p[10],h1[10],h2[10],x,ll[10],pp[10];int kk;for(kk=0;kk<m;kk++){x=ht[kk];hs[kk]=0;hv[kk]=0;int i;for(i=0;i<N;i++){l[i]=1;ll[i]=1;int j;for(j=0;j<N;j++){if(i!=j){l[i]=l[i]*(x-t[j])/(t[i]-t[j]);}}p[i]=0;pp[i]=0;int k;for(k=0;k<N;k++){if(i!=k){p[i]=p[i]+l[i]/(x-t[k]);pp[i]=pp[i]+ll[i]/(t[i]-t[k]);}}h1[i]=(1-2*pp[i]*(x-t[i]))*l[i]*l[i];h2[i]=(x-t[i])*l[i]*l[i];hs[kk]=hs[kk]+s[i]*h1[i]+v[i]*h2[i];int kkk;for(kkk=0;kkk<N;kkk++){if(x==t[kkk])break;}if(x==t[kkk])hv[kk]=v[kkk];elsehv[kk]=hv[kk]+s[i]*(2*p[i]*l[i]-4*l[i]*p[i]*(x-t[i])*pp[i]-2*pp[i]*l[ i]*l[i])+v[i]*(l[i]*l[i]+2*l[i]*p[i]*(x-t[i]));}}}int main(){int N, m;double t[MAXN], s[MAXN], v[MAXN]; /* 用于构造的数据 */double ht[MAXM], hs[MAXM], hv[MAXM]; /* 用估算的数据 */int i;while ( scanf("%d", &N) != EOF ) {for ( i=0; i<N; i++ )scanf("%lf", &t[i]);for ( i=0; i<N; i++ )scanf("%lf", &s[i]);for ( i=0; i<N; i++ )scanf("%lf", &v[i]);scanf("%d", &m);for ( i=0; i<m; i++ )scanf("%lf", &ht[i]);Hermite_Interpolation( N, t, s, v, m, ht, hs, hv );for ( i=0; i<m; i++ )printf("%.4lf ", hs[i]);printf("\n");for ( i=0; i<m; i++ )printf("%.4lf ", hv[i]);printf("\n\n");}return 0; }。
艾米特插值
若 αi ( x ) , βi ( x )( i = 0,1) ,满足
αi (x j ) = δi j
1 i = j = , , α i′( x j ) = 0 0 i ≠ j (i = 0 , 1)
β i ( x j ) = 0 , β i′( x j ) = ( x ) = ( − 2 l ( x j ) x + 1 + 2 x l ( x j )) l ( x )
' j ' j j 2 j
= (1 − 2 ( x − x j ) l ( x j )) l ( x )
' j 2 j
其中 l ( x j ) ∑ =
' j
n
k =0 k≠ j
由于
′ α 0 ( x 0 ) = 1, α 0 ( x 0 ) = 0 2.2 (2.6.2) ′ α 0 ( x1 ) = 0, α 0 ( x1 ) = 0 , (2.6.3) 2.3
由(2.6.3)可设
α0 ( x) = ( x − x1 ) a ( x − x0 ) + b ,
2.4 埃尔米特(Hermite)插值
• Hermite插值问题的提出 • 三次 Hermite 插值 • 2n+1 次Hermite 插值多项式 • Hermite插值余项 • 数值实例
一、 Hermite插值问题的提出
由于理论与实践的需要,在构造插值函数 时,不但要求在节点上函数值相等,而且还要求 它的(高阶)导数值也相等(即要求在节点上具 有一定的光滑度),使得插值函数与被插函数贴 近程度更好,满足这种要求的插值多项式就是 Hermite 插值多项式,有时也称为具有重节点插 值。
2
再由(2.6.2)可求得
埃尔米特hermite插值
埃尔米特插值5.4.1 问题的提出面讨论的拉格朗日和牛顿插值多项式的插值条件只要求在插值节点上,插 值函数与被插值函数的函数值相等,即)(i n x L =f(i x )和n N (i x )=f(i x ),有时 不仅要求插值多项式在插值节点上与被插值函数的函数值相等,还要插值多项式的导数在这些 点上被插函数的导数值相等,即要求满足插值条件:n i x f x H x f x H i i n i i n ,...,1,0,(')('),()()1212===++ (5.4.1)的次数不超过 2n+1的插值多项式12+n H ,这就是埃尔米特 (Hermite) 插值问题。
定义:假设在区间【α,b 】上给定了n 个互不相同的点x 1,x 2,…,x n 以及一张数表(*)记m=α1+α2+…+αn 。
早在 1878年C.埃尔米特就证明:存在惟一的次数不高于m-1的代数多项式H n (x ),使得,H n (x )为表(*)的以为结点组的埃尔米特插值多项式。
如果定义在【α,b 】上的函数ƒ(x )在x k (k =1,2,…,n )处有αk-1阶导数,并取,则称相应的H n (x )为ƒ(x )的以为结点组的(α1,α2,…,αn )阶埃尔米特插值多项式。
作为特殊情况,若诸αk 都为1,则H n (x )就是ƒ(x )的拉格朗日插值多项式;若n =1,则H n (x )为ƒ(x )的α1-1阶泰勒多项式。
最使人们注意的是诸αk 都为2的情况,这时H n (x )为次数不高于2n -1的代数多项式。
如果写H n (x )可表示为在这种情况下,常取,而给以适当的限制。
5.4.2三次埃尔米特插值我们考虑只有两个节点的三次埃尔米特插值。
设插值点为(0x ,0y ),(1x ,1y ),要求一次数不超过3的多项式)(3x H ,满足下列条件:i i i i m x H y x H ==)(',)(33 i=0,1(5.4.2) 式中i m =f ′(i x ),i=01。
计算方法(8) 第五章 插值法(2)
由条件(2)可列出方程组 2 ( x ) ( ax b ) l i i i i ( xi ) 1 ' 2 ' ( x ) ali ( xi ) 2(axi b)l i ( xi )l i ( xi ) 0 i i
li ( xi ) 1, axi b 1, a 2l ( xi ) 0
i ( x )应满足条件: (1) i ( x )应是 2n 1次多项式;
i j 1 (2) i ( x j ) ij i j 0 'i ( x j ) 0 ( i,j 0, 1, 2, ,n)
n
利用Lagrange插值基函数li ( x ) (
j 0 ( ji )
x xj xi x j
)ห้องสมุดไป่ตู้
设
i ( x ) (ax b)l 2 i ( x )
由条件(2)可列出方程组 2 ( x ) ( ax b ) l i i i i ( xi ) 1 ' 2 ' ( x ) al ( x ) 2( ax b ) l ( x ) l i i i i i i i i ( xi ) 0
i 0
n
2
F ( t )关于t 有n 2个零点:x0,x1, ,xn,x 。 但F ' ( t )关于t 有2n 2个零点,由Rolle(罗尔)定理 必存在点 (a , b),使 F
(2 n 2)
( ) f
(2 n 2)
( ) 0 K ( x )(2n 2)! 0
n
n
i ( x )应满足条件: (1) i ( x )应是 2n 1次多项式;
5.4 三次Hermite插值
其中a,b为待定系数。
1 . 由 0 ( x0 ) 1, 可得 a 2 ( x0 x1 ) 2 . ( x0 ) 0, 可得 b 由 0 3 ( x0 x1 )
将a,b代入得
x x0 x x1 0 ( x) 1 2 x1 x0 x0 x1
2
三次Hermite插值多项式 H3 ( x) 的表达式为
H3 ( x) y00 ( x) y11( x) m00 ( x) m11( x)
可以证明,其余项为
f (4) ( ) R3 ( x ) f ( x ) H 3 ( x ) ( x x0 ) 2 ( x x1 ) 2 , 4! 其中 介于 x0 , x1 之间。
0 0
1 ( x)
0
x x0 x x1 0 ( x) 1 2 x1 x0 x0 x1
2
类似地,将 x0 , x1 互换,可得
x x1 x x0 1 ( x ) 1 2 x x x x 0 1 1 0
1
0 0 0
0 0
1 ( x)
0
P ( xi ) f ( xi ) f i P ( xi ) f ( xi ) f , i 0,1, ,n
P( x)可以是最高次数为 2n 1次的多项式
两个节点就可以用 2 1 1 3次多项式作为插值函数
(2) 同样, 若要求P( x)在[a, b]上具有m阶导数(m阶光滑度 ) 即P( x)在节点 x0 , x1 ,, xn处必须满足
并给出余项公式。
( x1 ) m1, (i 0,1,2), H3 ( xi ) yi , H3 H3 ( x) y00 ( x) y11( x) y22 ( x) m11( x)
第三章(二) 埃尔米特-样条插值法
(2n2)
( ) ( x x j )
j0
n
2
(3.4-11)
x x 0 x x1 h0 ( x ) 1 2 . x 0 x1 x 0 x1
H 3 ( x ) h 0 ( x ) 2 h1 ( x ) 2 g 0 ( x ) m 1 g 1 ( x ) x 0 x 1 x 1 x 0 1 2 2 1 2 0 1 0 1 1 0 1 0 2( x 0) x 1 x0 m 1 ( x 1) 0 1 1 0
2
h 1 ( x ) 1 2 l 1 ( x 1 )( x x 1 ) l 1 ( x ),
2
g 0 ( x ) ( x x 0 ) l 0 ( x ), ( x ) ( x x 1 ) l 1 ( x ). g1
2 2Leabharlann Hermite插值余项定理 定理 假设函数f (x)在 x [ a , b ] 上具有(2n+1)阶连续导数,在 x [ a , b ] 内存在(2n+2)阶导数,那么对于x [ a , b ] ,必定存在一点 ( a , b ) 使 得下式成立:
先构造 h0(x), 设
由h0(x0) = 1,
x x1 h0 ( x ) (a bx ) . x 0 x1
2
∵h0(x1)=h'0(x1)=0
h0 ( x 0 ) 0,
同理
x x 0 x x1 h0 ( x ) 1 2 x x . x 0 x1 0 1
第2章-插值法(Hermite插值,样条插值)
2.5 埃尔米特插值法
Newton插值和Lagrange插值虽然构造比较简单,但都存 在插值曲线在节点处有尖点,不光滑,插值多项式在节 点处不可导等缺点
问题的提出: 不少实际问题不但要求在节点上函数值相等,而且还要 求它的导数值也相等(即要求在节点上具有一阶光滑度), 甚至要求高阶导数也相等,满足这种要求的插值多项式就是 埃尔米特(Hermite)插值多项式。下面只讨论函数值与导数 值个数相等的情况。
由 j ( x j ) 1 ,可得
Cj
1 ( x j x0 ) 2 ( x j x1 ) 2 ( x j x j 1 ) 2 ( x j x j 1 ) 2 ( x j xn ) 2
故
j ( x) ( x x j )
( x x0 ) 2 ( x x1 ) 2 ( x x j 1 ) 2 ( x x j 1 ) 2 ( x xn ) 2 ( x j x0 ) 2 ( x j x1 ) 2 ( x j x j 1 ) 2 ( x j x j 1 ) 2 ( x j xn ) 2
( x x j )l j 2 ( x)
2016/8/14 6
(ii)由条件(1)可知,x0 , x1,, x j 1, x j 1,, xn都是 j ( x)的二重根,令
j ( x) C j (ax b)( x x0 ) 2 ( x x1 ) 2 ( x x j 1 ) 2 ( x x j 1 ) 2 ( x xn ) 2
17
即
x x1 x x0 2 0 ( x) (1 2l1 ( x)) l0 ( x) 1 2 x x x0 x1 1 0
第五节Hermite插值
多项式, f(x)在含xi的区间[a,b]上2n+2阶连续可微, 则对任意
的x[a,b],总存在 (a,b),使得
f ( 2 n 2) ( ) 2 R( x) f ( x) H 2 n 1 ( x) ( x ) (5.6) (2n 2)!
6 例 求满足 P( x j ) f ( x j )
'
( j 0,1,, n)
与前面讨论类似,可证明满足条件的Hermite 插值多项式 是存在唯一的,其余项为
10
m f ( m n 2) ( ) R( x) f ( x) H ( x) n1 ( x) ( x x jk ) (m n 2)! k 0
例:按下表求Hermite 插值多项式
( j 0,1,2) 及 P' ( x j ) f ' ( x j )
的插值多项式及其余项表达式。
由给定条件,可确定次数不超过3 的插值多项式。
由于此多项式通过点
( x0 , f ( x0 )),
故其形式为
( x1 , f ( x1 )) 及 ( x2 , f ( x2 ))
P( x) f ( x0 ) f [ x0 , x1 ]( x x0 )
n 2 i n
(5.5)
H 2 n 1 ( x) [1 2( x xi )li ( xi )]l ( x) yi ( x xi )li2 ( x) yi
i 0 i 0
{[1 2( x xi )li ( xi )] yi ( x xi ) yi}li2 ( x)
f [ x0 , x1 , x2 ]( x x0 )( x x2 )
A( x x0 )( x x1 )( x x2 )
Hermite插值多项式
( xi1
4
xi )2
因此
|
Ri ( x) |
(
x i
+1
8
xi )2
max |
xi x xi1
f ( x) |
于是在[a,b]上,| R( x) ||
f
( x)
L1( x) |
h2 8
M2
优点:计算简单; 适用于光滑性要求不高的插值问题。
缺点:分段插值函数只能保证连续性, 失去了原函数的光滑性。
(1) L1(x) 在每个子区间[xi , xi+1](i=0,1,2,,n-1)上是
线性插值多项式;
(2) L1(xi ) yi , i=0,1,2,…,n (3) L1(x) 在区间[a , b]上连续; 则称 L1(x)是f(x)在[a ,b]上的分段线性插值函数。
2.分段线性插值函数的表达式
2
两点三次Hermit插值(续1)
5
直接设 H3 (x) ax3 bx2 cx d
待定系数法求出,但不易推广到高次。
3
基函数法:
令H3(x) y00 (x) y11(x) y00 (x) y11(x)
为使H3(x)是一个次数3的多项式且满足插值条件
H3 (xi ) yi , H3(xi ) yi i 0,1
并在每个 xi , xi子1区间上构造插值多项式,然后把 它们装配在一起,作为整个区间 上a,的b插值函数。
二、分段线性插值
1.问题的提法
定义 设f(x)是定义在[a,b]上的函数,在节点 a= x0< x1<x2<…<xn-1<xn=b,
的函数值为 y0 , y1 ,y2 ,…yn-1 ,yn ,若函数 L1(x)满足条件
5.2Hermite插值
三、Hermite插值问题的存在唯一性 插值问题的存在唯一性
证明 令:
第一步:存在性 第一步 存在性
Hm+n+1(x) = pn (x) + qm (x)ωn+1(x)
pn (xi ) = f (xi ),i = 0,1,2,L, n
qm (x) = ∑a j x j
j=0 m
Hm+n+1 ( xi ) = yi
参看 P157
第二步:唯一性 第二步 唯一性
~ 都满足 假设存在两个多项式 H (x), H (x) ∈ Dm+n+1 都满足:
Hm+n+1 (xi ) = yi , i = 0,1,2,L, n
′ Hm+n+1 (xik ) = yi′k , k = 0,1,2,L, m
令:
~ r(x) = H(x) − H(x) ∈ Dm+n+1
插值问题( 二、Hermite插值问题(带导数条件的代数插值问题) 插值问题 带导数条件的代数插值问题)
P158
H5 (x) = p3 (x) + q1(x)ω4 (x) H5 (x) = p3 (x) + (ax + b)(x +1)(x − 0)(x −1)(x − 2)
插值问题( 二、Hermite插值问题(带导数条件的代数插值问题) 插值问题 带导数条件的代数插值问题)
5.2 Hermite插值 插值
一 、Hermite插值的概念 插值的概念 二、Hermite插值问题 插值问题 三、Hermite插值问题的存在唯一性 插值问题的存在唯一性 四、Hermite插值问题余项 插值问题余项
埃尔米特插值
ax j + b = 1; 解出 a = −2l′ (xj ),b =1+ xjl′ (xj ) 整理得 j j a + 2l j ( x j ) = 0.
由于
l j ( x) =
( x − x0 )⋯( x − x j −i )( x − x j +i )⋯( x − xn ) ( x j − x0 )⋯( x j − x j −i )( x j − x j +i )⋯( x j − xn )
2 j
α j ( x )及β j ( x ) 。
li (x ) 令 。
α j ( x ) = (ax + b)l ( x )
其中 l i ( x
)
是(2.10)式所表示的基函数。由条件(6.2)有
α j ( x j ) = (ax j + b)l 2 ( x j ) = 1 j
α ′j ( x j ) = l j ( x j )[al j ( x j ) + 2( ax j + b)l ′j ( x j ) = 0
H 2 n +1 ( x ) = ∑ [y jα j ( x ) + m j β j ( x )]
n j =0
Байду номын сангаас
(6.3)
′ 由条件(6.2),显然有, H 2 n +1 ( xk ) = yk , H 2 n +1 ( xk ) = mk ,
( k = 0,1, ⋯ , n) .
。下面的问题就是求满足条件(6.2)的基函数 为此,可利用拉格朗日插值基函数
ϕ ( 4 ) (t ) 在(a,b)内至少有一个零点,故
ϕ ( 4 ) (ξ ) = f ( 4 ) (ξ ) − 4! k ( x ) = 0
埃尔米特插值
内江师范学院数学与信息科学学院 吴开腾 制作
6、Hermite插值余项 、 插值余项
定理 若 f ( x) 在插值区间 [a, b] 内有 2n + 2 阶导数 f (2 n + 2) ( x) , 则对于任何 x ∈ [a, b] ,Hermite插值问题(a)、(b)的 余项为
则有
g ( x) = f ( x) − H ( x) − k ( x)[π ( x)]2 = R( x) − R ( x) = 0
g ( xi ) = 0(i = 0,1,L , n)
又由插值条件( ) 得 又由插值条件(b),得
内江师范学院数学与信息科学学院 吴开腾 制作
可知 g (t ) 在区间 [a, b] 上有 n + 1 个二重零点xi (i 零点 x i 。
若已知函数 f ( x) 在插值区间 [a, b]上 n + 1个 互异的节点
x0 ,L , xn 处的函数值 f ( xi ) = f i及一阶导数值 f '( xi ) = f 'i
(i = 0,1,L , n),求插值函数 H ( x) 满足条件:
(a) H ( x)是一个次数不超过 2n + 1次的多项式; (b)
将上式与定理中要证明的( )进行比较, 将上式与定理中要证明的(*)进行比较,可知只需证明
先将
的定值, x 看作不同于 xi 的定值,作辅助函数
f (ξ ) k ( x) = (2n + 2)!
(2 n + 2)
g (t ) = f (t ) − H (t ) − k ( x)[π (t )]2 ,
计算方法(8) 第五章 插值法
得 a2abb10
a 1, b 2
(2)2( x)为四次多项式,且满足
2
(0)
0,
2
(1)
0,2
(2)
1,2'
(0)
0,
' 2
(1)
0
设
2
(
x
)
l22
(
x)
(
(x (2
0)( x 0)(2
1) 1)
)2
由2(2) 1, l2(2) 1得 1,2( x)
H 2n1 H '2n1
( (
xi xi
) )
yi y 'i
i 0,1,2,L n
一、一般情形的 Hermite插值问题
用Lagrange型插值基函数法
设Hermite插值多项式为
n
n
H2n1( x) i ( x) yi i ( x) y 'i
i0
i0
1( x) (1 ( 2 x x1)l(1 x1))l 2(1 x )
0 ( x) (x x0)l 2(0 x )
1( x) (x x1)l 2(1 x )
其中
l0( x)
x x1 , x0 x1
l
' 0
(
x
)
x0
1
x1
l1( x)
x x0 , x1 x0
' i
(
xi
)
n j0
1
5.4埃尔米特(Hermite)插值
n
计算方法
H2n+1(x)为满足条件
H ( xi ) f ( xi ),
H ( xi ) f ( xi )
( i 0,1, , n)
的2n+1次Hermite插值多项式。
计算方法
定理
满足插值条件
H ( xi ) f ( xi ) ( i 0,1, , n)
H ( xi ) f ( xi ),
计算方法
§5.4 埃尔米特(Hermite)插值
许多实际问题不但要求插值函数p(x)在插值节
点处与被插函数f(x)有相同的函数值p(xi)=f(xi) (i=0,1,2,…,n), 而且要求在有些节点或全部节点上 与f(x)的导数值也相等,甚至要求高阶导数值也相 等,能满足这种要求的插值问题就称为埃尔米特
i( x j ) 0 i ( x j ) 0
(i, j =0,1,2, …,n)
Hermite插值多项式可写成插值基函数表示的形式
H 2 n1 ( x ) i ( x ) f ( xi ) i ( x ) f ( xi )
i 0
n
计算方法
验证:
H 2n1 ( x j ) i ( x j ) f ( xi ) i ( x j ) f ( xi ) ij f ( xi ) 0 f ( x j )
i 0 i 0
n
n
0 ij f ( x j ) f ( x j )
i 0
n
计算方法
根据插值条件可求出 j ( x ) 和 j ( x )( j 0,1, n)
n 1 2 1 2( x x ) j ( x) l j ( x) j k 0 x j xk k j
54第四节 Hermite插值
数学学院 信息与计算科学系
二、误差估计
定理4 设f(x)在包含x0、x1的区间[a, b]内存在 四阶导数,则当x∈[a, b]时有余项式
R3( x)
f (x)
H3(x)
1 4!
f (4)( )( x
x0 )2( x
x1 )2
( (a, b)且与x有关)
设
M4
max
x0 x x1
x
144
x
1212
得 由
125
H3
(125) f (4)(
11.18035
x)
15 16 x 7
/
2
可求得
R3 (125)
15 1
384 16 3
42 192
15 384
192 1213 11
0.000012
x0 x0
)
2
,
1
(
x
)
(
x
x1
)(
x x1
x0 x0
)2
0 ( x) [1 2l1( x)]l02( x) 0 ( x) ( x x0 )l02( x) 1( x) [1 2l0 ( x)]l12( x) 1( x) ( x x1 )l12( x)
数学学院 信息与计算科学系
第四节 埃尔米特(Hermite)插值
一、 埃尔米特插值多项式
为了使插值函数能更好的切合原来的函数,许多 问题不但要求节点上的函数值相等,还要求导数值相 同,甚至高阶导数也相等,这类插值问题称为埃尔米 特插值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二埃尔米特(Hermite)插值
一、实验目的:
1.掌握埃尔米特插值算法原理;
2.使用C语言编程实现埃尔米特插值算法。
二、实验准备:
阅读《数值分析》2.4节
二、实验要求:
某人从甲地开车去乙地,每隔一段时间对行车距离和速率进行一次采样,得到在n+1 个采样时刻点t i 的里程s i和速率v i(i=0, 1, ..., n)。
要求编程构造埃尔米特插值多项式H2n+1(t),满足H2n+1(t i)=s i,
H'2n+1(t i)=v i,对所有i=0, 1, ..., n成立,并据此计算m个给定时刻的里程和速率。
函数接口定义:
void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] );
其中N为采样点个数(注意这个N不是公式中的最大下标n,而是等于n+1),采样时刻点t i、里程s i、速率v i分别通过t、s、v传入;m是需要估算的给定时刻的个数,ht传入给定的时刻点,相应计算出的里程和速率应分别存储在hs和hv中。
裁判程序如下:
裁判输入数据:
2
0.0 1.0
0.0 1.0
0.0 0.0
5
0.0 0.2 0.5 0.8 1.0
3
0.0 0.5 1.0
100.0 170.0 200.0
30.0 150.0 0.0
5
0.0 0.25 0.5 0.75 1.0
5
0.0 1.0 2.0 3.0 4.0
0.0 60.0 160.0 260.0 300.0
5.0 70.0 100.0 120.0 20.0
10
0.5 1.0 1.5 2.0 2.5 3.0 3.5 3.8 3.95 4.0
标准输出数据:
0.0000 0.1040 0.5000 0.8960 1.0000
0.0000 0.9600 1.5000 0.9600 0.0000
100.0000 127.9297 170.0000 195.9766 200.0000
30.0000 165.4688 150.0000 52.9688 0.0000
30.2222 60.0000 105.9303 160.0000 206.3438 260.0000 307.9764 305.7687 299.9796 300.0000
62.6024 70.0000 109.0488 100.0000 92.9745 120.0000 41.2374 -44.8421 -16.2783 20.0000
#include<stdio.h>
#define MAXN 5 /* 最大采样点个数 */
#define MAXM 10 /* 最大估算点个数 */
void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] )
{
double l[10],p[10],h1[10],h2[10],x,ll[10],pp[10];
int kk;
for(kk=0;kk<m;kk++)
{
x=ht[kk];hs[kk]=0;hv[kk]=0;
int i;
for(i=0;i<N;i++)
{
l[i]=1;ll[i]=1;
int j;
for(j=0;j<N;j++)
{
if(i!=j)
{
l[i]=l[i]*(x-t[j])/(t[i]-t[j]);
}
}
p[i]=0;pp[i]=0;
int k;
for(k=0;k<N;k++)
{
if(i!=k)
{
p[i]=p[i]+l[i]/(x-t[k]);
pp[i]=pp[i]+ll[i]/(t[i]-t[k]);
}
}
h1[i]=(1-2*pp[i]*(x-t[i]))*l[i]*l[i];
h2[i]=(x-t[i])*l[i]*l[i];
hs[kk]=hs[kk]+s[i]*h1[i]+v[i]*h2[i];
int kkk;
for(kkk=0;kkk<N;kkk++)
{
if(x==t[kkk])
break;
}
if(x==t[kkk])
hv[kk]=v[kkk];
else
hv[kk]=hv[kk]+s[i]*(2*p[i]*l[i]-4*l[i]*p[i]*(x-t[i])*pp[i]-2*pp[i]*l[ i]*l[i])+v[i]*(l[i]*l[i]+2*l[i]*p[i]*(x-t[i]));
}
}
}
int main()
{
int N, m;
double t[MAXN], s[MAXN], v[MAXN]; /* 用于构造的数据 */
double ht[MAXM], hs[MAXM], hv[MAXM]; /* 用估算的数据 */
int i;
while ( scanf("%d", &N) != EOF ) {
for ( i=0; i<N; i++ )
scanf("%lf", &t[i]);
for ( i=0; i<N; i++ )
scanf("%lf", &s[i]);
for ( i=0; i<N; i++ )
scanf("%lf", &v[i]);
scanf("%d", &m);
for ( i=0; i<m; i++ )
scanf("%lf", &ht[i]);
Hermite_Interpolation( N, t, s, v, m, ht, hs, hv );
for ( i=0; i<m; i++ )
printf("%.4lf ", hs[i]);
printf("\n");
for ( i=0; i<m; i++ )
printf("%.4lf ", hv[i]);
printf("\n\n");
}
return 0; }。