分段三次Hermite插值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分段三次Hermite 插值
1. 目的意义:
可以得到在插值区间上光滑的分段插值多项式
2. 数学模型(数学公式):
⎪⎪⎩⎪⎪⎨⎧∈⋅⋅⋅⋅⋅⋅∈∈=-]
,[),(],[),(],[),()(1212101n n n x x x x H x x x x H x x x x H x H
'221'122
13211321)()())(())]((2[))]((2[i i
i i i i i i i i
i i i i i i i i i y h x x x x y h x x x x y h x x x x h y h x x x x h H --+--+--++--+=------
3. 算法程序:
#include
#include
#define m 4
#define n 5
void main()
{
int i,k;
float x[n+1],y[n+1],yy[n+1],h,z[m];
printf("请按行输入一系列的x值:\n");
for(k=0;k scanf("%f",&x[k]); printf("请按行输入一系列的y值:\n"); for(k=0;k scanf("%f",&y[k]); printf("请输入一系列的y'的值:\n"); for(k=0;k scanf("%f",&yy[k]); printf("请按行输入这%d个插值点:\n",m+1); for(i=0;i scanf("%f",&z[i]); printf("%f\n",z[i]); for(i=0;i for(k=0;k if(z[i]>=x[k]&&z[i]<=x[k+1]) { h=pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0)*(1+2*(z[i]-x[k])/(x[k+1 ]-x[k]))*y[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(1+2*(z[i]-x[k +1])/(x[k]-x[k+1]))*y[k+1]+pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0 )*(z[i]-x[k])*yy[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(z[i]-x[k +1])*yy[k+1]; printf("h(%f)=%f\n",z[i],h); } } 4.运行结果: