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 插值问题的一般性公式。
工程数学(12)Hermite插值

共2n 2个方程,可求出2n 2个系数a0 , a1 ,..., a2n , a2n1 .
工程数学
工程数学
Hermite插值多项式的构造
( 2) Lagrange型插值基函数法 设Hermite插值多项式为 H 2 n1 ( x ) hi ( x ) yi hi ( x ) y 'i
hi ( x )应满足条件: (1) hi ( x )应是 2n 1次多项式; i j 1 (2) hi ( x j ) ij i j 0 h 'i ( x j ) 0 ( i,j 0, 1, 2, ,n) hi ( x )应满足条件: (1)hi ( x )应是 2n 1次多项式; i j 1 (2)h 'i ( x j ) ij i j 0 hi ( x j ) 0 ( i,j 0, 1, 2, ,n )
设
hi ( x) (cx d )l 2i ( x)
由条件(2)可列出方程组 2 hi ( xi ) (cxi d )li ( xi ) 0 2 ' h 'i ( xi ) cli ( xi ) 2(cxi d )li ( xi )l i ( xi ) 1
, H ( x ) h ( x ) y0 h ( x ) y1 h ( x ) y2 h ( x ) y h ( x ) y1 ' 4 ' 0 ' 1 ' 2 , 0 , 0 , 1
h ( x0 ) 0, h ( x0 ) 0, h ( x0 ) 0, h ( x0 ) 1, h ( x0 ) 0
Hermite插值中,最基本而重要的情形是只要求 一阶导数的条件。给出n 1个互异节点x0 , x1 , xn上 的函数值和导数值 yi f ( xi )和y 'i f '( xi ) ( i 0,1, 2, , n) 构造不低于2n 1次插值多项式H 2 n 1 ( x ),要求满足 插值条件 H 2 n 1 ( x i ) yi i 0, 1, 2, n H '2 n1 ( xi ) y 'i
Hermite插值方法

数值分析实验报告五一、实验目的理解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) {double alp0,alp1,bta0,bta1,t;double s;t=h0*h0;alp0=(x-x1)*(x-x1)*(h0+2*(x-x0))/t/h0;alp1=(x-x0)*(x-x0)*(h0-2*(x-x1))/t/h0;bta0=(x-x0)*(x-x1)*(x-x1)/t;bta1=(x-x1)*(x-x0)*(x-x0)/t;s=y0*alp0+y1*alp1+g0*bta0+g1*bta1;return(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];cout<<"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++){cout<<"a["<<i<<"]="<<a[i]<<endl;cout<<"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++)cout<<"g["<<i<<"]="<<g[i]<<endl;aa[0]=2;bb[0]=c[0]/aa[0];g[0]=g[0]/aa[0];for(i=1;i<=n-1;i++){aa[i]=2-a[i]*bb[i-1];bb[i]=c[i]/aa[i];g[i]=(g[i]-a[i]*g[i-1])/aa[i];}aa[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];}cout<<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];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<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];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<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];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<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];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<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];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<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];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<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];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}elsecout<<"The data error,please input again!"<<endl;}四、运行结果。
埃尔米特(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插值

1.3 Hermite 插值Hermite 插值也叫带指定微商值的插值,它要构造一个插值函数,不但在给定节点上取函数值,而且取已知微商值,使插值函数和被插函数的密和程度更好 。
01012()000()111()()1,,,(),'(),,()(),'(),,()(),'(),,()(0,1,2,,)n n m m m n n ni H f x n x x x x f x f x f x f x erm f x f x f x f x it f x m i n e +⋅⋅⋅=插值的一般提法如下给出函数在个互异节点上的函数值及若干导数值,设插值节点为。
给出其中是:正整数。
111ni i N n m N H x ==++-∑以上总共有个插值条件,要求构造不低于次插值函数()满足以上插值条件。
''001'02110'110140H x x H H x H H H ==-=-====求一个四次插值多项式(),使 时,(),(); 时,(),(),()例012121211,,()''()(0,1,2,,)21()()012'()'n i i i i n n i in ii Hermite n x x x y f x y f x i n n H x H x y i n H x y ++++===+=⎧=⎨=⎩插值中,最基本而重要的情形是只要求一阶导数的条件。
给出个互异节点上的函数值和导数值和构造不低于次插值多项式,要求满足插值条件,,,''12121233''331122112232111112,,1,21,2()()()'()'()12()1i i i i x x y y y y Hermite H x H x y i H x y i H x h x y h x y h x y h x y Hermite H x h x x x l x l x h x ==⎧⎨==⎩=+++'=--=-在节点和上已知和。
艾米特插值

若 α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三点插指公式

在第一个插值点上的hermite三点插
指公式
在第一个插值点上的hermite三点插指公式
Hermite三点插值法是一种采用三个插值点来求解函数f(x)在给定范围内的曲
线图的插值算法,通常是用来拟合y=f(x)在离散中提供的三个点的插值函数,在
第一个插值点的提出的这种特定的三点插值模型,即对第一个插值点位置
(x0,f(x0)),其中x0为插值点位置,f(x0)为其处的函数值,用的三点模型可写为:
f(x)=f(x0)+f'(x0)(x-x0)+[f''(x0)/2](x-x0)^2
即,把第一个插值点位置(x0,f(x0))处的点代入,可以得到其相应的函数拟合
多项式,当然,并不是每一个函数拟合多项式都能满足实际需求,这就需要注意函数拟合多项式的拟合度,可以在参数估计和函数估计的时候,使用一定的误差来估计函数值,从而获得函数拟合度较好的模型。
此外,在使用Hermite三点插值法时,需要注意三个点之间的位置关系,三个
点位于x0,x1,x2等位置,在确定每个点的位置时应该考虑到它们之间的距离,
一般来说,三个点之间的间距应保持一定,以使插值函数尽可能精确的反映函数的实际变化。
因此,要使得Hermite三点插值法能取得较好的效果,在确定三个插值点的位
置的时候要综合考虑它们之间的位置关系,以及在第一个插值点的估计时要注意拟合度,这样就能很好的进行三点插值,从而得到准确的结果。
第三章 插值法 Hermite插值

, H3 ( xk1 ) yk1 , H'3 ( xk1 ) mk1
H3(x) 存在且唯一,表达式为
f '( x) mk
(5.8)
mk 1
H3 ( x) ykk ( x) yk1 k1( x) mk k ( x) mk1k1( x) (5.9)
其中
k ( x)
(1
2
x xk xk1 xk
则可令 j (x) A(x xj )(x x0)2(x x1)2 (x xj1)2(x xj1)2 (x xn )2
又由 j ( x j ) 1 ,则有 1 j ( xj ) A(xj x0)2(xj x1)2 ( xj xj1)2( xj xj1)2 (xj xn )2
lj
n1
xj)
i0
xj
xi
i j
(x x j )l
nx
(x)
x i 0
i j
j
)l
2 j
(
x
);
2 j
(
x);
xi xi
余项公式为:
R3( x)
f (x) H3(x)
f
(4) (
4!
)
(
x
xk
)2
(
x
xk 1
)2
x x0 x1 x2
例 已知 y f (x) 函数表及导数表 f ( x) y0 y1 y2
f ( x)
f1
求次数不超过3的多项式 P3 ( x) 使满足插值条件:
分析
P3 ( p'3
xi ) ( x1
yi ,(i ) f '1
0,1,2)
已知 ( x0 , y0 ), ( x1, y1 ), ( x2 , y2 ) 三点,由牛顿插值多项式,
第三章(二) 埃尔米特-样条插值法

(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
第五节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 )
埃尔米特插值

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
第2章 5.Hermite插值

110.5 0.50 1 2 3 4 5 6
y
斜率=1
x
0
1
2
3
4
5
6
x
求Hermite多项式的基本步骤: 写出相应于条件的hi(x)、 hi(x) 的组合形式; 对每一个hi(x)、 hi(x) 找出尽可能多的条件给出的根; 根据多项式的总阶数和根的个数写出表达式; 根据尚未利用的条件解出表达式中的待定系数; 最后完整写出H(x)。
显然H 3最多为三阶,下求 H3
仍用构造基函数法 设 H 3 ( x ) y0 h0 ( x ) y1h1 ( x ) y'0 H 0 ( x ) y'1 H1 ( x )
其中 h0 ( x ) h1 ( x ) H0 ( x) H1 ( x)
函数
导数
x0 1 0 0 0
x1 0 1 0 0
例.已知函数 y= f(x) 的数据如下表所示, 求次数
不超过三次的Hermite的插值多项式H3(x)
x y y 1 0 1 1 0 1 0
2 3
解:(法一)设所求三次Hermite的插值多项式为
H3 ( x) a0 a1 x a2 x a3 x
由插值条件得到以下方程组
H 3 ( 1) a0 a1 a 2 a 3 1 H 3 ( 0) a 0 0 H 3 (1) a0 a1 a 2 a 3 1 (0) a1 0 H3
又h0 ( x0 ) 1 , h'0 ( x0 ) 0
1 B 2 ( x1 x0 )( x0 x1 )
x x0 x x1 2 h0 ( x ) (1 2 )( ) x1 x0 x0 x1 x x1 x x0 2 同理可得:h1 ( x ) (1 2 )( ) x0 x1 x1 x0
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插值

第五章 函数近似计算(插值问题)的插值方法5.4 Hermite 插值 1.带导数值的提法如果不仅已知插值节点处的函数值,而且还掌握插值节点处的导数值(1阶甚至高阶);或者说,不仅要求在节点处插值多项式与被插值函数的值相等(Lagrange 条件),而且还要求相应阶的导数值也要相等,这就是带导数插值,也称为Hermite(埃尔米特)插值。
从几何上看,Hermite 插值意味着插值函数不仅要过被插函数的已知点,而且在这些点上,两者还要“相切”(即导数值相同),可见这种插值函数与被插函数的“密切”程度比Lagrange 插值的情况更好,因此,Herimite 插值也称为密切插值。
下面只讨论1阶导数的情形。
2.Hermite 插值问题及插值公式 已知函数f在],[b a 上1+n 上互异节点],[b a x i ∈的函数值)(i i x f f =和1阶导数值),,1,0)((''n i x f f i i ==,或记为已知离散数据),,1,0)(',,(n i f f x i i i = (5.4.1)求作一个次数尽可能低的多项式)(x H ,满足插值条件),,1,0(')(')(n i f x H f x H iii =⎩⎨⎧== (5.4.2) 这样的多项式)(x H 就称为Hermite 插值多项式。
注意这里有22+n 个插值条件。
故有下述定理。
定理 5.4.1 对已知数据 (5.4.1)存在惟一的次数12+≤n 的多项式1212)(++∈n n P x H 满足插值条件),,1,0(')(')(1212n i f x H f x H in ii n =⎩⎨⎧==++ (5.4.3)这里,也仿照Lagrange 插值多项式的做法,用基函数的方法求插值多项式)(12x H n +。
如果能够由已知插值节点),,1,0(n i x i =作出22+n 个12+n 次插值基函数 )(x i α,)(x i β ),,1,0(n i =它们具有下列性质:⎩⎨⎧==01)(ij j i x δαji ji ≠= 0)('=j i x α (5.4.4) 0)(=j i x β ⎩⎨⎧==01)(ij j i x δβ ji ji ≠= (5.4.5)则显然可得满足插值条件(5.4.3)的12+n 次Hermite 插值多项式∑=++=ni i i i i n f x f x x H 012]')()([)(βα (5.4.6)现在来确定)(x i α和)(x i β。
实习:Matlab作业hermite插值

题目:利用Matlab实现数据的Hermite插值和分段三次Hermite插值小组成员:王晓波(38)蔡明宇(20)一、程序实现意义:一般的,从各种试验得来的数据总有一定的数量,而利用插值技术能够从有限的数据中获取整体的状态。
而Hermite插值不仅保证了插值函数与原函数在给定数据点处得拟合,同时保证了在相应点处导数的相同,从而在很大程度上保证了曲线的“光滑性”。
因此,通过Matlab实现Hermite插值具有很普遍的意义。
二、实现过程:1、Hermite插值由于并不是所有的Matlab版本都提供现有的Hermite插值函数包,故我们首先编写了实现给定五个观测点的Hermite插值的M程序,代码如下:function [f,f0] = Hermite1(x,y,y_1)syms t;f = ;!if(length(x) == length(y))if(length(y) == length(y_1))n = length(x);elsedisp('y和y的导数的维数不相等');return;endelsedisp('x和y的维数不相等! ');return;end*for i=1:nh = ;a = ;for j=1:nif( j ~= i)h = h*(t-x(j))^2/((x(i)-x(j))^2);a = a + 1/(x(i)-x(j));endendf = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i));<endf0 = subs(f,'t');其中x为给定点横坐标数组,y为给定点纵坐标数组,y_1为原函数在给定点处的导数数组。
测试证明该程序可以实现,例如输入如下数组:x=1::;y_1=[ ];y=[1 ];>> [f,f0] = Hermite1(x,y,y_1);运行结果如下:f =$(390625*((3972231*t)/35 - 28321/0000)*(t - 1)^2*(t - 7/5)^2*(t - 8/5)^2*(t - 9/5)^2)/36 - (390625*(t - 1)^2*(t - 6/5)^2*(t - 7/5)^2*(t - 9/5)^2*((28557*t)/28 - 23/2000))/36 + (390625*((64*t)/3 - 61/3)*(t - 6/5)^2*(t - 7/5)^2*(t - 8/5)^2*(t - 9/5)^2)/576 + (390625*((763*t)/1984 + 043/6240000)*(t - 1)^2*(t - 6/5)^2*(t - 8/5)^2*(t - 9/5)^2)/16 - (390625*((77623*t)/28 - 931/60000)*(t - 1)^2*(t - 6/5)^2*(t - 7/5)^2*(t - 8/5)^2)/576f0 =.利用matlab绘制图像:2、程序的窗口化:利用Matlab提供的GUIDE工具以及callback函数实现相应函数的窗口化,GUI代码如下:function varargout = untitled(varargin)?% UNTITLED M-file for% UNTITLED, by itself, creates a new UNTITLED or raises the existing% singleton*.%% H = UNTITLED returns the handle to a new UNTITLED or the handle to% the existing singleton*.%% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in with the given input arguments.%% UNTITLED('Property','Value',...) creates a new UNTITLED or raises the,% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before untitled_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to untitled_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help untitled%% Last Modified by GUIDE 15-Sep-2011 22:24:48% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @untitled_OpeningFcn, ...'gui_OutputFcn', @untitled_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);】if nargin && ischar(varargin{1})= str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT<% --- Executes just before untitled is made visible.function untitled_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% varargin command line arguments to untitled (see VARARGIN)% Choose default command line output for untitled= hObject;>% Update handles structureguidata(hObject, handles);% UIWAIT makes untitled wait for user response (see UIRESUME)% uiwait;% --- Outputs from this function are returned to the command line.function varargout = untitled_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT);…% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = ;function edit1_Callback(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)…% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit1 as text% str2double(get(hObject,'String')) returns contents of edit1 as a double guidata(hObject, handles);% --- Executes during object creation, after setting all properties.function edit1_CreateFcn(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)(% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end¥function edit2_Callback(hObject, eventdata, handles)% hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit2 as text% str2double(get(hObject,'String')) returns contents of edit2 as a double guidata(hObject, handles);% --- Executes during object creation, after setting all properties.、function edit2_CreateFcn(hObject, eventdata, handles)% hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end—function edit3_Callback(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit3 as text% str2double(get(hObject,'String')) returns contents of edit3 as a double guidata(hObject, handles);·% --- Executes during object creation, after setting all properties.function edit3_CreateFcn(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');·endfunction edit4_Callback(hObject, eventdata, handles)% hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit4 as text% str2double(get(hObject,'String')) returns contents of edit4 as a double '% --- Executes during object creation, after setting all properties.function edit4_CreateFcn(hObject, eventdata, handles)% hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'));set(hObject,'BackgroundColor','white');end% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)x=str2num(get,'string'));y=str2num(get,'string'));<y_1=str2num(get,'string'));x0=str2num(get,'string'));syms t;f = ;if(length(x) == length(y))if(length(y) == length(y_1))n = length(x);elsedisp('yºÍyµÄµ¼ÊýµÄάÊý²»ÏàµÈ');return;end—elsedisp('xºÍyµÄάÊý²»ÏàµÈ£¡ ');return;endfor i=1:nh = ;a = ;for j=1:nif( j ~= i)h = h*(t-x(j))^2/((x(i)-x(j))^2);a = a + 1/(x(i)-x(j));、endendf = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i));endf0 = subs(f,'t',x0);plot,x,y,'*');^function edit5_Callback(hObject, eventdata, handles)% hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit5 as text% str2double(get(hObject,'String')) returns contents of edit5 as a doubleguidata(hObject, handles);{% --- Executes during object creation, after setting all properties.function edit5_CreateFcn(hObject, eventdata, handles)% hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))~set(hObject,'BackgroundColor','white');end程序运行结果:其中左上方纵列的三个对话框从上到下分别输入给定点的横坐标x,纵坐标y以及导数值y_1,右侧空白框输入维数,下方坐标图显示插值函数图像,例如仍插入上面所给定的点列,得出结果:从图上看拟合程度还是比较不错的。
计算方法 1.3 Hermite插值

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
而第二个方程用于确定与导数值相关的条件,因此,有
Bj ( xk ) 0, k 0,1,, n, j k; Bj ( xk ) 1, j k
函数值
导数值
x0 x1 ... xn-1 xn x0 x1 … xn-1 xn
A0(x) A1(x) …
10 01 ……
An-1(x) 0 0
再构造 Aj ( x) : 由于第一个方程用于确定与函数值相关的条件,因此,有
Aj ( xk ) 0, k 0,1,, n, 且k j; Aj ( xk ) 1, k j.
而第二个方程用于确定与导数值相关的条件,因此,有
Aj ( xk ) 0, k 0,1,, n.
j0
j0
其中插值基函数 Aj ( x) ,B j ( x) 都是 2n 1 次式。由于 插值问题的解存在唯一性定理,有
H 2n1 ( xk
)
n
Aj ( xk ) y j Ak ( xk ) yk
n
B j ( xk ) yj
j0 jk
j0
n
n
H
背景:Lagrange插值和Newton插值虽然构造比较简单, 但插值曲线只是在节点处与原函数吻合(但不一定光滑), 若还要求在节点处二者相切,即导数值相等,使之与被插 函数的“密切”程度更好,这就要用到带导数的插值。
hermite插值以及两种MATLAB程序

给定矢量, , ,,称满足下列条件的参数三次多项式曲线为 Hermite 曲线:即 Hermite 曲线两个端点为,,在两端点的切矢量分别, 。
记几何矩阵和基矩阵分别为,, ,是未知的.取,则只要就可以了。
一般的曲线经过多项式分解 , 得到参数多项式曲线的矩阵表示:将( 1)式代入( 2)得到:,,,,将上面四个式子合并如下形式:上面方程的解不唯一,不妨取从而得到三次Hermite 曲线的方程:其中确定了一组Hermite 基函数,即附: MATLAB程序function yy=hermite(x,y,dy,xx)%输入X——左右两个端点的X轴坐标Y——左右两个端点的Y轴坐标dy——左右两个端点的切矢xx——中间插值的点 X轴坐标%输出yy——中间插值的点 Y轴坐标function yy=hermite(x,y,dy,xx)k=length(xx);z=zeros(1,k);for i=1:k;s=0;xaix=xx(i);a=1-3.*(xaix)^2+2.*(xaix)^3;b=2.*(xaix)^2-2.*(xaix)^3;c=xaix-2.*(xaix)^2+(xaix)^3;d=-2.*(xaix)^2+(xaix)^3;s=y(1)*a+y(2)*b+dy(1)*c+dy(2)*d;z(i)=s;endyy=z;function yy=hermite(x,y,dy,xx)%输入X——左右两个端点的X轴坐标Y——左右两个端点的Y轴坐标dy——左右两个端点的切矢xx——中间插值的点 X轴坐标%输出yy——中间插值的点 Y轴坐标m=length(x);n=length(y);l=length(dy);k=length(xx);if m~=n,error('向量长度不一样'); end;if n~=l,error('向量长度不一样'); end;z=zeros(1,k);for i=1:k;s=0;a=xx(i)-x(1);b=x(1)-x(2);c=xx(i)-x(2);a1=(1-2*a/b)*(c/b)^2;aa=xx(i)-x(2);a2=(1+2*aa/b)*(a/b)^2;b1=a*(c/b)^2;b2=c*(a/b)^2;s=y(1)*a1+y(2)*a2+dy(1)*b1+dy(2)*b2;z(i)=s;endyy=z;。