hermite插值多项式的例题
课程设计---Hermite 插值法的程序设计及应用
课程设计说明书题目:Hermite 插值法的程序设计及应用学生姓名:学院:班级:指导教师:2012年 1月 5日摘要Hermite 插值是数值分析中的一个重要内容,在相同的节点下得到比拉格朗日插值更高次的插值多项式,而且,相应的曲线在部分节点处也更光滑.在我们所学课程中,只给出了当所有节点处一阶导数均已知时的Hermite 插值.但在实际应用中,并不是所有节点处的一阶导数都是已知的.为此,通过查阅文献、学习总结,给出了更具一般性的Hermite 插值公式.已有的Hermite 插值公式成为本文所得结果的一个特例.本次课程设计,对Hermite 插值法进行了总结,包括Hermit插值法的理论推导,不同情形下的例,以及在解决实际问题中的应用.同时也给出了Hermite插值公式的Matlab算法.关键词Hermite 插值;Matlab 实现;数值分析引言 (1)第一章 Hermite插值 (2)§1.1 Hermite插值的概念 (2)§1.2 Hermite插值简单情形 (3)§1.2.1简单情形解的存在性 (3)§1.2.2 简单情形解的存在唯一性 (5)§1.2.3插值余项 (5)§1.3 Hermite插值其他情形................................ . (5)第二章 Hermite插值的Matlab实现 (9)§2.1 导数完全情形Hermite插值的Matlab实现................... ..9 §2.2导数不完全情形Hermite插值的Matlab实现.. (10)§2.3 Hermite插值在实际问题中的应用 (13)参考文献 (15)附录A (16)附录B (17)附录C (19)在实际工作中, 人们得到的一些数据通常是一些不连续的点, 在土木工程、流体力学、经济学和空气动力学等学科中经常要遇到这样的问题. 此时, 这些数据如果不加以处理, 就难以发现其内在的规律性. 如果用户想得到这些分散点外的其他数值, 就必须运用这些已知的点进行插值.因此,对近似公式的构造产生了插值问题.在实际问题中,两个变量的关系)(x f y =经常要靠实验和观测来获得,而在通常的情况下只能得到)(x f 在有限个点上的值.,,1,0),(n i x f y i ==人们希望找到)(x f 的一个近似函数)(x y φ=,使得i i y x =)(φ,.,,1,0n i = ○1 此时,)(x f 称为被插值函数,点n i x x x ,,,0 称为插值结点,)(x φ称为插值函数,○1为插值条件. 常用的插值法有Lagrange 插值、Newton 插值、最近邻插值、Hermite 插值和三次样条插值插值法等. Lagrange 插值在向量X 区域内的插值较准确, 但向量X 区域之外则不太准确.Newton 插值仅适用于等距节点下的牛顿向前(后) 插值. 最近邻插值是最简便的插值, 在这种算法中, 每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值, 当图像中包含像素之间灰度级变化的细微结构时, 最近邻插值法会在图像中产生人工的痕迹. 最近邻插值的特点是简单、快速, 缺点是误差较大; 三次样条插值一阶和二阶连续可导, 插值曲线光滑, 插值效果比较好, 应用较广Newton 插值和Lagrange 插值虽然构造比较简单,但都存在插值曲线在节点处有尖点、不光滑、插值多项式在节点处不可导等缺点.为了保证插值多项式)(x p n 能更好地逼近)(x f , 对)(x p n 增加一些约束条件, 例如要求)(x p n 在某些结点处与)(x f 的微商相等, 这样就产生了切触插值问题.切触插值即为Hermite 插值.它与被插函数一般有更高的密合度.本课程设计主要对Hermite 插值法进行总结,对其一般情况,特殊情况进行更进一步的学习,尽量实现其在Matlab 及C++上的程序运行.第一章 Hermite 插值实际问题中应用较广为Newton 插值和Lagrange 插值,虽然这辆种插值法构造比较简单, 但都存在插值曲线在节点处有尖点、不光滑、插值多项式在节点处不可导等缺点.为了克这些缺点,我们引入了Hermite 插值.§1.1 Hermite 插值的概念定义1.1 许多实际插值问题中,为使插值函数能更好地和原来的函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应的导数值也相等,甚至要求高阶导数也相等.这类插值称作切触插值,或埃尔米特(Hermite)插值.该定义给出了Hermite 插值的概念,由此得出Hermite 插值的几何意义,如图1.1.定义1.2 满足上述要求的插值多项式是埃尔米特插值多项式.记为H (x ). 定义1.3 求一个次数不大于1++r n 的代数多项式 H(x) ,满足:).(,,2,1),()(.,,2,1),()(n r r i x f x H n i x f x H i i i i ≤='='== (1-1) 则(1-1)为Hermite 插值条件.定义1.4 令 ),(22y x ),(33y x ),(44y x),(11y x),(00y x xy图1.1 Hermite 插值多项式的几何意义含义.)()()()()(00∑∑=='+=rk k k n k k k x f x x f x x H βα (1-2)其中,),,1,0)(x (),,1,0)((k n k n k x k ==βα和都是1++r n 次待定多项式并且它们满足如下条件:⎩⎨⎧=01)(i k x α k i k i ≠= .,,1,0,n k i = .,,1,0,,,1,0,0)('r i n k x i k ===α⎩⎨⎧='01)(i k x β k i k i ≠= .,,1,0,r k i = .,,1,0,,,1,0,0)(n i r k x i k ===β称(1-2)为Hermite 插值公式.解决Hermite 插值问题,就是在给定结点处函数值与导数值的基础上根据插值公式构造Hermite 插值多项式,并根据已知条件解出多项式系数.§1.2 Hermite 插值简单情形已知函数表: x0x 1x 2x … m x … n x )(x f0y 1y 2y … m y … n y )(x f ' 0'y 1'y 2'y … m y ' … n y '求一个插值多项式,使其满足条件数表.由于数表中包含22+n 个条件,所以能够确定次数不大于12+n 的代数多项式 )(12x H n +.此情形为导数个数与函数值个数相等的情形,即 Hermite 插值问题的最简单也是最常用情形.1.2.1简单情形解的存在性由于Hermite 插值公式(1-2)已给出,接下来只需构造出)(x k α及)(x k β,即认为其存在.在此简介Lagrange-Hermite 插值法构造插值多项式.Step1 构造)(x k α(n k ,,1,0 =)由条件)(0)(')(k i x x i k i k ≠==αα知),,,1,0(k i r i x i ≠= 是)(x k α的二重零点.已知Lagrange 插值基函数)(x l k 是n 次多项式,且具有性质⎩⎨⎧=≠==i k i k x l ki i k ,1,0)(δ, 则2n 次多项式[]2)(x k k 也具有性质[]ki i k x l δ=2)(,而[]2)(x l k 的一阶导数在)(k i x i ≠处的值[]()0)()(2)(2='='i k i k i k x l x l x l 所以当k i ≠时,i x 也都是[]2)(x k k的两重零点.注意到)(x h k 是12+n 次多项式,而[]2)(x l k 是n 2次多项式,因此可设),,2,1,0)(()()(2n k x l b ax x k k =+=α其中b a ,为待定常数.显然k i ≠时满足0)(')(==i k i k x x αα,现只要求出b a ,满足k i =时,满足0)(',1)(==k k k k x x αα即可.由此得到确定b a ,的两个方程:)(2)())(()(2)(1)()()()(22=+'=++'='=+=+=a x l x al b ax x l x l x b ax x l b ax x k k k k k k k k k k k k k k k k k αα解出 k k kk k x x l b x l a ⋅'+='-=)(21)(2 于是[])())((21)(2x l x x x l x k k k kk -'-=α. Step2 构造)(x k β ),,1,0(n k =由条件)(0)(')(k i x x i k i k ≠==ββ知),,,1,0(k i r i x i ≠= 是)(x k β的二重零点.因此可设)(x k β也含因子)(2x l k ,又0)(=k k x β,所以)(x k β还含有因式)(k x x -,因此设)()()(2x l x x A x k k k -=β,其中A 为待定常数.显然)(x k β是12+n 次多项式,且当k i ≠时满足0)(')(==i k i k x x αα,由,1)(='k kx β可确定A 如下: 1)()(2)()()(2=='⋅⋅-+='A x l x l x x A x Al x k kk k k k k k k β所以 )()()(2x l x x x k k k -=β.到此为止,Hermite 插值问题的解)(12x H n +为[],)()()())((21)(2020k k nk k k kn k k k k f x l x x f x l x x x l x H '-+-'-=∑∑== 特别地,当=n 1时,满足113003113003)(,)(,)(,)(y x H y x H y x H y x H '=''='==的三阶Hermite 插值多项式为+⎪⎪⎭⎫ ⎝⎛--⎥⎦⎤⎢⎣⎡'-+⎪⎪⎭⎫ ⎝⎛--+=21010000103)(21)(x x x x y x x y x x x x x H 2010111101)(21⎪⎪⎭⎫ ⎝⎛--⎥⎦⎤⎢⎣⎡'-+⎪⎪⎭⎫ ⎝⎛--+x x x x y x x y x x x x .§1.2.2 简单情形解的存在唯一性为了简便理解,下面用流程图来说明解的存在唯一性.详见附录A.§1.2.3 插值余项定理 1.1 设)(x f 在包含1+n 个插值结点的最小区间[b a ,]上22+n 次连续可微,则存在与x 有关的ξ,b a <<ξ,使得),()!22()()()(222x w n f x H x f n +=-+ξ 其中∏=-=n0j )()(j x x x w .由此可得到三阶Hermite 插值多项式的误差为:,)()(!4)()()()(212043x x x x f x H x f x R --=-=ξ ξ在0x 与1x 之间.§1.3 Hermite 插值其他情形已知函数表:x 0x1x … m x … n x y0y 1y … m y … n yy ' 0y ' 1y ' … m y '求一个插值多项式,使其满足条件数表.该问题中,导数个数与函数值个数不相等.我们称之为Hermite 插值中其他情形.在此简介Newton-Hermite 插值法构造插值多项式.先分析插值条件的个数:2++m n 个,那么,所构造的多项式的次数一般不能超1++m n .于是,按牛顿差值的思想,可设);())(()(),()()()(1011n n n m n x x x x x x x x x P x N x H ---=+=++ ωω其中,)(x N n 为n 次牛顿差值多项式;)(x P m 为待定的次数不超过m 次的多项式. 显然:n i x f x N x H i i n i ,,2,1,0),()()( ===为确定)(x P m ,对)(x H 求导:)()()()()()(11x x P x x P x N x H n m n m n++'+'+'='ωω 根据插值条件)()(i i x f x H '=',有)()()()()()()()()(111i n i m i ni n i m i n i m i n i x x P x N x x P x x P x N x H +++'+'='+'+'='ωωω 得到m i x x N x f x P i ni n i i m ,,2,1,0,)()()()(1 =''-'=+ω 于是,把求)(x P m 的问题转化为又一个插值问题已知)(x P m 的函数表 x1x 2x … m x )(x P m )(1x P m )(2x P m … )(m m x P确定一个次数不超过m 的插值多项式)(x L m ,使其满足)()(i m i m x P x L =. 根据牛顿差值公式.)())(](,,[)](,[)()(10000100----++-+=m m m m m m x x x x x x x x P x x x x P x P x P将上式带回,即得到满足条件;,,2,1,0),()(;,,2,1,0),()(m k x f x H n k x f x H k k k k ='='==的Newton-Hermite 插值多项式.例1.1 已知函数表: x 0x1x y 0y1y y ' 0'y求一个插值多项式H (x ),使其满足条件:),()(),()(),()(001100x f x H x f x H x f x H '='==该问题中,导数个数与函数值个数不相等.我们称之为Hermite 插值中其他情形.在此简介Newton-Hermite 插值法构造插值多项式.先由函数表xx 0 x 1 yy 0 y 1作线性插值,即为 []()01001,)()(x x x x f x f x P -+= 再注意到H (x )与P 1 (x )在节点x 0, x 1上函数值相同,即:11110010)()()()(y x P x H y x P x H ====于是,它们的差可以设为 ))(()()(101x x x x K x P x H --=-其中K 为待定常数,上式又可记为:))(()()(101x x x x K x P x H --+= (1-3)为确定K ,对上式求导:)()()(101x x x x K x P x H -+-+'='令x = x 0,代入上式,并且注意到插值条件00)(y x H '='得: []010*******)(,)()()(y x x K x x f x x K x P x H '=-+=-+'='于是有[]01010x x y x x f K -'--=将上式代入(1-3)得[]))(()()(10010101x x x x x x y x x f x P x H ---'--+=[][]))(()(,)(10010100100x x x x x x y x x f x x x x f x f ---'--+-+= (1-4)可以验证(1-4)所确定的H (x )确实满足插值条件(1-1).同时也可以看到,构造牛顿——埃米尔特插值多项式,完全采用牛顿插值的构造思想.最后,也可以把(1-4)式整理成拉格朗日形式:1001112010001101010)()(y x x xx x x y xx x x y xx x x x x x x x x x H '-⎪⎪⎭⎫ ⎝⎛--+⎪⎪⎭⎫ ⎝⎛--+⎪⎪⎭⎫ ⎝⎛----+-=插值余项为()()120)3(2!3)()(x x x x f X R --=ξ, ξ在0x 与1x 之间.第二章 Hermite 插值的Matlab 实现§2.1 导数完全情形Hermite 插值的Matlab 实现在实际应用中,应用最广也是最简单的Hermite 插值情形即为导数完全的情况下,Hermite 插值多项式的拟合.我们首先讨论该情形下的Matlab 程序.在给出程序之前,我们首先给出该公式所应用的Hermite 插值公式. 定理2.1 设在节点b x x x a n ≤<<≤≤ 21上,,)(,)(j j j j y x f y x f '='=,其中n j ≤≤1,则函数)(x f 在结点处n x x x ,,,21 处的Hermite 插值多项式为∑=+--=ni i i i i i i y y y a x x h x y 1])2)([()(其中 ∑∏≠=≠=-=--=nij j ji i nij j ji j i x x a x x x x h 1211;)(.该定理的证明详见文献.该情形下对应的Matlab 程序及流程图详见附录B . 为验证该程序的正确性与有效性,下面给出例2.1. 例2.1 设有如下数据表:x0 0.5 1 1.5 2 2.5 3 3.5)sin(x y = 0 0.4794 0.8145 0.9975 0.9093 0.5985 0.1411 -0.3508 )cos(x y =' 1 0.8776 0.5403 0.0707 -0.4161 -0.8011 -0.9900 -0.9365在Matlab 工作台输入如下命令:>> x0=[0,0.5,1,1.5,2,2.5,3,3.5];y0=[0,0.4794,0.8415,0.9975,0.9093,0.5985,0.1411,- 0.3508]; y1=[1,0.8776,0.5403,0.0707,-0.4161,-0.8011,-0.9900,-0.9365]; x=x0;y=hermite(x0,y0,y1,x); yplot(x,y) y2=sin(x); hold onplot(x,y2,'*r') 则输出结点处的插值:y =0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411 -0.3508)sin(x y =的Hermite 插值多项式的拟合图像如图:§2.2导数不完全情形Hermite 插值的Matlab 实现在实际应用中,并不是所有节点处的一阶导数都是已知的,为此,我们给出了更具一般性的Hermite 插值公式及其算法实现,已有的Hermite 插值公式成为本文所得结果的一个特例.在此首先给出求解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
5.4 三次Hermite插值
P ( m ) ( xi ) f ( m ) ( xi ) f i ( m )
i 0 ,1, , n
定义. 称满足(1)或(2)式的插值问题为Hermite插值, 称满足(1)或(2)式的插值多项式P(x)为Hermite插值多项式, 记为 H k ( x) ,k为多项式次数.
2
由于0 ( x0 ) 0 ( x1 ) 0( x1 ) 0, 故 0 ( x) 含有 ( x x0 )( x x1 ) 因子。可设
0 ( x) c( x x0 )( x x1 )2
2
其中c为待定系数。
1 . 由 0( x0 ) 1, 可得 c 2 ( x0 x1 )
2 2
x x0 x x 0 1
2
2
2 H 3 ( x) 21 2( x 1) x 2 2 31 2( x 2) x 1
x 2 x 12
3 x 3 13x 2 17x 9
f (1.5) H 3 (1.5) 2.625 f (1.7 ) H 3 (1.7 ) 2.931
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 之间。
x x1 x x0 1 ( x) 1 2 x x x x 0 1 1 0
5.4埃尔米特(Hermite)插值
H3(xi) = yi
H´3(xi) = y´i x
(i=0,1,2)
1 1
0 0 0
1 1
y ( x) y f ( x )
解
所求三次Hermite的插值多项式为
H 3 ( x ) a0 a1 x a2 x 2 a3 x 3
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 )
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 ),
其中
( x ) ( x x0 )( x x1 )( x xn )
(a, b)
定理的证明可仿照Lagrange插值余项的证明方法
实际中使用最广泛的是三次Hermite插值多项式,即 n=1的情况
计算方法
H 3 ( x ) j ( x ) f ( x j ) j ( x ) f ( x j )
埃尔米特(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; }。
基于降阶法的hermite插值多项式求解方法
基于降阶法的hermite插值多项式求解方法基于降阶法的Hermite插值多项式求解方法是一种数值分析方法,用于求解函数在给定点的值。
该方法的基本思想是将高阶多项式转化为低阶多项式,从而简化计算过程。
具体步骤如下:1. 定义插值点:选择一组已知的插值点 $(x_0, y_0), (x_1, y_1), \ldots, (x_n, y_n)$,其中 $x_0 < x_1 < \ldots < x_n$。
2. 构造降阶多项式:对于 $i = 0, 1, \ldots, n$,定义 $p_i(x) = (x - x_i)\cdot q_i(x)$,其中 $q_i(x)$ 是 $(n-1)$ 阶多项式。
3. 求解 $q_i(x)$:对于 $i = 0, 1, \ldots, n$,求解 $(n-1)$ 阶方程$q_i(x_j) = \delta_{ij}$,其中 $\delta_{ij}$ 是 Kronecker delta 函数。
4. 求解 $p_i(x)$:对于 $i = 0, 1, \ldots, n$,求解 $(n+1)$ 阶方程$p_i(x_j) = y_j$。
5. 计算插值多项式:最终的插值多项式为 $H(x) = \sum_{i=0}^{n} p_i(x)\cdot \varphi_i(x)$,其中 $\varphi_i(x) = \frac{(x - x_0)(x - x_1) \cdots (x - x_{i-1})(x - x_{i+1}) \cdots (x - x_n)}{(x_i - x_0)(x_i - x_1) \cdots (x_i - x_{i-1})(x_i - x_{i+1}) \cdots (x_i - x_n)}$。
通过以上步骤,可以求解出满足给定插值条件的 Hermite 插值多项式。
在实际应用中,可以根据具体问题选择合适的插值点,并利用该方法进行数值计算。
数值计算方法实验之Hermite多项式插值(Python代码)
数值计算⽅法实验之Hermite多项式插值(Python代码)⼀、实验⽬的在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]⽽⼜需要给出其在[a,b]上的值时,按插值原则f(x i)= y i(i= 0,1…….,n)求出简单函数P(x)(常是多项式),使其在插值基点x i,处成⽴P(x i)= y i(i=0,1,……,n),⽽在[a,b]上的其它点处成⽴f(x)≈P(x).⼆、实验原理三、实验内容求f(x)=x4在[0,2]上按5个等距节点确定的Hermite插值多项式.四、实验程序1import numpy as np2from sympy import *3import matplotlib.pyplot as plt456def f(x):7return x ** 48910def ff(x): # f[x0, x1, ..., xk]11 ans = 012for i in range(len(x)):13 temp = 114for j in range(len(x)):15if i != j:16 temp *= (x[i] - x[j])17 ans += f(x[i]) / temp18return ans192021def draw(L, newlabel= 'Lagrange插值函数'):22 plt.rcParams['font.sans-serif'] = ['SimHei']23 plt.rcParams['axes.unicode_minus'] = False24 x = np.linspace(0, 2, 100)25 y = f(x)26 Ly = []27for xx in x:28 Ly.append(L.subs(n, xx))29 plt.plot(x, y, label='原函数')30 plt.plot(x, Ly, label=newlabel)31 plt.xlabel('x')32 plt.ylabel('y')33 plt.legend()3435 plt.savefig('1.png')36 plt.show()373839def lossCal(L):40 x = np.linspace(0, 2, 101)41 y = f(x)42 Ly = []43for xx in x:44 Ly.append(L.subs(n, xx))45 Ly = np.array(Ly)46 temp = Ly - y47 temp = abs(temp)48print(temp.mean())495051def calM(P, x):52 Y = n ** 453 dfP = diff(P, n)54return solve(Y.subs(n, x[0]) - dfP.subs(n, x[0]), [m,])[0] 555657if__name__ == '__main__':58 x = np.array(range(11)) - 559 y = f(x)6061 n, m = symbols('n m')62 init_printing(use_unicode=True)6364 P = f(x[0])65for i in range(len(x)):66if i != len(x) - 1:67 temp = ff(x[0:i + 2])68else:69 temp = m70for j in x[0:i + 1]:71 temp *= (n - j)72 P += temp73 P = expand(P)7475 P = P.subs(m, calM(P, x))76 draw(P, newlabel='Hermite插值多项式')77 lossCal(P)五、运算结果。
数值分析实验六(分段三次Hermite插值)
数值分析实验六(分段三次Hermite插值)《数值分析》实验报告实验编号:实验六课题名称:分段三次Hermite插值一、算法介绍给定的函数为f(x)=1/(25*x*x+1),将给定区间分成10分,得到11个节点:x[0],x[1],...,x[10],构造插值函数的基函数。
当x在(x[0],x[1])区间上时,H[0] = (x-x[0])*[((x-x[1])/(x[0]-x[1]))^2]。
其余的区间为H[0]=0。
h[0]= [1+2*(x-x[0])/(x[1]-x[0])]*[((x-x[1])/(x[0]-x[1]))^2]。
当x在[x[i-1],x[i]] (i=1,2,3, (9)区间上时,H[i]=(x-x[i])*[((x-x[i-1])/(x[i]-x[i-1]))^2],h[i]=[1+2*(x-x[i])/(x[i-1]-x[i])]*[((x-x[i-1])/(x[i]-x[i-1]))^2)。
当x在(x[i],x[i+1]](i=1,2,3,…,10)区间上其余的区间为H[i]=(x-x[i])[((x-x[i+1])/(x[i]-x[i+1]))^2],h[i]=[1+2*(x-x[i])/(x[i+1]-x[i])]*[((x-x[i+1 ])/(x[i]-x[i+1]))^2]。
其余区间上均为H[i]=0,h[i]=0(i=1,2,…,10)。
当x在(x[9],x[10])区间上时,H[10] = (x-x[9])(((x-x[10])/(x[9]-x[10]))^2).其余的区间为H[10]=0.h[10]= (1+2*((x-x[9])/(x[10]-x[9])))(((x-x[10])/(x[9]-x[10]))^2).其余区间h[10]=0。
构造函数H(x) =∑(y[i]*h[i]+y'[i]*H[i],(i=0,1,…,10)。
二、程序代码// testV iew.cpp : implementation of the CT estV iew class//#include "stdafx.h"#include "test.h"#include "testDoc.h"#include "testView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////// //////////// CTestV iewIMPLEMENT_DYNCREA TE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView)//{{AFX_MSG_MAP(CTestView)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CV iew::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////// //////////// CTestV iew construction/destructionCTestView::CTestV iew(){// TODO: add construction code here}CTestView::~CT estView(){}BOOL CTestView::PreCreateWindow(CREA TESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying // the CREA TESTRUCT csreturn CV iew::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////// //////////// CTestV iew drawingvoid CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereint i,j,k;double x,y,p_x,p_y,l,xx[100],f[100],F[100],sum,p_sum;CPen MyPen,*OldPen;pDC->SetViewportOrg(400,400); //定义坐标原点for(i=-500;i<500;i++){pDC->SetPixel(0,i,RGB(0,0,0));pDC->SetPixel(i,0,RGB(0,0,0)); //画出坐标}pDC->TextOut(-210,5,"-1");pDC->TextOut(196,5,"1");//原函数MyPen.CreatePen(PS_SOLID,1,RGB(255,0,0));//定义画笔颜色OldPen=pDC->SelectObject(&MyPen);x=-1.0,y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->MoveTo(p_x,p_y);for (x=-1.0;x<=1.0;x+=0.0001){y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->LineT o(p_x,p_y);}pDC->SelectObject(OldPen);MyPen.DeleteObject();//分段三次Hermite插值MyPen.CreatePen(PS_SOLID,1,RGB(0,0,0)); OldPen=pDC->SelectObject(&MyPen); x=-1.0,y=1.0/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->MoveTo(p_x,p_y);x=-1.0;for(i=0;i<=10;i++){f[i]=1/(1+25*x*x);xx[i]=x;F[i]=-50*x/(1+25*x*x)/(1+25*x*x); //导数x+=0.2;}x=-1.0;for(j=0;j<=1000;j++){sum=0;for(i=0;i<=10;i++){if(x==xx[i]){sum=f[i];p_x=x*200,p_y=-sum*200;pDC->LineT o(p_x,p_y);break;}if(xxx[i]){y=(1+2*(x-xx[i])/(xx[i+1]-xx[i]))*(x-xx[i+1])*(x-xx[i+1])/(xx[i]-xx[i+1])/(xx[i]-xx[i+1]);sum+=f[i]*y;y=(1+2*(x-xx[i+1])/(xx[i]-xx[i+1]))*(x-xx[i])*(x-xx[i])/(xx[i+1]-xx[i])/(xx[i+1]-xx[i]);sum+=f[i+1]*y;y=(x-xx[i])*(x-xx[i+1])*(x-xx[i+1])/(xx[i]-xx[i+1])/(xx[i]-xx[i+1]);sum+=F[i]*y;y=(x-xx[i+1])*(x-xx[i])*(x-xx[i])/(xx[i+1]-xx[i])/(xx[i+1]-xx[i]);sum+=F[i+1]*y;p_x=x*200;p_y=-sum*200;pDC->LineT o(p_x,p_y);break;}}x+=0.002;}pDC->SelectObject(OldPen);MyPen.DeleteObject();/////////////////////////////////////////////////////////////////// //////////// CTestV iew printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////// //////////// CTestV iew diagnostics#ifdef _DEBUGvoid CTestView::AssertV alid() const{CView::AssertV alid();}void CTestView::Dump(CDumpContext& dc) const{CView::Dump(dc);CTestDoc* CT estV iew::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CT estD oc)));return (CT estDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////// //////////// CTestV iew message handlers三、运算结果截屏红色的曲线为原函数图像,黑色曲线为分段三次Hermite插值曲线四、算法分析上述图像中黑色的曲线为分段分段三次Hermite插值多项式所对应的图像,由图像可看出黑色的分段三次Hermited插值函数图像和拉格朗日、分段线性插值相比与红色被逼近函数的重合度最好,说明分段三次Hermite插值在函数的各节点两边插值函数的导数是相等的,保证了在各节点的平滑性,且不会出现Runge现象。
埃尔米特插值多项式练习题
埃尔米特插值多项式练习题埃尔米特插值多项式练习题埃尔米特插值多项式是一种用于逼近函数的方法,它不仅可以通过给定的函数值来逼近函数的值,还可以通过给定的导数值来逼近函数的导数值。
在数值计算和插值问题中,埃尔米特插值多项式是一种非常有用的工具。
假设我们有一个函数f(x),我们想要通过给定的函数值和导数值来逼近这个函数。
埃尔米特插值多项式可以通过以下步骤来求解:1. 首先,我们需要确定插值点。
插值点是我们已知的函数值和导数值的点。
通常,我们选择一组等距的插值点,以便于计算。
2. 接下来,我们需要构建拉格朗日插值多项式。
拉格朗日插值多项式是通过给定的函数值来逼近函数的值的多项式。
它可以通过以下公式来计算:L(x) = Σ [ f(xi) * Li(x) ] (i=0 to n)其中,Li(x)是拉格朗日基函数,它可以通过以下公式来计算:Li(x) = Π [ (x - xj) / (xi - xj) ] (j=0 to n, j ≠ i)这样,我们就可以得到拉格朗日插值多项式L(x)。
3. 接下来,我们需要构建埃尔米特插值多项式。
埃尔米特插值多项式是通过给定的函数值和导数值来逼近函数的多项式。
它可以通过以下公式来计算:H(x) = Σ [ f(xi) * Hi(x) + f'(xi) * Hi'(x) ] (i=0 to n)其中,Hi(x)是埃尔米特基函数,它可以通过以下公式来计算:Hi(x) = [ 1 - 2 * (x - xi) * Li'(xi) ] * (Li(x))^2Hi'(x)是埃尔米特基函数的导数,它可以通过以下公式来计算:Hi'(x) = (x - xi) * (Li(x))^2这样,我们就可以得到埃尔米特插值多项式H(x)。
通过以上步骤,我们可以得到一个逼近函数f(x)的埃尔米特插值多项式H(x)。
这个多项式可以在给定的插值点上非常精确地逼近函数的值和导数值。
Hermite插值的若干问题研究毕业设计论文
毕业论文(设计)Hermite插值的若干问题研究Study of Hermite interpolation problems申请学位:学士院系:数学与信息科学学院专业:信息与计算科学专业姓名:学号:指导老师:[摘要]本文主要是具体讨论Hermite插值的若干问题,主要介绍了二重Hermite插值在具体应用中出现的实际问题,并通过几个例子说明建立Hermite 插值多项式的方法、两点三次Hermite插值及其余项、Hermite插值公式的相关问题。
并编程计算来比较几种方法。
通过推导和证明得知三次Hermite插值已经较高,再高可能发生Runge现象。
关键词: 二重Hermite插值多项式,唯一性定理,误差定理[Abstract]This paper is detailed to discuss some problems of the Hermite interpolation, mainly introduced the double Hermite interpolation in the specific application of practical problems, and through several examples establish Hermite interpolation polynomial method, two point three times of Hermite interpolation and its remainder term, Hermite interpolation formula of the related problems. And the program calculation to compare several methods. By derivation and proof that cubic Hermite interpolation has been high, high Runge phenomenon may occur againKeywords: Double Hermite interpolation polynomial, the uniqueness theorem, the theorem of the error目录1、Hermite插值概述1.1 Hermite插值定义 (1)1.2 Hermite插值公式的推导 (2)1.3 几个重要的定理 (4)2、两点三次插值及其余项2.1 两点三次插值 (3)2.2 两点三次插值的余项 (4)2.3 三次埃尔米特插值多项式 (6)2.4 二重Hermite插值多式 (7)3、重节点插商与Hermmite插值3.1 重节点插商 (10)4、例题及其解答 (12)5、参考文献 (17)6、附录 (18)7、谢辞 (20)1 Hermite 插值概述1.1 Hermite 插值的定义理论背景:许多实际插值问题中,为使插值函数能更好地和原来的函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应的导数值也相等,甚至要求高阶导数也相等。
Hermite插值法
i = 0 ,1
x0 , x1均为R3 ( x )的二重零点,因此可设
R3 ( x ) = K ( x )( x − x0 )2 ( x − x1 )2
其中K (x )待定
10
构造辅助函数
ϕ (t ) = f (t ) − H 3 (t ) − K ( x )(t − x0 )2 (t − x1 )2
求一个次数不超过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
′ ′ H 3 ( x) = y0α 0 ( x) + y1α1 ( x) + y0 β 0 ( x) + y1β1 ( x)
线性插值基函数代入定理1.5 将Lagrange线性插值基函数代入定理 线性插值基函数代入定理 中的基函数求得三次Hermite插值的基 中的基函数求得三次 插值的基 函数! 函数
x − x1 l0 ( x) = x0 − x1 x − x0 l1 ( x) = x1 − x0
基函数具有 什么表达式? 什么表达式?
4
x − x0 x − x1 α 0 ( x) = 1 + 2 x1 − x0 x0 − x1
2
x − x1 x − x0 α1 ( x ) = 1 + 2 x0 − x1 x1 − x0
Hermite多项式
填写日期:2012
年 12 月 31 日
3
一实验问题实际的插值问题不但要求在节点上函数值要相等而且还要求对应的导数数值也相等
班级: 数学与应用数学
学号:
姓名:
成绩:
一、 实验问题 实际的插值问题不但要求在节点上函数值要相等,而且还要求对应的导数数值也 相等。满足这种要求的插值多项式就是 Hermit 插值多项式。用 matlab 编写一个 函数实现 Hermit 插值多项式。 二、 问题的分析(涉及的理论知识与求解的方法等) 1) 输入各个节点和节点的函数值 x1,x2,…xn 和 y1,y2,…yn 和 各节点的导数值 m1 , m2 ,, mn ; 2)定义
2
四、
问题求解结果
>> x=[1,2]; >> y=[0,0.693147]; >> m=[1,0.5]; >> x0=1.5; >> Hermit(x,y,m,x0) ans = 0.4091
五、实验的总结与体会 通过本次实验,加深了我们对 Hermite 插值法的理解。使我们不仅掌握了它 们的基本原理,而且能够熟练地应用它们来解决实际问题。通过这次实验,能促 进我进一步学习使用 matlab,也算是收获之一。
l ( x) %计算 i
i 0( j i )
x xj
x
i
xj
%求出
li ' ( xi )
%用 x(i)代入 t
' 2 ( x ) (1 2( x x ) l ( x )) l a(i)=(1-2*(t-x(i))*d(i))*l(i)*l(i); %计算 i i i i i ( x)
if n~=m1|n~=m2|m1~=m2 error('The lengths of x,y and m must be equal!'); return; end; f=0; l=sym(ones(1,n)); for (i=1:n) for(j=1:i-1)
Hermite插值
由插值条件
H2n1(xi ) yi f (xi ),
H
' 2 n 1
(
xi
)
yi '
f ' (xi )
(i 0,1, 2,...n)
n
n
设H2n1(x)
j (x) y j
j
(
x)
y
' j
j0
j0
其中, j (x), j (x)为2n 2个基函数。
由Lagrange插值基函数,设想
0
'
j
(
x0
)
'
j
(
x1
)
...
'
j
(
x
j 1
)
'
j
(x
j 1 )
...
'
j
( xn
)
而
j
(
x
j
)
1,
'
j
(
x
j
)
0
则x0 , x1,...x j1, x j1,..., xn是 j (x)的二重零点。
所以,令
j
(x)
C
(
x)
(x
(
j
x x0 )2 (x x1)2...(x x0 )2 (x j x1)2...(x j
Ax j
B)l
' j
(xj
)
0
A 2l B 1
' j
(
x
j
)
2
x
jl
' j
(
x
j
)
故得:
Ch5_2Hrmt插值09用
?
n m pn ( xik ) ( xik x j ) a j xik j f ( xik ) j 0, j xik j 0
a j xik
j j 0
m
f ( xik ) pn ( xik )
j 0, j xik
则有唯一的 n m 1 次多项式 H(x) 满足插值条件
(5.19) 与 (5. 20).
证 设下面的多项式满足定理条件:
m i 0,1, 2,..., n, k H ( xi ) f ( xi ), H ( x ) pn ( x ) n1 ( x ) ak x H ( xik ) f ( xik ), k 0,1, 2,...,0m, k
给定函数 f (x) 与 n 1 互异的节点 x0, x1, , xn, xi0, xi1, , xim x0, x1, , xn ;
寻找一个 n m 1 次的多项式 H(x) , 使其满足
i 0,1, 2,..., n, H ( xi ) f ( xi ), H ( xik ) f ( xik ), k 0,1, 2,..., m, (5.19) (5.20)
求次数不高于 5 的多项式 H5(x),使其满足
H 5 ( xi ) f ( xi ) (i 0,1, 2,3) H 5 ( xi ) f ( xi ) (i 0, 2)
其中 xi 1 i (i 0,1,2,3).
解 (1) 先求满足 p3( xi ) = f ( xi ) (i =0,1,2,3) 的三次多项式 p3(x) ,用牛顿插值多项式。
H ( x ) pn ( x ) n1 ( x ) k 0 ak x k
hermite插值计算公式matlab例题
hermite插值计算公式matlab例题Hermite 插值是一种插值方法,它不仅通过已知的函数值来拟合一个多项式,还利用函数在给定点的导数信息。
这使得 Hermite 插值对于需要在给定点处匹配函数值和导数值的问题非常有用。
下面是一个在 MATLAB 中进行 Hermite 插值计算的简单例子。
假设我们有以下数据点:(1, f(1)), (2, f(2)), (1, f'(1)), (2, f'(2))。
我们要使用 Hermite 插值来计算 f(1.5) 的近似值。
首先,我们定义一个 MATLAB 函数来进行 Hermite 插值:function result = hermite_interpolation(x, y, dy, xi)% x: 数据点的 x 坐标% y: 数据点的函数值% dy: 数据点的导数值% xi: 要进行插值的点的 x 坐标n = length(x);% 初始化插值结果result = 0;for i = 1:n% 计算 Lagrange 基函数的权重Li = 1;for j = 1:nif j ~= iLi = Li * (xi - x(j)) / (x(i) - x(j));endend% Hermite 插值基函数的权重Hi = (1 - 2 * (xi - x(i)) * polyval(polyder(poly(x)), x(i))) * Li^2;% 插值结果的累加result = result + y(i) * Hi + dy(i) * Li;endend接下来,我们使用这个函数进行 Hermite 插值:% 给定数据点x = [1, 2];y = [f(1), f(2)];dy = [f_prime(1), f_prime(2)];% 要进行插值的点xi = 1.5;% 进行 Hermite 插值result = hermite_interpolation(x, y, dy, xi);% 显示插值结果disp(['Hermite interpolation at x = ', num2str(xi), ' is ', num2str(result)]);在这里,f 和 f_prime 是你实际的函数和导数函数。
2.3Hermite插值
4
讨论如下简单情况
f ( x):n + 1个互异节点xi (i = 0,1, 2,……, n) 已知:f ( xi ),f ′( xi )
要求:构造一个多项式H ( x),使其满足 H ( xi ) = f ( xi ),H ′( xi ) = f ′( xi )
H(x)不 过2n+1 超 次
几何意义:即要求代数曲线y = H ( x)经过节点, 又要与y = f ( x)有公切线. xi:二重节点.
0.405465 − 0.346575 = 0.05889 < x0 , x1
已知:f ( x0 ),f ( x1 ),f ′( x0 )
要求:构造一个多项式H ( x),使其满足 H ( x0 ) = f ( x0 ),H ( x1 ) = f ( x1 ),H ′( x0 ) = f ′( x0 )
x f (x)
f ′( x)
1 0 1
2 0.69315
13
取x0 = 1,x1 = 2,f 0 = 0,f1 = 0.69315,f 0′ = 1,
f [x0 , x1] − f ′(x0 ) H2 (x) = f (x0 )+(x − x0 ) f [x0 , x1] + (x − x0 )(x − x1) x1 − x0 f1 − f 0 0.69315 − 0 f [ x0 , x1 ]= = = 0.69315 x1 − x0 2 −1
k =0 k =0
6
n
n
余项定理
定理 若f(x)在区间[a,b]上 2n+2 阶可导, 则对任意 x∈[a,b],存在与x有关的ξ(a<ξ<b), 使得
f (2 n + 2) (ξ ) n 2 R( x) = f ( x) − H ( x) = ∏ (x − x j ) (2n + 2)! j =0
hermite插值多项式的例题
例若()f x 在[a,b]上有三阶连续导数,且已知()f x 在[,]a b 上两个互异的 点01,x x 上的函数值01(),()f x f x 和一阶导数值'0()f x ,试求满足条件 ''001100()(),()(),()()H x f x H x f x H x f x ===的插值多项式,并估计误差。
解由给定的3 个插值条件,显然可确定一个次数不超过2次的埃尔米特插值多项式()H x , 又有()H x 应满足插值条件()()i i H x f x =,(0,1)i =,而节点01,x x 上的线性插值函数1()N x 也满足插值条件1()(),(0,1)i iN x f x i ==,故可设1()()()()H x N x A x x x x-=--,其中A 为待定常数,上式又可记为 101000101()()()()()()[,]()()H x N x A x x x x f x x x f x x A x x x x =+--=+-+--为了确定常数A ,对上式求导,得'0110()[,][()()]H x f x x A x x x x =+-+-,令0x x =代入,且注意插值条件''001010()[,]()()H x f x x A x x f x =+-=, 于是有'01010[,]()f x x f x A x x -=-,即()H x 为'010********[,]()()()()[,]()()f x x f x H x f x x x f x x x x x x x x -=+-+---,当然也可先采用拉格朗日多项式构造,同样得到满足相同条件的插值多项式()H x余项为(3)201()()()()6fR x x x x x ξ=--。
两点三次hermite插值例题
两点三次hermite插值例题Hermite插值是一种数值分析方法,用于在给定的数据点上生成一个多项式函数,以便通过这些数据点来近似描述一个函数。
Hermite插值是利用函数值和导数值来进行插值的一种方法,它可以更精确地逼近给定的数据点。
下面我将通过一个例题来说明Hermite插值的过程。
假设我们有以下数据点,(1, 2), (1, 3), (2, 1), (2, 2),我们要使用Hermite插值来找到通过这些点的多项式函数。
首先,我们需要计算每个数据点的导数值。
因为数据点中有重复的x值,我们需要分别计算每个x值对应的导数值。
对于数据点(1, 2)和(1, 3),我们可以假设它们对应的导数值分别为2和3;对于数据点(2, 1)和(2, 2),我们可以假设它们对应的导数值分别为1和2。
接下来,我们将使用这些数据点和导数值来构建Hermite插值多项式。
Hermite插值多项式的一般形式为:\[P(x) = \sum_{i=0}^{n}f[x_0, x_1, \ldots, x_i](x-x_0)(x-x_1)\ldots(x-x_{i-1}) + \sum_{i=0}^{n}f[x_0, x_1,\ldots, x_i, x_i](x-x_0)(x-x_1)\ldots(x-x_{i-1})^2\]其中,\[f[x_0, x_1, \ldots, x_i]\]表示数据点\[x_0, x_1, \ldots, x_i\]处的插值函数值。
这个式子的第一部分表示通过数据点的函数值进行插值,第二部分表示通过数据点的导数值进行插值。
我们可以根据给定的数据点和导数值,计算出Hermite插值多项式。
最终得到的多项式函数就是通过这些数据点进行Hermite插值得到的结果。
总结起来,Hermite插值是一种利用函数值和导数值进行插值的方法,可以更精确地逼近给定的数据点。
通过计算数据点的导数值和使用Hermite插值多项式的公式,我们可以得到一个通过这些数据点的多项式函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例 若()f x 在[a,b]上有三阶连续导数,且已知()f x 在[,]a b 上两个互异的
点01,x x 上的函数值01(),()f x f x 和一阶导数值'
0()f x ,试求满足条件 ''001100()(),()(),()()H x f x H x f x H x f x ===
的插值多项式,并估计误差。
解 由给定的3 个插值条件,显然可确定一个次数不超过2次的埃尔米特插值多项式()H x , 又有()H x 应满足插值条件()()i i H x f x =,(0,1)i =,而节点01,x x 上的线性插值函数1()N x 也满足插值条件1()(),(0,1)i i N x f x i ==,故可设101()()()()H x N x A x x x x -=--,其中A 为待定常数,上式又可记为
101000101()()()()
()()[,]()()H x N x A x x x x f x x x f x x A x x x x =+--=+-+--
为了确定常数A ,对上式求导,得
'0110()[,][()()]H x f x x A x x x x =+-+-,
令0x x =代入,且注意插值条件''
001010()[,]()()H x f x x A x x f x =+-=, 于是有'01010[,]()f x x f x A x x -=-,即多项式()H x 为
'010********
[,]()()()()[,]()()f x x f x H x f x x x f x x x x x x x x -=+-+--- ,
当然也可先采用拉格朗日多项式构造,同样得到满足相同条件的插值多项式()H x 余项为(3)201()()()()6
f R x x x x x ξ=--。