插值法

  • 格式:pdf
  • 大小:877.03 KB
  • 文档页数:5
表格 1 problem1 计算结果
一阶差商
二阶差商
近似值
1
Problem2.1:
1、在上述程序将函数������替换为������(������) = 1+16������ 2,输入 0(选择等距插值) ,输 入区间[-1,1],输入插值点的个数������(������ ≥ 2),例如分别输入 5、8 和 13,计算 ������(0.9),对比结果如下表(由于插值次数过高,各阶差商不列出) : n n=5 n=8 n=13 插值次数 4 7 12 近似值 −0.225864 0.234113 −1.070672 绝对误差 0.029 −0.16248 1.1423 相对误差 4.15305 2.26822 15.9466
5
二、Newton 插值法
设 ������ = ������(������) 在 ������0, ������1, ������2 … ������������ 处的值分别为 ������(������0 ), ������(������1 ), ������(������2 ) … ������(������������ ) ,此 ������ + 1个插值条件可确定一个������次多项式函数������������ (������)使得 ������(������) = ������������ (������) + ������������ (������) 其中: ������������ (������) = ������(������0 ) + ������[������0 , ������1 ](������ − ������0 ) + ������[������0 , ������1 , , ������2 ](������ − ������0 )(������ − ������1 ) + ··· +������[������0 , ������1 , … , ������������ ](������ − ������0 )(������ − ������1 ) ··· (������ − ������������−1 ) ������ (������+1) (������) (������ − ������0 )(������ − ������1 ) ··· (������ − ������������ ) ������������ (������) = (������ + 1)! 这样计算的好处是可以通过递推关系 ������������+1 (������) = ������������ (������) + ������[������0 , ������1 , … , ������������ , ������������+1 ](������ − ������0 )(������ − ������1 ) ··· (������ − ������������ ) 利用计算机来循环计算增加项。
四、实验结论
1、对某些函数而言,比如������(������) =
1 1+16������ 2
,选择多项式插值时,插值条件越
多,插值函数次数越高,在给定区间中心 x=0 处逼近效果很好,但在其余的地 方逼近效果均不理想。故用多项式插值时不宜直接选择次数过高的多项式,可 逐步检验,选择最佳次数。 2、为了提升整体上的逼近程度,可以选择三次样条插值方法来改善分段多 项式插值带来的光滑性不足的情况。这样的插值函数在整体上都有着良好 的逼近程度和光滑性。 [附录]源程序(C 语言) #include<stdio.h> #include<math.h> #define M 20//插值点个数上限 double f(double x) { return 1/(1+16*x*x); } int Points(double x[])//输出等距插值点 { double a,b; int i,n; printf("Input the initial interval:");scanf("%lf %lf",&a,&b);
1
表格 2.1 problem2.1 三种插值次数情况对比
可以看出,随着差值次数的增大,精度并没有增加,反而误差越来越大, 为了更清楚地了解误差的变化,下面给出三种情况下插值函数与原函数的图 像,以及误差图像: 2、图像对比
图片 2.1.1.a 4 次插值函数图像
图片 2.1.1.b 4 次插值函 Nhomakorabea绝对误差图像
Problem2.2
既然上述高次插值会导致 Runge 现象,可以通过分段多项式插值来提高整 体上的精度,但这样又带来光滑性不足的缺点。为此可以通过增加各区间端点 的直到二阶导数的差值条件来形成光滑曲线,即三次样条(cubic spline)插值。 1、因为目标是高次问题,只取������ = 8与������ = 13两种情况,对比情况结果如图:
图片 2.2.1.a 7 次插值及三次样条插值函数图像
3
图片 2.2.1.b 7 次插值及三次样条插值误差图像
图片 2.2.2.a 12 次插值及三次样条插值函数图像
图片 2.2.2.b 12 次插值及三次样条插值函数图像
2、结果分析 从图上可以看出,三次样条插值在端点附近的逼近程度相当理想;并 且从整体看,随着插值条件的增加,其误差范围越来越小,在������ = 13时, 在给定区间内,几乎重合与原函数曲线,误差限<0.004。同时曲线有着良 好的光滑性。
4
printf("Input the number of Interpolation points n(n>=2):");scanf("%d",&n); for(i=0;i<n;i++) x[i]=a+(b-a)*i/(n-1); return n; } int main() { int i,j,k,n=0; double x[M],y[M],N,t; printf("Choose the method of interpolationpoint\n"); printf("Ture:free input, else:equiddistant:");scanf("%d",&k); if(k)//自由插值点 { printf("Input the Interpolation points:"); for(i=0;scanf("%lf",&x[i]);i++) { n++;//计算输入数据个数 y[i]=f(x[i]); if(getchar()=='\n') break; } } else//等距插值点 { n=Points(x); for(i=0;i<n;i++) y[i]=f(x[i]); } printf("The degree of the polynomial is %d\n",n-1); for(j=1;j<n;j++)//差商阶数 { for(i=n-1;i>j-1;i--)//各阶差商个数 y[i]=(y[i]-y[i-1])/(x[i]-x[i-j]); } for(i=0;i<n;i++) printf("The %d-order difference quotient=%lf\n",i,y[i]); printf("Input the evaluation x=");scanf("%lf",&t); N=y[n-1]; for(i=n-1;i>0;i--) N=N*(t-x[i-1])+y[i-1];//秦九韶算法 printf("The estimate value of f(%lf) is N(%lf)=%lf\n",t,t,N); printf("The absolute error is %lg\n",f(t)-N); printf("The relative error is %lg\n",fabs((f(t)-N)/f(t))); return 0; }
“多项式插值法”实验报告
姓名:石异 学号: 20161301236 班级: 16 长望 1 班 指导教师: 卢长娜
一、问题描述
研究实际问题时,都可以用函数������ = ������(������)来描述这些问题,但很多时候 我们只能获得过程中的若干数据,而不知道这个问题如何用函数表达式, 或者得到了函数表达式������ = ������(������),但无法像多项式函数或三角函数比较方便 地求值。此时我们希望能用一个方便求值的函数������(������)去近似������(������),以便于 利用P(x)的性质近似地代替������(������)。 例:已知������ = ������ ������ 在������0 = 0.85, ������1 = 0.87, ������2 = 0.89处的值,如何求得 ������ 0.88 的近似值?
图片 2.1.2.a 7 次插值函数图像
2
图片 2.1.2.b 7 次插值函数绝对误差图像
图片 2.1.3.a 12 次插值函数图像
图片 2.1..b 12 次插值函数绝对误差图像 表格 3.2 problem2.1 三种插值次数情况图像对比
3、结果分析 从插值函数与原函数的图像及误差图像可以看出,插值条件越多,插 值函数次数越高,在某点附近的逼近效果越好;但同时区间端点附近的误 差会越大。可见高次的多项式插值并不能整体地更好逼近原函数,相反在 远离中心插值点的地方误差会极大。此现象即 Runge 现象。