计算方法上机实习报告5
一. 提出问题
(1)给出概率积分
的数据表:
试用二次插值计算。
(2)已知的函数表
试构造出差商表,利用二次Newton插值公式计算sin1.609(保留五位有效数字)。
(3)求不高于4次的多项式,使它满足并写出余项表达式。
(4)用最小二乘法求一个形如的经验公式,使与下列数据相拟合
二. 分析问题
(1)题目给出概率积分的四个插值节点,要求用二次插值计算,而我们知道二次插值只需要三个插值节点即可,在该题中我们尝试取前三个点作为插值节点。
该题的重点在求插值基函数而它们由公式
给出。而给出插值公式。
(2)Newton基本插值公式
它的各项系数就是函数的各阶差商,每增加一个插值节点,只需要在原来的基础上多计算一项,这一性质被称作承袭性。
(3)该题需要确定一个4次插值多项式,就是要获得其各项系数的解。4次多项式有5个系数,而题目正好给予了5个条件,这样我们会获得关于系数的非奇异五元一次方程组,在运用第三章的选列主元消元法求出各系数。
(4)本题要求用最小二乘法求经验公式。实际上也就是确定拟合曲线的各项系数,关于系数的线性方程组如下:
三.解决问题
(1)C语言代码如下:
#include"stdio.h"
#include"iostream.h"
#include"math.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;i<N;i++)
{ Get_l(i,x,xk,l);
L[i]=l[i]*f[i];
Lx+=L[i];
}
cout.precision(7);
cout<<"f(x)="<<Lx<<endl;
}
/*获得基函数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;k<N;k++)
if(k!=i)
{ y1*=(x-xk[k]);
y2*=(xk[i]-xk[k]);
}
l[i]=y1/y2;
}
结果如下:
(2)C语言代码如下:
#include"stdio.h"
#include"math.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;i<N;i++)
{ a[i][0]=x[i];
a[i][1]=f[i];
}
for(i=0;i<N;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;i<N;i++)
{ printf("%d\t",i);
for(j=0;j<i+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;j<M;j++)
{ if(j<i)
a[i][j]=(a[i][j-1]-a[0][j-1])/(a[i][0]-a[j-1][0]);
if(j<i+2)
a[i][j]=(a[i][j-1]-a[j-2][j-1])/(a[i][0]-a[j-2][0]);
else
a[i][j]=0;
}
}
以上代码仅是主函数和输出差商部分,求值用的是选列主元消元法,前面有所涉及,在这里不再赘述。
输出差商表如下:
运行结果如图:
(3)C语言代码如下:
#include"stdio.h"
#include"math.h"
#define N 5
void Get_a(double c[2][N],double [N][N]);
void found(double a[N][N],double b[N],int j);
void Gauss(double a[N][N],double b[N],int j);
void Get_root(double a[N][N],double b[N],double x[N]);
void main()
{ int j;
double a[N][N],x[N];
double c[2][N]={{1,0,1,0,1},{1,1,2,2,3}};
double b[N]={-2,4,0,0,2};
Get_a(c,a);
for(j=0;j<N-1;j++)
{ found(a,b,j); /*寻找第j列主元*/
Gauss(a,b,j); /*对第j列进行消元*/
}
Get_root(a,b,x); /*求解*/
printf("输出各项系数(升序):\n");
for(j=0;j<N;j++)
printf("%lf\t",x[j]);
}
void Get_a(double c[2][N],double a[N][N])
{ int i,j;
for(i=0;i<N;i++)
{ if(c[0][i]==1)
for(j=0;j<N;j++)
a[i][j]=pow(c[1][i],double(j));
if(c[0][i]==0)
for(j=0;j<N;j++)
a[i][j]=j*pow(c[1][i],double(j-1));
}
}
这是主函数和获得关于系数的五元一次方程组部分,解系数采用选列主元消元法。运行结果如下:
也就是说,也就是参考答案中的展开式。
(4)C语言代码如下:
#include"stdio.h"
#include"math.h"
#define N 5
#define M 2
void Get_x(double x[M][M],double flag[M],double xy[N]);
void Get_d(double d[M],double flag[M],double xy[N],double y[N]);
void found(double a[M][M],double b[M],int j);
void Gauss(double a[M][M],double b[M],int j);
void Get_root(double a[M][M],double b[M],double x[M]);
void main()
{ int i,j;
double ab[M];
double flag[M]={0,2};
double x[M][M],d[M];
double xy[N]={19,25,31,38,44};
double y[N]={19,32.3,49,73.3,97.8};
Get_x(x,flag,xy);
Get_d(d,flag,xy,y);
for(j=0;j<M-1;j++)
{ found(x,d,j); /*寻找第j列主元*/
Gauss(x,d,j); /*对第j列进行消元*/
}
Get_root(x,d,ab); /*求解*/
for(j=0;j<M;j++)
{ printf("第%d次项系数:%lf\n",int(flag[j]),ab[j]);
}
}
void Get_x(double x[M][M],double flag[M],double xy[N])
{ int i,j,k;
double temp;
for(i=0;i<M;i++)
for(j=0;j<M;j++)
{ temp=0;
if(j<i)
x[i][j]=x[j][i];
else
{ for(k=0;k<N;k++)
{ temp+=pow(xy[k],flag[i])*pow(xy[k],flag[j]);
}
x[i][j]=temp;
}
}
}
void Get_d(double d[M],double flag[M],double xy[N],double y[N])
{ int i,j;
double temp;
for(i=0;i<M;i++)
{ temp=0;
for(j=0;j<N;j++)
{ temp+=y[j]*pow(xy[j],flag[i]);
}
d[i]=temp;
}
}
这里只给出主函数和获得系数阵部分,运行结果如下:
即,计算正确。
四.制作人
王腾飞、李智明、王磊、胡金龙
苗盛、刘曦、李林锋、刘衎
第二篇:华中科技大学实习报告-模板
实习报告
中国·武汉
二○一 年 月
一、实习目的
介绍实习目的和意义及实习要求等。
以第三人称行文。
宋体四号,正文宋体小四,行间距20磅 ,
二、实习内容
(实习内容力求结合生产实际或以具体工作为背景;或按学院教师指定课题开展的内容。)
三、实习总结
实践是检验真理的标准,在本次实习实践中,本人获益良多,为总结经验、吸取教训,将从专业知识的应用、实习过程中的心得体会、不足和努力方向三个方面进行归结。
3.1专业知识的应用
说明:专业知识在实习过程中的应用对用人单位岗位需求的适应情况。
3.2实习心得体会
说明:是对实习的体会和最终的、总体的结论,不是正文中各段小结的简单重复;
3.3不足与努力方向