分段三次Hermite插值培训讲学.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
摘要 用函数来表示变量间的数量关系广泛应用于各学科领域,但是在实际问题中,往往是通过实验、观测以及计算等方法,得到的是函数在一些点上的函数值。如何通过这些离散数据找到函数的一个满足精度要求且便于使用的近似表达式,是经常遇到的问题。 对于这类问题我们解决的方法为插值法,而最常用也最简单的插值方法就是多项式插值。当然用插值法得到的近似表达式必须满足插值条件即假设给定了n+1个点的自变量的值以及函数值,近似函数必须要过这n+1个点。多项式插值,从几何角度看,就是寻求n次代数曲线y=Pn(x)通过n+1个点作为f(x)的近似。 但是随着插值节点个数的增加,高次插值多项式的近似效果并不理想。根据大量实验得出,在进行高次多项式插值时,会出现龙格现象。 因此,为了解决这样的一个问题,我们可以通过缩小插值区间的办法达到减小误差的目的。 但是当在每个小区间上用一次函数进行插值时,有很好的收敛性但是光滑度不够,因此本实验将用三次Hermite进行插值,做具体的讨论和学习。 关键词:龙格现象 分段差值 三次Hermite进行插值 1、实验目的 通过对分段三次Hermite插值算法程序的编写,提高自己编写程序的能力 体会分段三次Hermite插值比分段线性插值优越在哪里 用实验报告的形式展现,提高自己在写论文方面的能力 2、算法流程 分段线性插值多项式S(x)在插值区间a,b上只能保证连续性,而不光滑。要想得到在插值区间上光滑的分段线性插值多项式,可采用分段埃尔米特(Hermite)插值,这里我们考虑在整个a,b上用分段三次埃尔米特插值多项式来逼近f(x) 如果已知函数y=f(x)在节点a=x y 则在小区间xi-1, y y 故能构造一个三次多项式Hi(x),并称为三次Hermite插值多项式。这时在整个a,b上可以用分段三次Hermite插值多项式来逼近 H 其中Hi H H 关于Hi H 其中φi-1x、φix、ψ H 则由插值条件可以分别给出基函数满足的条件: φ 下面具体求解基函数φi-1x、φix、ψi-1 φi-1 由上式中的第二、第四个条件可知φi-1 φi-1 这时 φ 再由(1)式中的第一、第三个条件分别带入(2)式(3)式得到 h 解此线性方程组得到 a= 将a、b代入(2)式得到 φ 类似地有 φ ψ ψ 因此将得到 H 这样,便求出了分段三次Hermite插值多项式: H 3、数值算例 已知下列的条件 x 1 2 y 2 3 y 1 -1 通过分段三次Hermite插值法,求解当x=1.5时的y值。 解:具体的程序如下所示: #include stdafx.h float Hermite(float x[],float y[],float z[],float x1,int len) { int i=0; float s=0; float h=0; float L1=0; float L2=0; float L3=0; float L4=0; for(i=0;ilen-1;i++) { if(x1=x[i] x1x[i+1]) break; } i=i+1; h=x[i]-x[i-1]; L1=(h+2*(x1-x[i-1]))*(x1-x[i])*(x1-x[i])/(h*h*h); L2=(h+2*(x1-x[i]))*(x1-x[i-1])*(x1-x[i-1])/(h*h*h); L3=(x1-x[i-1])*(x1-x[i])*(x1-x[i])/(h*h); L4=(x1-x[i-1])*(x1-x[i-1])*(x1-x[i])/(h*h); s=L1*y[i-1]+L2*y[i]+L3*z[i-1]+L4*z[i]; return s; } float Hermite(float x[],float y[],float x1,int len); void main() { float x[]={1,2}; float y[]={2,3}; float z[]={1,-1}; int len=sizeof(x)/sizeof(x[0]); float x1=0; float s=0; printf(请输入要求解的x1的值:\n); scanf(%f,x1); s=Hermite(x,y,z,x1,len); printf(经过分段三次Hermite插值的结果为:\n); printf(%f\n,s); } 运行结果: 4、对结果进行分析 通过用编程实现对上例的求解,

文档评论(0)

139****0999 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档