文档详情

 计算方法上机实习报告5 - 华中科技大学.doc

发布:2016-12-06约5.77千字共9页下载文档
文本预览下载声明
计算方法上机实习报告5 提出问题 给出概率积分 的数据表: 0.46 0.47 0.48 0.49 0.4846555 0.4937542 0.5027498 0.5116683 试用二次插值计算。 已知的函数表 1.5 1.6 1.7 0.99749 0.99957 0.99166 试构造出差商表,利用二次Newton插值公式计算sin1.609(保留五位有效数字)。 求不高于4次的多项式,使它满足并写出余项表达式。 用最小二乘法求一个形如的经验公式,使与下列数据相拟合 x 19 25 31 38 41 y 19.0 32.3 49.0 73.3 97.8 分析问题 (1)题目给出概率积分的四个插值节点,要求用二次插值计算,而我们知道二次插值只需要三个插值节点即可,在该题中我们尝试取前三个点作为插值节点。 该题的重点在求插值基函数而它们由公式 给出。而给出插值公式。 (2)Newton基本插值公式 它的各项系数就是函数的各阶差商,每增加一个插值节点,只需要在原来的基础上多计算一项,这一性质被称作承袭性。 (3)该题需要确定一个4次插值多项式,就是要获得其各项系数的解。4次多项式有5个系数,而题目正好给予了5个条件,这样我们会获得关于系数的非奇异五元一次方程组,在运用第三章的选列主元消元法求出各系数。 (4)本题要求用最小二乘法求经验公式。实际上也就是确定拟合曲线的各项系数,关于系数的线性方程组如下: 三.解决问题 (1)C语言代码如下: #includestdio.h #includeiostream.h #includemath.h #define N 3 void Get_l(int k,double x,double xk[N],double L[N]); void main() { int i; double l[N],L[N],x,Lx=0; double xk[N]={0.46,0.47,0.48}; double f[N]={0.4846555,0.4937542,0.5027498}; printf(输入需插值节点x:\n); scanf(%lf,x); for(i=0;iN;i++) { Get_l(i,x,xk,l); L[i]=l[i]*f[i]; Lx+=L[i]; } cout.precision(7); coutf(x)=Lxendl; } /*获得基函数lk(x)*/ void Get_l(int i,double x,double xk[N],double l[N]) { int k; double y1=1,y2=1; for(k=0;kN;k++) if(k!=i) { y1*=(x-xk[k]); y2*=(xk[i]-xk[k]); } l[i]=y1/y2; } 结果如下: (2)C语言代码如下: #includestdio.h #includemath.h #define N 3 #define M 4 void Put_out(int i,double a[N][M]); double Get_value(double x,double a[N][M]); void main() { int i,j; double a[N][M],sinx,x1; double x[N]={1.5,1.6,1.7}; double f[N]={0.99749,0.99957,0.99166}; for(i=0;iN;i++) { a[i][0]=x[i]; a[i][1]=f[i]; } for(i=0;iN;i++) Put_out(i,a); printf(k\tf(xk)\t\tf(x0,xk)\tf(x0,x1,xk)\tf(x0,x1,x2,xk)\n); for(i=0;iN;i++) { printf(%d\t,i); for(j=0;ji+2;j++) { printf(%lf\t,a[i][j]); } printf(\n); } printf(Putin x:\n); scanf(%lf,x1); sinx=Get_value(x1,a); printf(sin(%lf)=%lf\n,x1,sinx); } /*输出差商表*/ void Put_out(int i,double a[N][M]) { int j; for(j=2;jM;j++) { if(ji) a[i][j]=(a[i][j-1]-a[0][j-1])/(a[i][0]-a[j-1][0]); if(ji+2
显示全部
相似文档