计算方法课程实验报告.doc
文本预览下载声明
课 程 实 验 报 告
课程名称: 计算方法
专业班级: 信安1302班
学 号: U201315130
姓 名: 王超
指导教师: 付才
报告日期: 2015.5.2
计算机科学与技术学院
目录
实验一:Lagrange插值法 1
实验二:Newton插值法 4
实验三:复化梯形法 7
实验四:复化辛普森法 9
实验一:Lagrange插值法
1.1实验内容及要求
掌握Lagrange插值法的存在意义,推导过程,以及公式运用;通过编程实现Lagrange插值法的应用
1.2公式与算法描述
pn(x)=
li(x)=
1.3程序流程图
见图1.1
图1.1
1.4程序清单
#includeiostream
#includestring
#includevector
using namespace std;
double lagrange(int n,vectordoublex,vectordoubley,double x);
int main(){
char a=n;
do{
coutn的值:endl;
int n;
cinn;
vectordoublex(n,0);
vectordoubley(n,0);
cout请输入插值点对应的值及函数值(xi,yi):endl;
for(int a=0;an;a++){
cinx[a]y[a];
}
cout请输入要求值x的值:endl;
double x;
cinx;
double result=lagrange(n,x,y,x);
cout由拉格朗日插值法得出结果: resultendl;
cout是否要继续?(y/n):;
cina;
}while(a==y);
return 0;
}
double lagrange(int n,vectordoublex,vectordoubley,double x){
double result=0;
for(int i=0;in;i++){
double temp=y[i];
for(int j=0;jn;j++){
if(i!=j){
temp = temp*(x-x[j]);
temp = temp/(x[i]-x[j]);
}
}
result += temp;
}
return result;
};
1.5运行结果
见图1.2
图1.2
1.6结果分析
结果与实验预期吻合,实验效果良好
1.7实验小结
通过这项实验,加深了对Lagrange插值法的理解,强化了对Lagrange插值法的运用
实验二:Newton插值法
2.1实验内容及要求
掌握Newton插值法的来源,推导过程,以及公式运用;通过编程实现Lagrange插值法的应用
2.2公式及算法描述
Nn(x)=f(x0)+f[x0,x1](x-x0)+…+f[x0,x1….,xn]wn(x)
wn(x)=(x-x0)x-x1)..(x-xn-i)
2.3流程图
图2.0
2.4程序清单
#includestdio.h
#define Max_N 20 //最大插值节点个数
float newton (float x[],float y[],float xx,int n)
{
int i,k;
float Nt,f[Max_N], t[Max_N];
for(k=1;k=n;k++) // 计算差商
{
for(i=k;i=n;i++)
t[i]=(y[i]-y[i-1])/(x[i]-x[i-k]);
f[k]=t[k];
for(i=k;i=n;i++)
y[i]=t[i];
}
Nt=f[n];
f[0]=y[0];
for(i=n-1;i=0;i--) // 计算牛顿插值多项式的值
Nt=Nt*(xx-x[i])+f[i];
return(Nt);
}
main()
{float x[Max_N],y[Max_N];
显示全部