埃尔米特插值
- 格式:ppt
- 大小:741.50 KB
- 文档页数:34
埃米尔特插值法
欧几里德·埃米尔特插值法(Euler-Laplace Interpolation)又称为埃米尔特插值,是指在离
散序列中查找未知值的技术,主要用于在数据序列中实现多项式插值,发源于拉普拉斯数
学家卡尔·拉普拉斯提出的奥埃尔-拉普拉斯插值的特殊情况。
欧几里德·埃米尔特插值是一种把离散数据形成一个多项式曲线,使其能够介入更多数据点,来插值计算未知值的方式,它比一般的数值插值更加高效,也更加准确。
使用欧几里德·埃米尔特插值法时,需要先计算出拉普拉斯差值的斜的系数。
在计算拉普
拉斯差值的斜的系数时,与格雷斯特插值和牛顿插值相比,欧几里德·埃米尔特插值的计
算量相对小。
当求出拉普拉斯差值斜系数后,即可使用欧几里德·埃米尔特插值法进行插值计算。
埃米
尔特插值法最大的优点在于它可以在基于一定步长的多项式曲线下,精确计算未知点的值,同时也可以使插值结果的计算的效率更高。
总的来说,欧几里德·埃米尔特插值法具有计算简便以及精度高的特点,是离散数据插值
计算中使用非常广泛的一种技术,是在查找数据时重要的一种选择。
实验二埃尔米特(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.掌握埃尔米特插值算法原理;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; }。
埃尔米特差值多项式误差公式证明埃尔米特差值多项式误差公式是用于估计在给定一组节点和函数值的情况下,使用埃尔米特差值多项式逼近一个函数时的误差。
它的公式如下:R(x) = f(x) - P(x),其中R(x)是真实函数f(x)和埃尔米特差值多项式P(x)之间的误差。
为了证明这个公式,我们需要首先了解埃尔米特插值多项式的定义和性质。
埃尔米特插值多项式是一个特殊的插值多项式,它不仅要求通过给定的节点,还要求在每个节点处给定的函数值的导数也要与真实函数的导数相匹配。
假设我们有一组节点{x0, x1, ..., xn},并且在每个节点处给定了函数值和导数值{f(x0), f'(x0), f(x1), f'(x1), ..., f(xn), f'(xn)}。
埃尔米特插值多项式P(x)的定义如下:P(x) = Σ[i=0 to n] [f(xi) ·ωi(x)] + Σ[i=0 to n] [f'(xi) ·φi(x)],其中ωi(x)是拉格朗日插值基函数,而φi(x)是埃尔米特插值基函数。
接下来,我们可以使用这个定义来推导出埃尔米特差值多项式误差公式。
我们先假设函数f(x)在给定节点的区间上具有高阶导数,然后根据泰勒展开定理,我们可以得到:f(x) = P(x) + R(x),其中R(x)是一个余项,表示使用埃尔米特插值多项式逼近函数f(x)时的误差。
我们再对余项R(x)进行展开,得到:R(x) = Σ[i=0 to n] [(f(xi) - f[xi,xi]) ·ωi(x)] + Σ[i=0 to n] [(f'(xi) - f'[xi,xi]) ·φi(x)],其中f[xi,xi]和f'[xi,xi]分别代表f(x)和f'(x)在节点xi处的高阶导数。
然后,我们可以将这个余项R(x)进行进一步的变形和化简,最终得到:R(x) = Π[i=0 to n] (x - xi)^2 ·[f"(ξi) / 2!],其中ξi是位于xi和x之间的某个值,f"(ξi)表示函数f(x)的二阶导数在该点的取值。
§3 重节点差商与埃尔米特插值摘要:本节介绍Hermite 插值的Newton 形式及其余项表示。
这个问题涉及一个重要的概念就是重节点差商,它是一般差商的极限形式。
2.3.1埃尔米特(Hermite)插值 设是[a,b]中不同的s 个节点,是s个正整数且,要找一个n 次多项式,对于[a,b]上充分光滑的函数f(x),满足条件()()()(),0,1,2,,1,1,2,,.k k ii i P y f y k m i s ==-=问题:● 这样的多项式存在且唯一吗? ● 的表达式怎样求? 一、 重节点差商A 、 重节点差商()00001,,,,n f x x x x +?考虑()102010121lim ,,,,n n n x x x x x x f x x x x ++→→→?假设f(x)存在n 阶连续导数,根据定理2.4知()()(){}{}11!,,,min max ,nf n i i n iif x x x x ξξ+=≤≤当时,有()()()()()0110!!,,,,1,2,,1nnf x f n i n n f x x x x i n ξ+=→→=+。
1,,s y y 12,,,s m m m 11s i i m n ==+∑()P x ()P x ()P x 0,1,2,,1i x x i n →=+定理2.3.1 设f(x)在(a,b)中连续且有直到n 阶连续导数,若()0,x a b ∈,则()102010121lim ,,,,n n n x x x x x x f x x x x ++→→→=()()0!nf x n 。
定义2.3 如果f(x)在x 0的邻域内连续且有n 阶连续导数,则定义()()102010()0001211(),,:lim ,,,,!n n n n x x x x n x x f x f x x f x x x x n ++→→+→==B 、 部分重节点差商()000051,,,,,,,n n f x x x x x x x +?分析:差商()121,,,,n n f x x x x +是n+1个节点11,,n x x +上的n 次插值多项式的首项n x 的系数,记()P x()()()()()()211111212222211111121111112221111111111121121212312323111,,,,1111()()()0(,)(,),0(,)(,),n n n n n n n n n n n n n n n n n n n n n x x x f x x x x f x x x x f x f x x x x x x x x x x x x x l x l x f x l x x l x x f x x l x x l x x f x x ---+++++---+++---==()()()()()1341343415155111111111111211212123123231341341511(,)(,),0()()1()()11()()()0(,)(,),0(,)(,),(,)(,)0()1()1n n n n n n n n n n n n n n l x x l x x f x x l x l x f x l x l x f x l x l x l x l x x l x x l x x l x x l x x l x x l x x l x x l x l x --+-++----+()()()34155111,()()n n n n n n n l x x l x l x l x l x --++()()()()()1111111211212112311231231123411234123415155111111()()()0(,)(,),0(,,)(,,),,(,,,)(,,,),,,0()()1()()1n n n n n n n n n l x l x f x l x x l x x f x x l x x x l x x x f x x x l x x x x l x x x x f x x x x l x l x f x l x l x f x -----+-++=()()()()()1111111211212112311231231123411234123415155111111()()()0(,)(,),0(,,)(,,),,(,,,)(,,,),,,0()()1()()1n n n n n n n n n n n n n n n l x l x l x l x x l x x l x x l x x x l x x x l x x x l x x x x l x x x x l x x x x l x l x l x l x l x l x -----+-++设0i x x ≠,考察下列极限()10203040123451lim ,,,,,,n x x x x x x x x f x x x x x x +→→→→()()()()()101001010010100101001515511111101001011()()()0()()0()/2!()/2!/2!()/3!()/3!/3!0()()1()()11()()()0()n nnn n n n n n n n nl x l x f x l x l x f x l x l x f x l x l x f x l x l x f x l x l x f x l x l x l x l x l -----+-++--''''''''''''''''''=''()()()()()0010100101001515511111()0()/2!()/2!/2!()/3!()/3!/3!0()()1()()1n nn n n n n n n n n n x l x l x l x l x l x l x l x l x l x l x l x l x l x ---+-++''''''''''''''''所以我们定义()000051,,,,,,,n n f x x x x x x x +=:()10203040123451lim ,,,,,,n x x x x x x x x f x x x x x x +→→→→进一步可以定义定义2.4 f(x)在[a,b]上足够光滑,(,),1,2,,,i y a b i s ∈=112(1)(1)()()11221,,1,,(,,,,,,,,,)lim (,,,,,,)s ss s s s k m kk m kk m m m f y y y y y y f x x x x →∞=:1122detdet ,s s B A B A B A ⎛⎫⎛⎫ ⎪ ⎪ ⎪ ⎪= ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭称为重节点差商。