Hermite插值方法

合集下载

2.3插值与逼近之Hermite插值

2.3插值与逼近之Hermite插值

Hermite插值的余项估计
Hermite插值的余项估计
Hermite插值的余项估计
例题
例 设 f (1) 2,f (2) 3,f (1) 1,f (2) 1, 求满足条件的Hermite插值多项式.
解:x0 1, x1 2, h 2 1 1 则 A1 (1 2( x 1))( x 2) 2 (2 x 1)( x 2) 2 A2 (1 2( x 2))( x 1) 2 (2 x 3)( x 1) 2 B1 ( x 1)( x 2) 2 B2 ( x 2)( x 1) 2
2 3
线性空间
{ p( x ) / p( x ) a0 a1 x a2 x 2 a3 x 3}
V span{1, x, x , x }
2 3
span{h0 ( x ), h1 ( x ), H 0 ( x ), H1( x)}
Hermite基函数表
四个插值基函数{h0 ( x), h1( x), H0 ( x), H1( x)}取值如下表:
非标准的Hermite插值
方法二:构造基函数.
基函数 1 0 0 0 函数值 0 1 0 0 0 0 1 0
2
导数值 0 0 0 1
h2 ( x) k ( x x1 ) ( x x0 )
2
( x x1 ) ( x x0 ) h2 ( x ) ( x2 x1 )2 ( x2 x0 )
Hermite基函数表
基函数 函数值 导数值
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
h1( x) (a bx)( x xi )2

hermitage插值法

hermitage插值法

hermitage插值法【实用版】目录1.概述 Hermite 插值法2.Hermite 插值法的基本原理3.Hermite 插值法的应用实例4.Hermite 插值法的优点与局限性正文1.概述 Hermite 插值法Hermite 插值法是一种基于分段多项式的插值方法,用于在给定区间内对已知数据点进行插值。

它是一种三次样条插值法,可以提供比其他低阶插值方法更精确的结果。

Hermite 插值法的名称来自于法国数学家Charles Hermite,他在 19 世纪末开发了这种方法。

2.Hermite 插值法的基本原理Hermite 插值法的基本思想是使用一个三次多项式来表示给定数据点之间的函数。

该多项式可以写成:f(x) = a0 + a1x + a2x^2 + a3x^3其中,a0、a1、a2 和 a3 是待定系数,需要通过给定的数据点来确定。

为了找到这些系数,Hermite 插值法使用了三个约束条件:(1)插值多项式在区间的端点处取到给定的函数值,即:f(x0) = a0 + a1x0 + a2x0^2 + a3x0^3 = y0f(x1) = a0 + a1x1 + a2x1^2 + a3x1^3 = y1(2)插值多项式在区间的中点处取到区间的平均值,即:f((x0 + x1) / 2) = (f(x0) + f(x1)) / 2(3)插值多项式的一阶导数在区间的中点处等于给定函数在该点的导数值,即:f"(((x0 + x1) / 2)) = (f"(x1) - f"(x0)) / (x1 - x0)通过解这组线性方程组,可以得到插值多项式的系数 a0、a1、a2 和a3。

一旦得到这些系数,就可以用插值多项式来近似表示给定函数在给定区间内的行为。

3.Hermite 插值法的应用实例Hermite 插值法广泛应用于数值分析、工程计算和计算机图形学等领域。

例如,在计算机图形学中,Hermite 插值法可以用来在给定控制点之间生成平滑的贝塞尔曲线。

第三章(二) 埃尔米特-样条插值法

第三章(二) 埃尔米特-样条插值法

2
x x1 x x 0 h1 ( x ) 1 2 x x . x1 x 0 1 0
2

x x1 g 0 (x) a(x x0 ) , x 0 x1
2
∵g0(x0)=g0(x1)=0, g'0(x1)=0
例1 给定 f (− 1)=0, f (1)=4, f '(− 1)=2, f '(1)=0, 求H3(x), 并计算 f (0.5).

x0 = − 1, x1 = 1,
H 3 ( x ) h 0 ( x ) 0 h1 ( x ) 4 g 0 ( x ) 2 g 1 ( x ) 0
y0 y1 m0 m1
其解存在唯一, 解 出 a0, a1, a 2, a3, 代 入即得 H3(x).
1 1 0 0
x0 x1 1 1
x0 x1
2 2
x0 x1
3 3 2 2
2 x0 2 x1
3x0 3 x1
( x 0 x1 ) 0 .
4
基函数法
类似于拉格朗日插值多项式的构造手法,我们可以通 过插值基函数作出 。
对给定区间[a,b]作划分
a x 0 x1 x n b
给定 n +1个插值点:(xi , f (xi)), i = 0,1,2,„,n, 在每个小 区间[xi, xi+1]上作线性插值,节点 xi, xi+1上的基函数分别为:
li ( x ) x x i 1 x i x i 1 , 1 ( x ) li x xi x i 1 x i ,
在某些问题中,为了保证插值函数能更好地逼近原函数 ,不仅要求两者在节点上有相同的函数值,而且要求在节点 上有相同的导数值。这类插值称为Hermite插值。 ★ Hermite插值描述:

ch2-4Hermite插值

ch2-4Hermite插值

则Hermite插值多项式为:
H ( x ) hi ( x ) yi H i ( x ) y'i
i 0
n
Hermite插值多项式的构造
hi ( x )在x j ( j i )处的函数值与导数值均 为0,
故可设 : hi ( x ) [a b( x xi )] [l i ( x )]2
这里li(x)为拉格朗日插值基函数
把 hi ( xi ) 1 h'i ( xi ) 0 (i 0,1,, n) 代入得
hi ( xi ) b l ( xi ) 2[a b( x xi )]l i ( xi )l i ( xi ) a 1; b 2al i ( xi ) 0
2. Hermite插值的基本定理;
3. Hermite插值多项式的构造 4.分段三次Hermite插值; 5.一般插值问题。
对x x1 1有:h0 (1) 0, h1 (1) 1, H 0 (1) 0,
(0) 0可设 由条件h0 (0) 1, h0 (1) 0, h0 h0 ( x ) (ax b)( x 1)
(0) 0, 得b a 1 利用h0 (0) 1, h0 所以h0 ( x ) ( x 1)( x 1) 1 x
( x i ) y i ( i 0,1,2,...n) '( xi ) y
' i
( i 0,1,2,...n)
保持插值曲线在节点处有切线(光滑), 使插值函数和被插函数的密和程度更好 。
二、 Hermite插值问题的提法
设函数f(x) 在区间[ a, b] 上有 n+1个互异节点 a=x0<x1<x2<……<xn=b , 定义在[a,b]上函数f(x) 在节点上满足: f(xi) = yi, f ' (xi)=y ' i, i=0,1,2……n 求一个次数不高于2n+1次的插值多项式H(x)

Hermite_插值法

Hermite_插值法

, x0]
lim
xi x0
f [x0, x1,
,
xn ]
1 n!
f
(n) ( x0 )
重节点Newton插值
在 Newton 插值公式中,令 xi x0 , i = 1, … , n, 则
Nn( x) f ( x0 ) f [ x0 , x1]( x x0 )
f ( x0 ) f '( x0 )( x x0 )
( x1 x0 )( x1 x2 )
三点三次Hermite 插值
余项公式
由于 x0 , x1 , x2 是 R(x) 的零点,且 x1 是二重零点,故可设 R( x) f ( x) P( x) k( x)( x x0 )( x x1 )2 ( x x2 )
与 Lagrange 插值余项公式的推导过程类似,可得
x
x0
)
x x0
x1 x1
2
1(
x)
(
x
x1
)
x x1
x0 x0
两点三次Hermite 插值
满足插值条件
P(x0) = f(x0) = y0,P’(x0) = f’(x0) = m0 P(x1) = f(x1) = y1,P’(x1) = f’(x1) = m1
的三次 Hermite 插值多项式为
三点三次Hermite 插值
三点三次 Hermite 插值
插值节点:x0 , x1 , x2
插值条件:P(xi) = f(xi),i = 0, 1, 2,P’(x1) = f’(x1) 设 P( x) f ( x0 ) f [x0, x1]( x x0 )
f [ x0, x1, x2]( x x0 )( x x1) A( x x0 )( x x1 )( x x2 ) 将 P’(x1) = f’(x1) 代入可得 A f '( x1 ) f [ x0 , x1] f [ x0, x1, x2]( x1 x0 )

hermite插值法 python -回复

hermite插值法 python -回复

hermite插值法python -回复Hermite插值法是一种常用的数值方法,用于通过给定数据点的函数值和导数值,来构造一个通过这些点的插值函数。

这种插值方法非常重要,因为它可以用于近似复杂函数、在有限的数据点上进行多项式插值。

在本文中,我们将详细介绍Hermite插值法的原理、实现和应用。

我们将一步一步回答下面的问题,以帮助你理解这个主题:1. Hermite插值法的原理是什么?2. 如何实现Hermite插值法?3. Hermite插值法有哪些应用场景?首先,让我们来了解Hermite插值法的原理。

1. Hermite插值法的原理:Hermite插值法是将给定的数据点表示为n个插值多项式的线性组合。

每个插值多项式表示一个数据点的值和导数值。

通过将这些多项式相加,我们可以获得一个整体的插值函数。

具体来说,给定数据点(x0, y0, m0), (x1, y1, m1), ... , (xn, yn, mn),其中yi是函数在xi处的函数值,mi是函数在xi处的导数值,我们需要构造一个插值函数f(x)。

插值函数f(x)可以通过以下步骤来计算:a. 计算插值多项式h0(x)、h1(x)、...、hn(x),这些多项式与数据点的位置相对应。

b. 计算插值多项式的导数q0(x)、q1(x)、...、qn(x),这些导数是通过给定函数值和导数值来确定的。

c. 计算插值多项式与导数的线性组合p0(x)f0(x) + p1(x)f1(x) + ... + pn(x)fn(x),这里fi(x)是数据点(xi, yi)上的插值多项式。

最终,插值函数f(x)可以由上述线性组合得到。

2. 如何实现Hermite插值法:在Python中,可以使用NumPy库来实现Hermite插值法。

NumPy 提供了许多对数组和数值计算的支持,特别适用于数值插值。

下面是实现Hermite插值法的步骤:a. 导入NumPy库:import numpy as npb. 定义数据点的函数值和导数值:x = np.array([x0, x1, ..., xn]),y = np.array([y0, y1, ..., yn]),m = np.array([m0, m1, ..., mn])c. 定义插值多项式的导数:q = (y[1:] - y[:-1]) / (x[1:] - x[:-1])d. 定义插值多项式的系数:p = (q[1:] - q[:-1]) / (x[2:] - x[:-2])e. 定义插值多项式的值:f = np.poly1d([0])f. 循环计算插值多项式的值:for i in range(len(x)-1):f += np.poly1d([p[i], q[i], y[i]])(x) * ((x >= x[i]) & (x <=x[i+1]))g. 返回插值函数f(x):return f上述代码实现了Hermite插值法,并返回了插值函数。

埃尔米特插值

埃尔米特插值

即:x x j ( j i)是i (x)的二重根
因为i (x)得次数是2n 1
n
则:i (x) (ax b) (x x j )2 j0 ji
a和b由以下两式确定:
i (xi ) 1 i(xi ) 0
ii((xxj
) 0,j j ) 0,j
A 59 , 360
B 161 360
例5:给定如下数据表,求次数不高于3 次的代数多项式。
xi f(xi)
f (xi )
f ( xi )
x0 f(x0)
f ( x0 )
f (x0 )
x1 f(x1)
提示 H3 (x) H2 (x) A(x x0 )2 (x x1)
又:H

2
(0)

0
则:c 1
则:R2 (x) x(x 1)
则:H2 (x) L1(x) R2 (x) x2
再增加:
xi
1
yi
1
求 : H3(x),其中H3(x)满足:
xi
01
f(xi) 0
1
f (xi )
0
1
:H3(x) = H2 (x) + R3(x)
R3(0) = 0 其中:R3(1) = 0
例6:给定如下数据表,求首项系数为1 的4次的代数多项式。
xi
ab
f(xi) 0
f (xi )
0
0
f ( xi ) 0
提示 H3(x) H2 (x) c(x a)3
H2 (x) 0
xi
ab
f(xi) 0
f (xi )
0
0
f ( xi ) 0

第三章 插值法 Hermite插值

第三章 插值法 Hermite插值

j
(
x
)
(1
c(
x
x
j
))
(((xxx xx000))222((xx xx11))222 ((xxjj xx00))22((xxjj xx11))22
(((xxxxxjjj11))222((xx xxjj11))22 ((xx ((xxjj xxjj11))22((xxjj xxjj11))22 ((
P3( x) f ( x0 ) f x0, x1x x0 f x0, x1, x2 ( x x0 )x x1
f [ x0 , x1, x1, x2 ,]( x x0 )( x x1 )( x x2 ) --- 带重节点的牛顿插值多项式
插值余项(误差估计):
条件 f ( x) C 3[a, b],f(4)( x)存在。
i 0,1, , n, xi互异)
(b)H2n1( x) 为Hermite插值多项式,

R2n1( x) f ( x) H 2n1( x)
f ( (2n2) )
(2n 2)!
(x
x0 )2( x
x1 )2
( x xn )2
f (2n (2n
2) ( )
2)!
2 n1
(
x
),
(a, b)且与 x 有关。
结论
R( x)
f ( x) P3 ( x)
f
(4) (
4!
)
(
x
x0
)( x
x1 )2 ( x x0 , x2
x2 )。 且依赖于x
证明
(1)当 x xi (i 0,1,2)时, R( xi ) 0 右端 0; (2)当 x xi (i 0,1,2)时,

三次Hermite插值

三次Hermite插值
检查插值多项式是否满足Hermite插 值的约束条件,即插值多项式和原函 数在节点处有相同的函数值和导数值 。
04 实例分析
CHAPTER
实例一:已知数据点的插值
总结词
利用已知数据点进行插值,可三次Hermite插值方法,利用已知的数据点来估计未知点的值。这 种方法能够更好地处理数据点的变化,并提高插值的精度。
CHAPTER
插值多项式的构造
定义
Hermite插值法是一种通过已知的离散数据点来构造一个多 项式,使其能够准确地经过这些数据点,并尽可能地平滑地 连接这些点的方法。
构造方法
Hermite插值多项式由两个部分组成,一个是线性函数,另 一个是二次函数。线性函数部分用于确保插值多项式能够准 确地经过数据点,而二次函数部分则用于保证插值多项式的 平滑性。
实例二:未知数据点的插值
总结词
在未知数据点的情况下,可以通过三次 Hermite插值方法,预测并估计未知点的值。
详细描述
在数据点未知的情况下,可以利用三次 Hermite插值方法,根据已知的数据点来预 测和估计未知点的值。这种方法能够为后续 的数据分析和处理提供重要的参考依据。
实例三:复杂函数的插值
三次Hermite插值能够提供高精度的插值结果,特别是在处理
复杂函数时。
稳定性好
02
该方法在处理大数据集时表现出良好的稳定性,不易受到噪声
和异常值的影响。
易于实现
03
三次Hermite插值的算法相对简单,易于在计算机上实现和优
化。
三次Hermite插值的局限性
对初始数据敏感
三次Hermite插值的结果对初始数据的选择 较为敏感,不同的初始数据可能导致不同的 插值结果。

第2章-插值法(Hermite插值,样条插值)

第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三点插指公式的插值基法

hermite三点插指公式的插值基法

hermite三点插指公式的插值基法hermite三点插入法的插值基法概述Hermite三点插入法是一种常用的插值方法,它使用三点来构造插值变换,这三点的x坐标满足X_0 <= X_1 < X_2,插值变换的控制点是(X_0,Y_0)、(X_1,Y_1)和(X_2,Y_2),而且这三点之间的平均斜率值也是已知的。

根据这三点的信息,可以构造出插值变换的具体形式,从而可以用于插值计算。

原理Hermite三点插入法实际上是基于Hermite多项式插值的,要构造出插值变换的具体形式,需要同时考虑到给定的两个控制点和满足Hermite多项式条件的两个切线斜率,具体构造的步骤如下:1)首先,建立插值函数:F(x)=a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1)+a_3(x-x_0)(x-x_1)(x-x _2)2)确定a_0,a_1,a_2,a_3的值,这是满足Hermite多项式条件的比较核心的步骤,有4个未知量,3个方程:F(x_0)=y_0 , F(x_1)=y_1 , F(x_2)=y_2另外两个方程是:F'(x_0)=(y_1-y_0)/(x_1-x_0) ,F'(x_2)=(y_2-y_1)/(x_2-x_1)3)使用求解某个系数的公式进行求解,求得四个系数:a_0=y_0a_1=(y_1-y_0)/(x_1-x_0)-(x_2-x_0)(y_2-y_0)/(x_2-x_1)(x_1-x_ 0)a_2=(x_2-x_1)(y_2-y_0)/(x_2-x_1)(x_1-x_0)a_3=(x_2-x_1)(x_2-x_0)(y_2-y_1)/(x_2-x_1)(x_1-x_0) 应用Hermite三点插入法可以用于插值计算,在计算机图形学中它也是一种常用的绘图方法。

一般来说,它可以用于函数图像的渲染、曲线的插值、多维函数的插值等方面。

它可以提高函数图像的平滑度,使图像看起来更加美观,还可以减少绘图的复杂度,在某些情况下可以提高绘图效率。

3.3 Hermite插值法

3.3  Hermite插值法

x x0 x x1 2 x x 1 y0 1 2 x x x x y1 1 2 x x 1 0 0 0 1 1
x x0 x x 0 1
2
2
x x0 y0
求f ( x)的两点三次插值多项式, 及f ( x)在x 1.5,1.7处的函数值.
解:
x0 1, x1 2
0, y1 1 y0 2 , y1 3 y0
2
0 ( x) y1 1 ( x) H 3 ( x) y00 ( x) y11 ( x) y0
2 0
2
x x1 x x0 1 ( x) (1 2l0 ( x)) l ( x) 1 2 x x x x 0 1 1 0
2 1
2
x x1 0 ( x) ( x x0 ) l02 ( x) x x0 x x 1 0
x0 x1
以上分析都能成立吗?
当f
( 4)
( x)在[ x0 , x1 ]上存在且连续时, 上述余项公式成立
2处的函数值为f (1) 2 , f ( 2 ) 3 例1.已知f ( x )在节点1, f ( x )在节点1, 2处的导数值为f (1) 0 , f ( 2 ) 1
( x) y00 ( x) y11 ( x) y0 0 ( x) y1 1 ( x) H3
其中
0 ( x0 ) 1
0 ( x1 ) 0
( x1 ) 0 ( x0 ) 0 0 0
1 ( x0 ) 0
0 ( x0 ) 0

计算方法 13 Hermite插值资料

计算方法 13 Hermite插值资料

x x1
x0 x0
2
(x
x1 )l1( x)2.
记 h x1 x0
A0 (x)
1
2
x
x0 h
1
x
x0 h
2
A1 ( x)
3
2
x
x0 h
x
x0 h
2
B0 (x)
h
x
x0 h
1
x
x0 h
2
B1 ( x)
h
x
x0 h
1 x
x0
2
h
置 x0 0, x1 1,则
观察上面的条件,可知
n个插值节点xk , k 0,1,, n, k j是插值基函数Aj (x)的二重 零点, 而x j不是Aj (x)的零点,然而基函数Aj (x)是2n 1次多项 式。故我们可以假设
Aj ( x) D j (ax b)( x x0 )2 ( x x j1 )2 ( x x j1 )2 ( x xn )2
A0 ( x)
x0
x1
B0 ( x)
x0
x1
A1( x)
Bj (x) (x x j ) l j (x) 2
再构造 Aj ( x) : 由于第一个方程用于确定与函数值相关的条件,因此,有
Aj ( xk ) 0, k 0,1,, n, 且k j; Aj ( xk ) 1, k j.
而第二个方程用于确定与导数值相关的条件,因此,有
Aj ( xk ) 0, k 0,1,, n.

n
n
H 2n1( x) Aj ( x) y j B j ( x) yj ,
j0
j0
其中插值基函数 Aj ( x) ,B j ( x) 都是 2n 1 次式。由于 插值问题的解存在唯一性定理,有

5.4埃尔米特(Hermite)插值

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插值

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)插值
一、 埃尔米特插值多项式
为了使插值函数能更好的切合原来的函数,许多 问题不但要求节点上的函数值相等,还要求导数值相 同,甚至高阶导数也相等,这类插值问题称为埃尔米 特插值。

数值分析实验四Hermite插值法

数值分析实验四Hermite插值法

数值分析实验报告
专业:计算机科学与技术
班级:14汉(2)
学号:20141501069
姓名:于童
指导教师:马季骕老师
实验
结果
果分析
通过本次实验我对分段三次Hermit插值有了更深刻更全面的掌握,它在给定了节点处的函数值和导数值以后,构造了一个整体上具有一阶连续微商的插值函数。

分段三次Hermit插值降低了插值多项式的次数,而且保证了插值函数在节点处一阶导数连续,从而使插值函数的光滑性更好。

但是在实际问题中给出节点处的函数值比较方便,给出导数值就很困难了。

分段三次Hermit插值函数属于插值曲线,适合于已知曲线上的某些点而生成曲线的情形,在许多实际问题中缺少灵活性和直观性。

况且它只具有一阶光滑性,但很多实际问题中需要更好的光滑性,这就要求有更好的方法来解决问题,比如Bezier曲线,B样条曲线等。

Hermite插值公式

Hermite插值公式

f ( n+r +2 ) (ξ ) 即得 f ( x) H ( x) = wn ( x) wr ( x) (n + r + 2)!
14
若r = n, 则相应的Hermite插值多项式为
H ( x) = ∑ hk ( x) f ( xk ) + ∑ hk ( x) f ′( xk )
k =0 k =0 n n
y0 = 2 , y1 = 3
′ ′ y 0 = 0 , y1 = 1
′ ′ H 3 ( x) = y0 h0 ( x) + y1h1 ( x) + y0 h0 ( x) + y1h1 ( x)
x x0 x x1 x x1 x x0 = y0 1 + 2 x x + y1 1 + 2 x x x x x1 x0 0 1 0 0 1 1
由条件(1)知
F ( x) = F ( x0 ) = F ( x1 ) = L = F ( xn ) = 0
F ′( x0 ) = F ′( x1 ) = L = F ′( xr ) = 0
13
即F (t ) = 0有n r + 1个单根x, xr +1 , xr +2 ,L, xn 和r + 1个二重根x0 , x1 ,L, xr .
i
n
------(7)
由条件(3)知hk ( xk ) = 1
C=
1
∏ (x
i =0
r
k
xi )
2
i =r +1 i≠k
∏ (x
n
k
xi )
将C代入式(7),得
wr ( x) hk ( x) = lkn ( x), wr ( xk )

hermit插值

hermit插值

16 多项式(12)常用作分段低次插值,称为分段三次Hermite插值.
x − x1 2 h0 ( x) = ( x − x0 )( ) x0 − x1 x − x0 2 h1 ( x) = ( x − x1 )( ) x1 − x0
例1.
已知f ( x )在节点1,处的函数值为f (1) = 2 , f ( 2 ) = 3 2 f ( x )在节点1,处的导数值为f ′(1) = 0 , f ′( 2 ) = −1 2
8
其中,
wr ( x) = ∏ ( x − xi )
r
wr ( xk ) = ∏ ( xk − xi )
i =0
n
i =0 r
x − xi lkn ( x) = ∏ i =0 xk − xi
i≠k
综合(1)(2)得到 hk ( x) ( k = 0,1,⋯ n) 即式(6),(8)
2.求解 hk ( x) (k = 0,1,⋯ n)
i =0 i≠k i = r +1 r n
将A,B代入式(5),得
′ ′ hk ( x) = {1 − ( x − xk )[lkn ( xk ) + lkr ( xk )]}lkn ( x)lkr ( x) ------(6) k = 0,1,⋯, r
6
其中,
x − xi lkn ( x) = ∏ i =0 xk − xi
n i≠k r
x − xi lkr ( x) = ∏ i =0 xk − xi
i≠k n
1 ′ lkn ( xk ) = ∏ i =0 xk − xi
i≠k
r
1 ′ lkr ( xk ) = ∏ i =0 xk − xi
i≠k

Hermite插值法

Hermite插值法
12
例1:已知函数 :已知函数y=f(x)数据表如右 数据表如右 图,试求满足这个数据表的三次 Hermite插值多项式,并求 插值多项式, 插值多项式 f(1.5),f(1.7)的近似值。 的近似值。 的近似值
x y y’
1 2 0
2 3
-1
解:
x0 = 1, x1 = 2
x − x0 h
y0 = 2 , y1 = 3
求一个次数不超过2n+1次的多项式H(x)使 求一个次数不超过2n+1次的多项式H(x)使 2n+1次的多项式H(x)
H ( xi ) = f ( xi ) = yi H ′( xi ) = f ′( xi ) = yi′
i = 0 ,1,L , n i = 0 ,1,L , n
这种带有导 数的多项式 问题, 插值 问题, 称为 Hermite插 Hermite插 值问题。 值问题。 1
ϕ 0 ( x) = (1 + 2 x)(1 − x) 2
x 0 y 1 y’ 0 x 0 y 0 y’ 1
1 0 0 1 0 0
ϕ1 ( x) = x(1 − x) 2
6
三次Hermite插值公式的简化 三次Hermite插值公式的简化 Hermite
我们进行如 下改造! 下改造!
x − x0 x − x0 = ϕ0 α 0 ( x) = ϕ0 h x1 − x0 x1 − x x1 − x α1 ( x ) = ϕ 0 x − x = ϕ0 h 1 0
′ ′ H 3 ( x) = y0α 0 ( x) + y1α1 ( x) + y0 β 0 ( x) + y1β1 ( x)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验报告五
一、实验目的
理解Hermite插值方法,掌握Hermite插值算法设计
二、实验内容
使用vc++编程,实现该方法,即Hermite插值法
三、实验步骤
#include <iostream.h>
double herm(double x0,double x1,double y0,double y1,double h0,double g0,double g1,double x)
{
d oubl
e alp0,alp1,bta0,bta1,t;double s;
t=h0*h0;
a lp0=(x-x1)*(x-x1)*(h0+2*(x-x0))/t/h0;
a lp1=(x-x0)*(x-x0)*(h0-2*(x-x1))/t/h0;
b ta0=(x-x0)*(x-x1)*(x-x1)/t;
b ta1=(x-x1)*(x-x0)*(x-x0)/t;
s=y0*alp0+y1*alp1+g0*bta0+g1*bta1;
r eturn(s);
}
void main()
{
int n=7;double p0;double pn; double aa[8],bb[8],s=0;
double xx[8]={0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9};
double yy[8]={0.4794,0.6442,0.7833,0.8912,0.9636,0.9975,0.9917,0.9463};
double g[8];
int i;
double a[8],c[8],h[8];
cout<<"Please input p0 and pn"<<endl;
cin>>p0;cin>>pn;
for(i=0;i<=n-1;i++)
{
h[i]=xx[i+1]-xx[i];
c out<<"h["<<i<<"]="<<h[i]<<endl;
}
c[0]=1;g[0]=3*(yy[1]-yy[0])/h[0]-p0*h[0]/2;
for( i=1;i<=n-1;i++)
{
a[i]=h[i]/(h[i]+h[i-1]);
c[i]=1-a[i];
}
for(i=1;i<n;i++)
{
c out<<"a["<<i<<"]="<<a[i]<<endl;
c out<<"c["<<i<<"]="<<c[i]<<endl;
}
for( i=1;i<=n-1;i++)
{
g[i]=3*(c[i]*(yy[i+1]-yy[i])/h[i]+a[i]*(yy[i]-yy[i-1])/h[i-1]);
}
a[n]=1;
g[n]=3*(yy[n]-yy[n-1])/h[n-1]+pn*h[n-1]/2;
for(i=0;i<=n;i++)
c out<<"g["<<i<<"]="<<g[i]<<endl;
a a[0]=2;bb[0]=c[0]/aa[0];g[0]=g[0]/aa[0];
for(i=1;i<=n-1;i++)
{
a a[i]=2-a[i]*bb[i-1];
b b[i]=c[i]/aa[i];
g[i]=(g[i]-a[i]*g[i-1])/aa[i];
}
a a[n]=2-a[n]*bb[n-1];
g[n]=(g[n]-a[n]*g[n-1])/aa[n];
for(i=n-1;i>=0;i--)
{
g[i]=g[i]-bb[i]*g[i+1];
}
c out<<endl;
for(i=0;i<=n;i++)
cout<<"g["<<i<<"]="<<g[i]<<endl;
double ss;double c0,c1,d0,d1,g0,g1,h1;
double x0;cout<<"Please input interpolation point x0:"<<endl;cin>>x0;
if(x0>=0.5 && x0<0.7)
{
c0=xx[0];c1=xx[1];d0=yy[0];d1=yy[1];h1=h[0];g0=g[0];g1=g[1];
s s=herm(c0,c1,d0,d1,h1,g0,g1,x0);
c out<<ss<<endl;
}
else if(x0>=0.7 && x0<0.9)
{
c0=xx[1];c1=xx[2];d0=yy[1];d1=yy[2];h1=h[1];g0=g[1];g1=g[2]; s s=herm(c0,c1,d0,d1,h1,g0,g1,x0);
c out<<ss<<endl;
}
else if(x0>=0.9 && x0<=1.1)
{c0=xx[2];c1=xx[3];d0=yy[2];d1=yy[3];h1=h[2];g0=g[2];g1=g[3]; s s=herm(c0,c1,d0,d1,h1,g0,g1,x0);
c out<<ss<<endl;
}
else if(x0>=1.1 && x0<=1.3)
{c0=xx[3];c1=xx[4];d0=yy[3];d1=yy[4];h1=h[3];g0=g[3];g1=g[4]; s s=herm(c0,c1,d0,d1,h1,g0,g1,x0);
c out<<ss<<endl;
}
else if(x0>=1.3 && x0<=1.5)
{
c0=xx[4];c1=xx[5];d0=yy[4];d1=yy[5];h1=h[4];g0=g[4];g1=g[5]; s s=herm(c0,c1,d0,d1,h1,g0,g1,x0);
c out<<ss<<endl;
}
else if(x0>=1.5 && x0<=1.7)
{
c0=xx[5];c1=xx[6];d0=yy[5];d1=yy[6];
h1=h[5];g0=g[5];g1=g[6];
s s=herm(c0,c1,d0,d1,h1,g0,g1,x0);
c out<<ss<<endl;
}
else if(x0>=1.7 && x0<=1.9)
{
c0=xx[6];c1=xx[7];d0=yy[6];d1=yy[7];h1=h[6];g0=g[6];g1=g[7]; s s=herm(c0,c1,d0,d1,h1,g0,g1,x0);
c out<<ss<<endl;
}
else
c out<<"The data error,please input again!"<<endl;
}
四、运行结果。

相关文档
最新文档