牛顿插值法C语言程序

合集下载

牛顿插值C语言程序

牛顿插值C语言程序

// xg.cpp : 定义控制台应用程序的入口点。

#include"stdafx.h"#include<iostream>#include"math.h"#define N 4using namespace std;void main(){ void lin(double x[],double y[],double t,int n);void newton(double a[],double b[],double t,double h,int n);double t,h,d; int i,j,n,k;double x[N]={0.4,0.5,0.6,0.7};double y[N]={0.38942,0.47943,0.56464,0.64422};double a[N],b[N];h=0.1; //h为等距节点宽度,t为插值点t=0.57891;if(!h) cout<<"此函数为常数"<<endl;else{if(t<x[0]||t>x[N-1])cout<<t<<"不在["<<x[0]<<","<<x[N-1]<<"]范围内"<<endl;else{cout<<"利用分段线性插值:"<<endl;lin(x,y,t,N);cout<<"利用等距节点牛顿插值:"<<endl;newton(x,y,t,h,N);}}}void lin(double x[],double y[],double t,int n){int i;double w,e,c; //w为逼近值e为余项for(i=0;i<n;i++){if(t==x[i]){cout<<"sin("<<t<<")近似值为"<<y[i]<<endl<<"估计误差为"<<endl;}else if (t>x[i]){ w=y[i]*(t-x[i+1])/(x[i]-x[i+1])+y[i+1]*(t-x[i])/(x[i+1 ]-x[i]);c=fabs(cos(x[i])) > fabs(cos(x[i+1])) ?fabs(cos(x[i])) : fabs(cos(x[i+1]));e=c*(t-x[i])*(t-x[i+1]);cout<<"sin("<<t<<")近似值为"<<w<<endl<<"估计误差为"<<e<<endl;break;}}}void newton(double a[],double b[],double t,double h,int n) {int i,j,c;double d=0.0;double r=1.0,k=0.0,m=1.0,s=0.0; //d为所求近似值,r为差值余项double f(double b[],int n,int a);for(i=0;i<N;i++)if (t<a[i])break;d=b[i-1]; //b[i-1]为牛顿向前插值的第一个点函数值k=(t-a[i-1])/h; //k为(插值点—相邻前一点)/等距hc=j=i-1;for(i=j,j=0;i<N-c;i++,j++){m*=(k-j)/(j+1);if((i+1)<N)s=m * f(b,i,c);d+=s;r*=h*(k-j)/(j+1);}r*=h*(k-j)/(j+1)*fabs(cos(a[c]));cout<<"sin("<<t<<")近似值为"<<d<<endl<<"估计误差为"<<r<<endl;}double f(double b[],int n,int a) //求n阶差分,用p【a】或q 【a】存储n阶差分值{double p[N-1];double q[N-1]; //定义两个数组存储差分int i,j;for(i=0;i<=n;i++){p[i]=b[i+1]-b[i];}for(i=1;i<=n;i++){for(j=0;j<=(N-i-1);j++){if((i%2)==1)q[j]=p[j+1]-p[j];elsep[j]=q[j+1]-q[j];}}if (n%2) return p[a];else return q[a];}/*依次存储n+1阶差分值图示说明: n= 1 2 3 4y[0] p[0] q[0] p[0] q[0]y[1] p[1] q[1] p[1]y[2] p[2] q[2]y[3] p[3]y[4]*/。

c++实现牛顿插值法实验报告概论

c++实现牛顿插值法实验报告概论

数值实验用Newton商差公式进行插值姓名:陈辉学号:13349006院系:数据科学与计算机学院专业:计算机科学与技术班级:计科一班日期:2015-10-11指导老师:纪庆革目录一、实验目的 (3)二、实验题目 (3)三、实验原理与基础理论 (3)四、实验内容 (6)五、实验结果 (10)六、心得体会 (14)七、参考资料 (14)八、附录(源代码) (14)一、实验目的编写一个程序,用牛顿差商公式进行插值。

二、实验题目编写一个程序,用牛顿差商公式进行插值。

三、实验原理与基础理论牛顿插值公式为:N n(x)=f(x0)+f[x0,x1](x−x0)+⋯+f[x0,…,x n](x−x0)…(x−x n−1)其中,f[x0,x1]=f(x1)−f(x0)x1−x0f[x0,…,x k]=f[x1,…x k]−f[x0,…,x k]k0我们将从键盘读入n阶牛顿插值的n+1个节点(x i,f i),i=0,1,…,n,以此得出牛顿插值多项式。

有了节点,我们只需要求f[x0,…,x k]即可。

我们记f[x m,x m−1,…,x m−k]为t[m][k],则t[m][k]在差商表表的位置为(m, k):由f[x0,…,x k]的公式可得t[m][k] = (t[m][k-1] - t[m-1][k-1]) / (x[i] – x[i-j]),直观上来看,表中的某格的差商值可由其左边和左上边的值求得,从而牛顿插值多项式变为N(x) = t[0][0] + t[1][1](x-x[0]) + … + t[n][n](x-x[0])…(x-x[n-1])做到这一步,我们已经可以通过上面的数据计算对于给出的x,f(x)的近似值。

为了更规范地表示,下面我把N(x)变换成标准的降幂多项式N(x) = a[n]x^n + a[n-1]x^(n-1) + … + a[2]x^2 + a[1]x + a[0]。

为了便于运算,不妨先把x-x[i]中的减号换成加号(在最后令y[i]=-x[i],在令x[i]=y[i],仍可以得到原本的结果),那么有:(x+x[0])(x+x[1])…(x+x[m−1])m−1=x m+x m−1∑x[i]i=0+x m−2∑x[i[0]]x[i[1]]+⋯0≤i[0]≠i[1]≤m−1+x0∑x[i[0]]x[i[1]]…x[i[m−1]]0≤i[0]≠⋯≠i[m−1]≤m−1为了便于表示,把∑x[i[0]]x[i[1]]…x[i[k−1]]0≤i[0]≠⋯≠i[k]≤m−1记为∑x[k]m那么(x+x[0])(x+x[1])…(x+x[m−1])=x m+x m−1∑x[1]+⋯+x0∑x[m]mm只要把N(x)中的每一项展开然后x次数相同的系数相加就可以得到数组a。

实验一牛顿插值法

实验一牛顿插值法

实验一 牛顿K 次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。

2、 培养编程与上机调试能力。

二、牛顿插值法基本思路与计算步骤:给定插值点序列())(,i i x f x ,,,1,0,n i =。

构造牛顿插值多项式)(u N n 。

输入要计算的函数点,x 并计算)(x N n 的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面)(x N n 的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。

为 的 一阶均差。

为的 k 阶均差。

均差表:1. 输入n 值及())(,i i x f x ,,,1,0,n i =;要计算的函数点x 。

2. 对给定的,x 由[][][]00010101201101()()(),()(),,()()(),,n n n N x f x x x f x x x x x x f x x x x x x x x x f x x x -=+-+--++---计算()n N x 的值。

3.输出()n N x 。

三:程序流程图:四:程序清单:function[c, d]=newpoly(x, y)%牛顿插值的MA TLAB实现%这里x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。

%c为所求的牛顿插值多项式的系数构成的向量。

n=length(x);%取x的个数。

d=zeros(n, n);%构造nXn的空数组。

d(: , 1)=y';f or j=2 : nfor k=j : nd(k, j)=(d(k, j-1) - d(k-1, j-1)) / (x(k)-x(k-j+1));ende ndc =d(n, n);for k=(n-1) : - 1 : 1c =conv(c, poly(x(k)));% conv求积,poly(x)将该多项式的系数赋给向量。

m=length(c);c(m)=c(m)+d(k, k);end五、测试数据与结果:测试数据:(第三章习题第三题第2题)01234Y0=-0.916291, y1=-0.693147, y2=-0.510826, y3=-0.357765, y4=-0.223144 建立一个主程序np.mclcclearnewpoly([0.4,0.5,0.6,0.7,0.8],[ -0.916291, -0.693147, -0.510826, -0.357765, -0.223144]) 计算结果如下:ans =-0.3096 2.6083 -5.4861 5.6921 -2.4744由此看出所求的牛顿多项式为:P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744P(0.53)= -0.6347。

用C语言实现牛顿向前插值计算

用C语言实现牛顿向前插值计算

用C语言实现牛顿向前插值计算,程序代码如下:#include "stdlib.h"#include "stdio.h"#include "conio.h"#include "string.h"#include "math.h"#define N 100typedef struct{float x;float y;}POINT;float CreTable(int n,POINT Table[N],float y[N][N]){int i,j,count=0;for(i=0;i<n;i++){printf("Input %dth point(x%d,y%d):",i+1,i+1,i+1);scanf("%f,%f",&Table[i].x,&Table[i].y);}for(i=0;i<n;i++)y[i][0]=Table[i].y;for(j=1;j<n;j++,count++){i=count;for(;i<n-1;i++)y[i+1][j]=y[i+1][j-1]-y[i][j-1];}}float ShowTable(int n,POINT Table[N],float y[N][N]){int i,j;printf("\nForward difference table:\n");printf(" x y\n");for(i=0;i<n;i++){printf("%10.5f",Table[i].x);for(j=0;j<=i;j++){printf("%10.5f",y[i][j]);if(j==i) printf("\n");}}}float Calculus(int n,POINT Table[N],float y[N][N]) {int i,j,k,count[N]={0};float tmp1,tmp2,tmp3,sum,a[N],h[N],x[N],t[N];printf("\nNumber of x:");scanf("%d",&k);for(j=0;j<k;j++){printf("Input x0[%d]:",j+1);scanf("%f",&a[j]);printf("Input x[%d]:",j+1);scanf("%f",&x[j]);printf("Input h[%d]:",j+1);scanf("%f",&h[j]);t[j]=(x[j]-a[j])/h[j];printf("t[%d]=%.5f\n",j+1,t[j]);for(i=0;i<n;i++)if(Table[i].x==a[j]){count[j]=i;break;}}printf("\nThe results:");for(j=0;j<k;j++){tmp1=1;tmp2=1;sum=y[count[j]][0];for(i=1;;i++){tmp1=tmp1*(t[j]-i+1);tmp2=tmp2*i;tmp3=tmp1*y[count[j]+i][i]/tmp2;sum=sum+tmp3;if(count[j]+i==n-1) break;}printf("\n N(%f)= %f",x[j],sum);}}int main(){int n;float y[N][N],x[N];POINT Table[N];printf("Number of points n=");scanf("%d",&n);CreTable(n,Table,y);ShowTable(n,Table,y);Calculus(n,Table,y);getch();}。

牛顿插值法的C语言编程

牛顿插值法的C语言编程

Newton 插值Newton 插值函数 Newton 插值函数是用差商作为系数,对于01,,,n x x x …这1n +个点,其一般形式为:00100120101011()[][,]()[,,]()()[,,,]()()()n n n N x f x f x x x x f x x x x x x x f x x x x x x x x x −=+−+−−++−−−…………对于011,,,n x x x −…这n 个点,100100120101012()[][,]()[,,]()()[,,,]()()()n n n N x f x f x x x x f x x x x x x x f x x x x x x x x x −−=+−+−−++−−−…………差商的定义 若已知函数()f x 在点(0,1,2,,)i x i n =⋅⋅⋅处的函数值()i f x 。

则称:00[]()f x f x =为函数()f x 在点0x 的0阶差商;100110[][][,]f x f x f x x x x −=−为函数()f x 关于01,x x 的1阶差商;120101220[,][,][,,]f x x f x x f x x x x x −=−为函数()f x 过点012,,x x x 的2阶差商;依此类推,一般地称121012101210[,,,,][,,,,][,,,,,]k k k k k k k f x x x x f x x x x f x x x x x x x −−−−⋅⋅⋅−⋅⋅⋅⋅⋅⋅=−为函数()f x 关于01,,,k x x x ⋅⋅⋅的k 阶差商。

表1 差商表i x ()i f x 1阶差商 2阶差商3阶差商4阶差商0x 1x 2x 3x 4x……0()f x 1()f x 2()f x 3()f x 4()f x ……01[,]f x x12[,]f x x 23[,]f x x 34[,]f x x……012[,,]f x x x 123[,,]f x x x 234[,,]f x x x ……0123[,,,]f x x x x 1234[,,,]f x x x x ……01234[,,,,]f x x x x x……根据Newton 插值函数编写的C 语言编程根据Newton 插值函数并对照上面的差商表,可编写出Newton 插值法的C 语言程序如下: #include<stdio.h> #include<iostream.h> #include <stdlib.h>double NewtonInterpolation(double *x,double *y,int n,double xx,double *pyy) {double *f=(double *)malloc(n*sizeof(double));int i,k;for(i=1;i<=n-1;i++)f[i]=y[i];for(k=1;k<=n-1;k++)for(i=k;i<=n-1;i++){f[i]=(y[i]-y[i-1])/(x[i]-x[i-k]);if(i==n-1)for(i=k;i<n;i++)y[i]=f[i];}*pyy=y[n-1];for(i=n-2;i>=0;i--)*pyy=(*pyy)*(xx-x[i])+y[i];free(f);return 0;}void main(){int n=5;double x[5]={1.0,2.7,3.2,4.8,5.6},y[5]={14.2,17.8,22.0,38.3,51.7},xx=3,yy; NewtonInterpolation(x,y,n,xx,&yy);printf("%lf\n",yy);}。

Newton插值和三次样条插值的程序代码

Newton插值和三次样条插值的程序代码

(){}21()(11),5,10,20:12521()1,(0,1,2,,)()2,(0,1,2,,)()()235,20:1100(),i i i i n n k k k Newton f x x n x f x x i i n f x n x y i n Newton N x S x n x k y f x N =-≤≤=+=-+====-+=插值多项式和三次样条插值多项式。

已知对作、计算函数在点处的值;、求插值数据点的插值多项式和三次样条插值多项式;、对计算和相应的函数值()() (1,2,,99)4:()max()()max ()n k n k n k n k n k n k k k x S x k E N y N x E S y S x ==-=-和;、计算,;解释你所得到的结果。

Newton 插值的程序代码:%求Newton 插值多项式function new=newton(m,y)n=length(m);b=1;new=[zeros(1,n-1),y(1)];for i=2:n y(i:n)=(y(i:n)-y(i-1:n-1))./(m(i:n)-m(1:n-i+1)); %求差商b=conv(b,[1,-m(i-1)]);a=[zeros(1,n-length(b)),b];new=new+y(i)*a;end三次样条插值的程序代码:%求三次样条插值多项式function s=myspline(m,y)syms x;n=length(m);M=y;M(2:n)=(M(2:n)-M(1:n-1))./(m(2:n)-m(1:n-1));M(3:n)=(M(3:n)-M(2:n-1))./(m(3:n)-m(1:n-2));M=[0,M(3:n),0];h=m(2:n)-m(1:n-1);c=h(2:n-1)./(h(2:n-1)+h(1:n-2));a=1-c;b=2+zeros(1,n);M=6*M;c=[0,c];a=[a,0];M=chase(a,b,c,M); %用追赶法解方程组for i=1:n-1 %分区间计算插值多项式s(i)=M(i)*(m(i+1)-x)^3+M(i+1)*(x-m(i))^3+(6*y(i)-M(i)*h(i)^2)*(m(i+1)-x)+(6*y(i+1)-M(i+1)*h(i)^2 )*(x-m(i));s(i)=s(i)/(6*h(i));end主程序为:clear;clc;n=5; %指定n的值syms x %符号数xf=1./(1+25*x^2); %定义函数f(x)i=0:n;m=-1+2*i/n;y=subs(f,m); %计算函数值f(x)disp(['When n=',num2str(n),',the values of f(x) at the points of x(i) are:']);disp(y);%求Newton插值多项式new=newton(m,y);new=round(10000*new)/10000;nout=poly2sym(new);nout=vpa(nout,4); %整理多项式并输出disp(['When n=',num2str(n),',N(x)=']);disp(nout);%求三次样条插值多项式s=myspline(m,y);for i=1:n %分区间计算插值多项式a=sym2poly(s(i));b=poly2sym(a);b=vpa(b,4); %整理多项式并输出disp(['In the range of [',num2str(m(i)),',',num2str(m(i+1)),'],S(x)=']);disp(b);endk=0:100;xk=-1+0.02*k; %计算xk的值ll1=subs(f,xk);ll2=polyval(new,xk); %计算f(xk),N(xk)for i=1:length(xk)r=find(m(2:n+1)>=xk(i),1,'first');ll3(i)=subs(s(r),xk(i)); %计算S(xk)enden=max(abs(ll1-ll2));es=max(abs(ll1-ll3)); %计算E(Nn),E(Sn),并输出disp(['E(Nn)=',num2str(en)]);disp(['E(Sn)=',num2str(es)]);plot(xk,ll1,xk,ll2,'r',xk,ll3,'g');axis([-1,1,-0.1,1.1]);title('Interpolation');legend('Original function','Newton Interpolation','Spline')grid; %将原函数,Newton插值函数,三次样条插值函数画成图形。

拉格朗日和牛顿插值法的C 方法实现(数值分析上机实验)

拉格朗日和牛顿插值法的C  方法实现(数值分析上机实验)

数值分析上机实验实验一一.上机题目:已知: 4 =2,9 =3,16 =4分别用二次Lagrange和Newton插值法求7 的近似值。

二.解题方法:1.lagrange方法:设x0=4,y0=2,x1=9,y1=3,x2=16,y2=4代入方程:(x1-X)(x2-X)/(x1-x0)(x2-x0)*y0+(x0-X)(x2-X)/(x0-x1)(x2-x1)*y1+(x1-X)(x0-X)/(x1-x2)(x0-x2)*y2令X=7代入方程得 Y=2.628572.Newton方法:设x0=4,y0=2,x1=9,y1=3,x2=16,y2=4建表4 29 3 0.216 4 0.14286 -0.00476f(x)=f(x0)+f[x0,x1](X-x0)+f[x0,x1,x2](X-x0)(X-x1)(X-x2)令X=7代入方程得Y=2.62857三.算法公式步骤:grange方法:通过公式写出算法并得出最后的值Y:for(b=0;b<m;b++)//完成公式f(Xn)外层嵌套循环f[b]=i//{double l=1;//保证每次跳出内层循环将L置1 不会将第一项的值带入下一项//for(a=0;a<m;a++)//完成公式f(Xn)内层嵌套循环f[a]=j//{if(a!=b)//完成定义i=1,i!=j//l=(f[a]-F)/(f[a]-f[b])*l;//完成(j-m)/(j-i)//la=l*g[b];//完成公式的F(X0)=f(X0)*Y0并累乘输出结果// }Y=la+Y;//累加x0y0+x1y1+...得最后结果//}2.Newton方法:先建表,通过二维数组的思想建表for(l=2;l<m+2;l++)//外层循环控制y阶数//{for(k=1;k<m+1;k++)//内层循环控制x个数//{a[k][l]=(a[k][l-1]-a[k-1][l-1])/(a[k][0]-a[k-l+1][0]);//完成f(x0,x1,...,xn)并存表//}}填表。

牛顿插值函数C语言程序实现

牛顿插值函数C语言程序实现

牛顿插值函数C语言程序实现牛顿插值的关键在于差商表的计算,差商表第一行是y值,为了配合计算,在该矩阵上方配上节点x0、x1、x2……xnf[x0,x1]=[f(x1)−f(x0)]/(x1−x0)f[x0,x1]=[f(x1)−f(x0)]/(x1−x0)f[x0,x1,x2]=[f[x1,x2]−f[x0,x1]]/(x2−x0)f[x0,x1,x2]=[f[x1,x2]−f[x0,x1]]/(x2−x0)……所以只要计算矩阵内上三角值即可。

#include <stdio.h>#include <stdlib.h>int main(){float table(int n,float a1[10],float a2[10],float a3[10][10]);float newton(int n,float a4[10][10],float a5[10]);float arrX[10],arrY[10],arrL[10][10];int num,i;printf("请输入插值节点的个数(个数应小于10):");scanf("%d",&num);printf("请输入各个插值节点的值:\n");for(i=0; i<num; i++){printf("请输入X%d值:",i+1);scanf("%f",&arrX[i]);printf("请输入Y%d值:",i+1);scanf("%f",&arrY[i]);}table(num,arrX,arrY,arrL);newton(num,arrL,arrX);return 0;}float table(int n,float a1[10],float a2[10],float a3[10][10]){int i,j;for(i=0; i<n; i++){a3[0][i]=a2[i];//第一行初始化为y值}for(i=0; i<n; i++)for(j=n-1; j>i; j--)//从一行最后往前循环,到i=j为止,即上三角全部计算赋值{a3[i+1][j]=(a3[i][j]-a3[i][j-1])/(a1[j]-a1[j-1*(i+1)]);//差商表计算,最后一项arrX[j-1*(i+1)]脚标是计算步长}for(i=1; i<n; i++)//下三角未计算赋值,系统会随机分配值给下三角的每一位,故赋值0会使差商表输出更整齐for(j=0; j<i; j++){a3[i][j]=0.0;}printf("差商表为:\n");printf("----------------------------------------------------------\n");for(i=0; i<n; i++){for(j=0; j<n; j++){if(j%n==0)//num个数一行输出printf("\n");printf("%f\t",a3[i][j]);}}printf("\n");printf("----------------------------------------------------------\n");return 0;}float newton(int n,float a4[10][10],float a5[10]){int i;float x,y,t1=1.0;while(1){printf("请输入要插入节点的X值:");scanf("%f",&x);y=a4[0][0];for(i=1; i<n; i++){t1=t1*(x-a5[i-1]);y=y+a4[i][i]*t1;//差商表对角线值依次乘以(x-x0)(x-x1)……}printf("插值结果为:%f",y);printf("\n");}return 0;}运行结果如下:。

牛顿插值公式求函数值的C程序实现

牛顿插值公式求函数值的C程序实现

步骤 2对 k = l 2一 ,i 依 次计算 k 阶均差
l 厂 卜 … , 用二 维 一 a [ + l I < e
一 —t ,
数组 a L ¨ l 进行保存 。 步骤 3若 l f i x 一 卜f [ x …, 一 】 I < e即
时, P 即 为 最 终 结 果 N i 一 . ) ,否 则 P + / 一 , 一f , , 转 步骤 4 ;
I S S N 1 0 0 9 -3 0 4 4
E — m a i l : x s j l @d n z s . n e t . c n
ht t p : / / www. d nz s . ne t . c n
C o m p u t e r K n o w l e d g e a n d T e c h n o l o g y电脑 知 识 与技术
关键 词 : 插值 ; 函数 ; 采样 ; 复杂 度 中 图分 类号 : T P 3 1 1 文献 标 识 码 : A 文章编号 : 1 0 0 9 — 3 0 4 4 ( 2 0 1 4 ) 3 4 — 8 1 7 0 一 O 1 p r i n t f ( ” i n p u t ma t r i x%c 【 %d ” , c , R O W) ; f o r ( i = 0 ; i < R O W; i + + )/ / 当用变 量来 确定输 入 节点个 数 时 , 循环最 大值应取该变 量的值 s c a n f ( “ % &b [ n “ ) ; p r i n t f ( ”m a t r i x : h a ” ) ; f o r ( i = 0 ; i < R O W; i + + ) { f o r ( j = 0 ; j < R O W; j + + ) p r i n t f ( ” %1 0 . 5 a Ⅲ【 j 】 ) ; p r i n t f ( ” \ n ” ) ; J J v o i d p r i n t n ( l f o a t b [ 1 【 R O W】 , l f o a t x [ 】 , l f o a t X X , l f o a t e ) { i n t i ; l f o a t p = b 【 0 】 f 0 1 ’ f ; p r i n t f ( ” \ n f ( x ) = %. 5 n ) ;/ / 以下 几个输 出语 句用来输 出 整个 函数表达式 f o r ( i = 1 ; i < R 0 W; i + + ) { t = b Ⅲ[ i 】 l ; i f ( i > 2 ) p r i n t f ( ” \ n ” 1 : p r i n t f ( ” + %. 5 t ) ; f o r ( j = O ; j < i ; j + + ) { t = t x x — x [ j ] ) ; p r i n t f ( ” x 一 %. 2 f ) ” , x 【 j ] ) ; J

牛顿插值C语言

牛顿插值C语言
f=[0.5,0.50190188499956100034371407515916,0.50458175999920145453262692962753,0.50790348499891182000280832282220.51174095999868315023677576806651,0.51597812499850709476349453259003,0.52050895999837589915837763752862,0.52523748499828240504328585792434,0.53007775999822005008652772272554,0.5349538849981828680028595147868,0.53979999999816548855348527086896,0.5445602849981631375460567816391,0.54918895999817163683467359167056,0.55365028499818740431988299944293,0.55791855999820745394868005734203,0.56197812499822939571450757165996,0.56582335999825143565725610259505,0.56945868499827237586326396425189,0.57289855999829161446531722464131,0.57616748499830914564264970568039,0.57929999999832555962094298319248,0.58234068499834204267232638690715,0.58534415999836037711537700046025,0.58837508499838294131511966139386,0.59150815999841270968302696115631,0.59482812499845325267701924510219,0.59842975999850873680146461249234,0.60241788499858392460717891649383,0.60690735999868417469142576418001,0.61202308499881544169791651653047,0.61789999999898427631681028843103,0.62468308499919782528471394867379,0.63252735999946383138468211995707,0.64159788499979063344621717888546,0.65206976000018716634526925596981,0.66412812500066296100423623562719,0.67796816000122814439196375618094,0.69379508500189343952374520986064,0.71182416000267016546132174280214,0.73228068500357023731288225504751,0.7554000000046061662330634005451]

C语言实现牛顿插值法

C语言实现牛顿插值法

C语言实现牛顿插值法预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制#include#includeusing namespace std;void main(){float x[20];float y[20][20];int i,j,k,p,T;float a,z;cout<<"牛顿插值多项式";cout<<"请输入结点个数:";cin>>T;cout<<endl;< bdsfid="79" p=""></endl;<>cout<<"请输入各个结点的数值:"<<endl;< bdsfid="81" p=""></endl;<>for(p=0;p<t;p++)< bdsfid="83" p=""></t;p++)<>{cout<<"x["<<p<<"]=";< bdsfid="85" p=""></p<<"]=";<> cin>>x[p];cout<<"y["<<p<<"]=";< bdsfid="88" p=""></p<<"]=";<> cin>>y[p][0];}cout<<endl;< bdsfid="91" p=""></endl;<>cout<<"请输入1以继续:";while(cin>>a){cout<<"请输入所要求函数值的X值:";cin>>a;for(j=1;j<t;i++)< bdsfid="97" p=""><t;i++)<>y[i][j]=(y[i][j-1]-y[i-1][j-1])/(x[i]-x[i-j]);k=T-1;z=y[k][k];for(;k>0;k--)z=(a-x[k-1])*z+y[k-1][k-1];cout<<"则所求得的近似值是:"<<z<<endl;< bdsfid="102" p=""></z<<endl;<>cout<<"继续请输入1,退出请按alt+z:";}}。

牛顿插值法算法

牛顿插值法算法

牛顿插值法(算法)Newton Interpolation牛顿插值算法是根据n + 1个点x0, x1, ... x n(x0 < x1 < ... x n)与函数値f(x0), f(x1) , ... , f(x n)求出n次多項式p(x)。

再通过次多項式p(x)求出任意的点x所对应的f(x)的算法。

1.求n阶差分商f[x0, x1, ... x n]。

使用递归调用。

#define N 20typedef struct TagXYVALUE{double x;double y;} XYVALUE;XYVALUE val[N+1];//階差分商(Divided Differences)double f(int n0, int ni){if (n0 == ni)return val[n0].y;if (n0 + 1== ni)return (val[ni].y - val[n0].y) / (val[ni].x - val[n0].x);elsereturn (f(n0+1, ni) - f(n0, ni-1)) / (val[ni].x - val[n0].x);}2.牛顿插值算法的主程序,求p(x)的程序。

ndouble NewtonInterpolation(double x){double t = 1.0;double ft;double p = val[0].y; //P(0) = f[0]for(int i = 1; i <= N; i++){t = t * (x - val[i-1].x);ft = f(0, i) * t;p = p + ft;}return p;}3.测试。

用正弦波的20个采样点,还原出正弦波曲线。

计算速度很慢,需要改进程序。

void CNewtonInterpolationTestView::OnDraw(CDC* pDC){for (int i = 0; i <= N; i ++){val[i].x = i * 15 * atan(1.0) / 45.0 * 2;val[i].y = sin(val[i].x);pDC->Rectangle((int)(val[i].x*20)- 2, 150-(int)(val[i].y*50)- 2,(int)(val[i].x*20)+2,150-(int)(val[i].y*50)+2);}for (int j = 0; j <= N*15; j += 5){double x = j * atan(1.0) / 45.0 * 2;double y = NewtonInterpolation(x);pDC->SetPixel((int)(x*20)-2, 150-(int)(y*50)-2, 0x000000ff);}}4.n阶差分商的计算方法的改善。

10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格

10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格

10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格~~关键字: 拉格朗日,牛顿插值,高斯,龙贝格1.拉格朗日插值多项式,用于离散数据的拟合C/C++ code#include <stdio.h>#include <conio.h>#include <alloc.h>float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/{ int i,j;float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){ a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}free(a);return yy;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");printf("Input xx:");scanf("%f",&xx);yy=lagrange(x,y,xx,n);printf("x=%f,y=%f\n",xx,yy);getch();}2.牛顿插值多项式,用于离散数据的拟合C/C++ code#include <stdio.h>#include <conio.h>#include <alloc.h>void difference(float *x,float *y,int n){ float *f;int k,i;f=(float *)malloc(n*sizeof(float));for(k=1;k<=n;k++){ f[0]=y[k];for(i=0;i<k;i++)f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}return;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;}for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");difference(x,(float *)y,n);printf("Input xx:");scanf("%f",&xx);yy=y[20];for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i]; printf("NewtonInter(%f)=%f",xx,yy);getch();}3.高斯列主元消去法,求解奇次线性方程组C/C++ code#include<stdio.h>#include <math.h>#define N 20int main(){ int n,i,j,k;int mi,tmp,mx;float a[N][N],b[N],x[N];printf("\nInput n:");scanf("%d",&n);if(n>N){ printf("The input n should in(0,N)!\n");getch();return 1;}if(n<=0){ printf("The input n should in(0,N)!\n");getch();return 1;}printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Now input b(i),i,j=0...%d:\n",n-1); for(i=0;i<n;i++)scanf("%f",&b[i]);for(i=0;i<n-2;i++){ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx){ mi=j;mx=fabs(a[j][i]);}if(i<mi){ tmp=b[i];b[i]=b[mi];b[mi]=tmp;for(j=i;j<n;j++){ tmp=a[i][j];a[i][j]=a[mi][j];a[mi][j]=tmp;}}for(j=i+1;j<n;j++){ tmp=-a[j][i]/a[i][i];b[j]+=b[i]*tmp;for(k=i;k<n;k++)a[j][k]+=a[i][k]*tmp;}}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){ x[i]=b[i];for(j=i+1;j<n;j++)x[i]-=a[i][j]*x[j];x[i]/=a[i][i];}for(i=0;i<n;i++)printf("Answer:\n x[%d]=%f\n",i,x[i]); getch();return 0;}#include<math.h>#include<stdio.h>#define NUMBER 20#define Esc 0x1b#define Enter 0x0dfloat A[NUMBER][NUMBER+1] ,ark;int flag,n;exchange(int r,int k);float max(int k);message();main(){float x[NUMBER];int r,k,i,j;char celect;clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter.");printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:");for(i=1;i<=n;i++){printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); }for(k=1;k<=n-1;k++){ark=max(k);if(ark==0){printf("\n\nIt's wrong!");message();}else if(flag!=k)exchange(flag,k);for(i=k+1;i<=n;i++)for(j=k+1;j<=n+1;j++)A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];}x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--){float me=0;for(j=k+1;j<=n;j++){me=me+A[k][j]*x[j];}x[k]=(A[k][n+1]-me)/A[k][k];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k){int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k){int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;}message(){printf("\n\n Go on Enter ,Exit press Esc!");switch(getch()){case Enter: main();case Esc: exit(0);default:{printf("\n\nInput error!");message();} }}4.龙贝格求积公式,求解定积分C/C++ code#include<stdio.h>#include<math.h>#define f(x) (sin(x)/x)#define N 20#define MAX 20#define a 2#define b 4#define e 0.00001float LBG(float p,float q,int n){ int i;float sum=0,h=(q-p)/n;for (i=1;i<n;i++)sum+=f(p+i*h);sum+=(f(p)+f(q))/2;return(h*sum);}void main(){ int i;int n=N,m=0;float T[MAX+1][2];T[0][1]=LBG(a,b,n);n*=2;for(m=1;m<MAX;m++){ for(i=0;i<m;i++)T[i][0]=T[i][1];T[0][1]=LBG(a,b,n);n*=2;for(i=1;i<=m;i++)T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e)){ printf("Answer=%f\n",T[m][1]); getch();return ;}}}C/C++ code5.牛顿迭代公式,求方程的近似解C/C++ code#include<stdio.h>#include<math.h>#include<conio.h>#define N 100#define PS 1e-5#define TA 1e-5float Newton(float (*f)(float),float(*f1)(float),float x0 ) { float x1,d=0;int k=0;do{ x1= x0-f(x0)/f1(x0);if((k++>N)||(fabs(f1(x1))<PS)){ printf("\nFailed!");getch();exit();}d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);x0=x1;printf("x(%d)=%f\n",k,x0);}while((fabs(d))>PS&&fabs(f(x1))>TA) ;return x1;}float f(float x){ return x*x*x+x*x-3*x-3; }float f1(float x){ return 3.0*x*x+2*x-3; }void main(){ float f(float);float f1(float);float x0,y0;printf("Input x0: ");scanf("%f",&x0);printf("x(0)=%f\n",x0);y0=Newton(f,f1,x0);printf("\nThe root is x=%f\n",y0);getch();}6. 牛顿-科特斯求积公式,求定积分C/C++ code#include<stdio.h>#include<math.h>int NC(a,h,n,r,f)float (*a)[];float h;int n,f;float *r;{ int nn,i;float ds;if(n>1000||n<2){ if (f)printf("\n Faild! Check if 1<n<1000!\n",n);return(-1);}if(n==2){ *r=0.5*((*a)[0]+(*a)[1])*(h);return(0);}if (n-4==0){ *r=0;*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0);}if(n/2-(n-1)/2<=0)nn=n;elsenn=n-3;ds=(*a)[0]-(*a)[nn-1];for(i=2;i<=nn;i=i+2)ds=ds+4*(*a)[i-1]+2*(*a)[i];*r=ds*(h)/3;if(n>nn)*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0);}main(){float h,r;int n,ntf,f;int i;float a[16];printf("Input the x[i](16):\n");for(i=0;i<=15;i++)scanf("%d",&a[i]);h=0.2;f=0;ntf=NC(a,h,n,&r,f);if(ntf==0)printf("\nR=%f\n",r);elseprintf("\n Wrong!Return code=%d\n",ntf);getch();}7.雅克比迭代,求解方程近似解C/C++ code#include <stdio.h>#include <math.h>#define N 20#define MAX 100#define e 0.00001int main(){ int n;int i,j,k;float t;float a[N][N],b[N][N],c[N],g[N],x[N],h[N];printf("\nInput dim of n:"); scanf("%d",&n);if(n>N){ printf("Faild! Check if 0<n<N!\n"); getch(); return 1; } if(n<=0){printf("Faild! Check if 0<n<N!\n"); getch(); return 1;} printf("Input a[i,j],i,j=0…%d:\n",n-1);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("Input c[i],i=0…%d:\n",n-1);for(i=0;i<n;i++)scanf("%f",&c[i]);for(i=0;i<n;i++)for(j=0;j<n;j++){ b[i][j]=-a[i][j]/a[i][i]; g[i]=c[i]/a[i][i]; } for(i=0;i<MAX;i++){ for(j=0;j<n;j++)h[j]=g[j];{ for(k=0;k<n;k++){ if(j==k) continue; h[j]+=b[j][k]*x[k]; } }t=0;for(j=0;j<n;j++)if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);for(j=0;j<n;j++)x[j]=h[j];if(t<e){ printf("x_i=\n");for(i=0;i<n;i++)printf("x[%d]=%f\n",i,x[i]);getch();return 0;}printf("after %d repeat , return\n",MAX);getch();return 1;}getch();}8.秦九昭算法C/C++ code#include <math.h>float qin(float a[],int n,float x){ float r=0;int i;for(i=n;i>=0;i--)r=r*x+a[i];return r;}main(){ float a[50],x,r=0;int n,i;do{ printf("Input frequency:");scanf("%d",&n);}while(n<1);printf("Input value:");for(i=0;i<=n;i++)scanf("%f",&a[i]);printf("Input frequency:");scanf("%f",&x);r=qin(a,n,x);printf("Answer:%f",r);getch();}9.幂法C/C++ code#include<stdio.h>#include<math.h>#define N 100#define e 0.00001#define n 3float x[n]={0,0,1};float a[n][n]={{2,3,2},{10,3,4},{3,6,1}};float y[n];main(){ int i,j,k;float xm,oxm;oxm=0;for(k=0;k<N;k++){ for(j=0;j<n;j++){ y[j]=0;for(i=0;i<n;i++)y[j]+=a[j][i]*x[i];}xm=0;for(j=0;j<n;j++)if(fabs(y[j])>xm) xm=fabs(y[j]);for(j=0;j<n;j++)y[j]/=xm;for(j=0;j<n;j++)x[j]=y[j];if(fabs(xm-oxm)<e){ printf("max:%f\n\n",xm);printf("v[i]:\n");for(k=0;k<n;k++) printf("%f\n",y[k]);break;}oxm=xm;}getch();}10.高斯塞德尔C/C++ code#include<math.h>#include<stdio.h>#define N 20#define M 99float a[N][N];float b[N];int main(){ int i,j,k,n;float sum,no,d,s,x[N];printf("\nInput dim of n:");scanf("%d",&n);if(n>N){ printf("Faild! Check if 0<n<N!\n "); getch();return 1;}if(n<=0){ printf("Faild! Check if 0<n<N!\n ");getch();return 1;} printf("Input a[i,j],i,j=0…%d:\n",n-1);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("Input b[i],i=0…%d:\n",n-1);for(i=0;i<n;i++) scanf("%f",&b[i]);for(i=0;i<n;i++) x[i]=0;k=0;printf("\nk=%dx=",k);for(i=0;i<n;i++) printf("%12.8f",x[i]);do{ k++;if(k>M){printf("\nError!\n”);getch();}break;}no=0.0;for(i=0;i<n;i++){ s=x[i];sum=0.0;for(j=0;j<n;j++)if (j!=i) sum=sum+a[i][j]*x[j];x[i]=(b[i]-sum)/a[i][i];d=fabs(x[i]-s);if (no<d) no=d;}printf("\nk=%2dx=",k);for(i=0;i<n;i++) printf("%f",x[i]); }while (no>=0.1e-6);if(no<0.1e-6){ printf("\n\n answer=\n");printf("\nk=%d",k);for (i=0;i<n;i++)printf("\n x[%d]=%12.8f",i,x[i]);}getch();}。

拉格朗日插值和牛顿插值多项式的C程序算法毕业论文

拉格朗日插值和牛顿插值多项式的C程序算法毕业论文

本科生毕业论文题目: 拉格朗日插值和牛顿插值多项式的C程序算法原创性声明本人郑重声明: 所提交的学位论文是本人在导师指导下, 独立进行研究取得的成果. 除文中已经注明引用的内容外, 论文中不含其他人已经发表或撰写过的研究成果, 也不包含为获得**大学或其他教育机构的学位证书而使用过的材料. 对本文的研究做出重要贡献的个人和集体, 均已在文中以明确方式标明. 本人承担本声明的相应责任.学位论文作者签名: 日期指导教师签名: 日期目录拉格朗日插值多项式的C程序算法 (1)1引言 (1)1.1插值问题的提出 (1)1.2插值法 (2)1.3插值法思想 (2)2拉格朗日插值法 (3)2.1拉格朗日插值法的由来 (3)2.2n次插值基函数 (4)2.3拉格朗日插值多项式 (4)3牛顿插值法 (5)3.1均差: (5)3.2牛顿插值多项式: (6)4C程序设计 (7)4.1算法设计: (7)4.2程序源码编写 (8)5程序检测 (12)5.1对拉格朗日插值的检测 (12)5.2对牛顿插值的检测 (13)总结 (15)参考文献 (16)致谢 (17)摘要本论文着重研究了用C语言编写程序计算拉格朗日插值和牛顿插值的方法。

在前人已有的研究成果的基础上,首先介绍了拉格朗日插值和牛顿插值的思想和方法,通过添加可以循环计算功能和输入非法数值时的纠错功能,改进了已有文献的方法,对其进行了推广,使之更加的合理和完美,并且通过实际的例子进行了具体的验证。

最后,总结了一下本论文的主要研究成果和应用前景。

关键词:拉格朗日插值,牛顿插值,C算法,精确解AbstractThis article discuss the method to calculate Lagrange interpolation and Newton interpolation with C program. Base on the results of predecessors' research, firstly, this article introduces the thoughts and methods of Lagrange interpolation and Newton interpolation. Improving the old method by adding functions which can repeatedly computing interpolation and correct illegal data. Then spreading it and making it more reasonable and perfect, checking it with some examples. Finally, summing up the main results of this article and application prospect.Key words:Lagrange interpolation; Newton interpolation ; C program;拉格朗日插值多项式的C 程序算法1引言插值法是一种古老的数学研究方法,他的产生来自与社会的生产实践活动。

牛顿插值法的C语言实现

牛顿插值法的C语言实现

牛顿插值法的C 语言实现摘要:拉格朗日插值法具有明显的对称性,公式中的每一项与所有的插值节点有关。

因此,如果需要增加一个插值节点,则拉格朗日插值公式中的每一项都要改变,在有的应用中就显得不太方便。

因此,可以利用另外一种差值方法来弥补这种缺陷,就牛顿插值法。

本文通过对牛顿插值法的数学分析,主要给出其C 语言实现方法。

关键字:差商 差分 C 语言算法1差商及其牛顿插值公式1.1 差商及其主要性质定义 若已知函数()f x 在点(0,1,2,,)i x i n =⋅⋅⋅处的函数值()i f x 。

则称:00[]()f x f x =为函数()f x 在点0x 的0阶差商; 010101[][][,]f x f x f x x x x -=-为函数()f x 过点01,x x 的1阶差商;010201212[,][,][,,]f x x f x x f x x x x x -=-为函数()f x 过点012,,x x x 的2阶差商;以此类推,一般地称012101201211[,,,,][,,,,][,,,,,]k k k k k k k kf x x x x f x x x x f x x x x x x x -----⋅⋅⋅-⋅⋅⋅⋅⋅⋅=-为函数()f x 过点01,,x x ,⋅⋅⋅k x 的k 阶差商。

性质1 阶差商表示为函数值01(),(),,()k f x f x f x ⋅⋅⋅的线性组合。

即0120011()[,,,,]=()()()()kj k j j j j j j j k f x f x x x x x x x x x x x x =-+⋅⋅⋅-⋅⋅⋅--⋅⋅⋅-∑0()()kj kj ji i i jf x xx ==≠=-∑∏性质2 若函数()f x 在包含节点的区间[,]a b 上存在k 阶导数,则k 阶差商与导数的关系为()01()[,,,],[,]!k k f f x x x a b k ξξ⋅⋅⋅=∈ 1.2 牛顿插值公式通过1n +个互异点上的次数不超过n 的插值多项式()n P x 可以表示如下形式:0010101201()[][,]()[,,]()()n P x f x f x x x x f x x x x x x x =+-+--+⋅⋅⋅0101[,,,]()()n n f x x x x x x x -+⋅⋅⋅-⋅⋅⋅-这种形式的插值多项式称为牛顿插值多项式,一般记为0010101201()[][,]()[,,]()()n N x f x f x x x x f x x x x x x x =+-+--+⋅⋅⋅0101[,,,]()()n n f x x x x x x x -+⋅⋅⋅-⋅⋅⋅-由牛顿插值多项式可以看出,当增加一个插值点时,当前已有的各项不变,只需要在后面增加一项即可。

牛顿插值法

牛顿插值法

求由下列节点构建的牛顿插值公式在x=6处的值x 0 1 2 3y(x) 2 -1 4 3/*-------------------------------*Newton 插值法-------------------------------*/#include<iostream>using namespace std;int main(){float g[100],a[100],y[100],Newton;double x;int k,i,j,n;double t=1.0;cout<<"请输入插值多项式x的值:"<<endl;cin>>x;cout<<"请输入插值节点组数:"<<endl;cin>>n;cout<<"请输入插值节点序列(输出格式:x[1] y[1] x[2] y[2]...... )"<<endl; //差值节点及初值for(i=0;i<n;i++) //输入插值数据{cin>>a[i]>>y[i];g[i]=y[i];}for(k=1;k<=n;k++) //求差商的二层循环{for(j=n;j>=k;j--) //二维数组更好理解{g[j]=(g[j]-g[j-1])/(a[j]-a[j-k]);}}Newton=g[0];for(i=1;i<n;i++) //求牛顿插值的结果{t=t*(x-a[i-1]);Newton=Newton+g[i]*t;}cout<<"该点的插值为:"<<Newton<<endl;getchar();return 0;}通过实际数值计算与解析解:y=(-7/3)x^3+11x^2-(35/3)x+2所得结果相同。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档