Newton插值多项式的C程序实例.docx
文本预览下载声明
附录(一)等距结点的Newton插值法的程序算法步骤步骤按照差分公式,求差分.然后利用Newton前插公式或Newton后插公式并把数值带入.即可以求得n次多项式. 它在计算机上的应用步骤如下: 步骤1 输入所要求的牛顿多项式的次数,步长,并依次输入个节点.步骤2 求得各界差分步骤3 代入牛顿插值公式,可计算得出结果(二)等距节点下Newton插值的实例例题1 已知的值列表如下: 1. 30 1.31 1.32 1.33 3.6021 3.7471 3.9033 4.0723近似计算,.解:采用Newton向后插公式.为此,做差分表 1.30 3.6021 1.31 3.74710.1450 1.32 3.90330.15620.0112 1.334.07230.16900.01280.0016从而,有将代入上式,得将上式中可以得到C程序如下:#includestdio.hvoid main(){ float x[11],y[11][11],xx,temp,newton,t,h;inti,j,n;printf(Newton插值:\n请输入要运算的值:x=);scanf(%f,xx);printf(请输入插值的次数(n11):n=);scanf(%d,n);printf(步长:\n请输入要运算的值:h=);scanf(%f,h);printf(请输入%d组值:\n,n+1);for(i=0;in+1;i++) {printf(x%d=,i);scanf(%f,x[i]);printf(y%d=,i);scanf(%f,y[0][i]); }t=(xx-x[n])/h;//计算各阶差分printf(--------------------------\n);printf(各阶差分分别为:\n);for(i=1;in+1;i++)for(j=i;jn+1;j++) {y[i][j]=(y[i-1][j]-y[i-1][j-1]); printf(%f\n,y[i][j]); }//利用牛顿插值公式,计算结果temp=1;newton=y[0][n]; for(i=1;in+1;i++) {temp=temp*((t+i-1)/i);newton=newton+y[i][n]*temp; }printf(求得的结果为:N(%.4f)=%9f\n,xx,newton);}运行结果如下所示:例题2 设函数在各节点的取值如下00.20.40.60.81.01.00.8187310.6703200.5488120.4493290.367879试利用插值公式求的值.解:差分表如下: 分析 首先我们可以通过程序求出差分表:01.0-0.1812690.032858-0.0059550.001077-0.0001910.20.818731-0.1484110.026903-0.0048780.0008860.40.670320-0.1215080.022025-0.0039920.60.548812-0.0994830.0180330.80.449329-0.0814501.00.367879从而,有将代入上式,得利用C语言程序步骤如下:首先输入所求插值的次数5和步长0.2.然后输入各个节点,并输入所要求的点0.3既可以求出该点的函数值.#includestdio.hvoid main(){ float x[11],y[11][11],xx,temp,newton,t,h;inti,j,n;printf(Newton插值:\n请输入要运算的值:x=);scanf(%f,xx);printf(请输入插值的次数(n11):n=);scanf(%d,n);printf(步长:\n请输入要运算的值:h=);scanf(%f,h);printf(请输入%d组值:\n,n+1);for(i=0;in+1;i++) {printf(x%d=,i);scanf(%f,x[i]);printf(y%d=,i);scanf(%f,y[0][i]); }t=(xx-x[0])/h;printf(--------------------------\n);printf(各阶差分分别为:\n);for(i=1;in+1;i++)for(j=0;j=n-i;j++) {y[i][j]=(y[i-1][j+1]-y[i-1][j]); printf(%f\n,y[i][j]); }temp=1;newton=y[0][0]; for
显示全部