计算方法实验报告

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

实验一:插值法

一、实验目的

通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C)编程实现数值方法的求解。并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。

二、实验内容

先在屏幕上用随机函数按适当比例画出若干个点(至少7~9),分别用拉格朗日插值,牛顿插值,三次样条插值对上述离散点进行拟和,并用该软件的绘图功能来显示其插值函数。

三、源程序

⒈拉格朗日插值:(Lagrange)

#include

void main()

{

float x[3];

float y[3];

for(int m=0;m<3;m++)

cin>>x[m];

for(int n=0;n<3;n++)

cin>>y[n];

for(int k=0;k<3;k++)

{

float s=0;

for(int i=0;i<3;i++)

{

float p=1;

for(int j=0;j<3;j++)

if(i!=j)

p=p*((x[k]-x[j])/(x[i]-x[j]));

s=s+y[i]*p;

}

cout<<"("<

}

}

2.牛顿插值:

#include

void main()

{

float x[5];

float y[5];

float f[5];

for(int m=0;m<3;m++)

cin>>x[m];

for(int n=0;n<3;n++)

cin>>y[n];

float t=1;

for(int k=0;k<5;k++)

{

f[k]=y[k];

for(int j=0;j<5;j++)

t=t*(x[k]-x[j-1]);

for(int i=0;i<(5-j);i++)

f[i]=(f[i+1]-f[i])/(x[j+i]-x[i]);

y[k]=f[k]+t*f[k];

cout<<"y="<

}

}

四、实验结果

五、实验心得

通过此次实验编程,更好的掌握了拉格朗日插值算法,但对于应用上还有很多欠缺,对于牛顿插值更是不熟悉,需要多加练习。

实 验 二 :数 值 积 分

一、实验目的

通过该课程实习,学会使用数值积分的各种方法求解定积分计算的问题,体会各种方法的精度差异。

二、实验内容 用龙贝格算法和变步长梯形积分方法计算dx x

x

60sin 。 三、源程序

1.龙贝格算法:(Romberg )

#include

#include

double f(float x)

{

if(x>-0.0001 && x<0.0001)

return 1;

else

return sin(x)/x;

}

void main()

{

int k;

float h,a,b,T1;float e=0.0001;

k=1;

h=b-a;

T1=h/2*(f(a)+f(b));

float x,s;

if(x

{

s=0;

x=a+h/2;

s=s+f(x);

x=x+h;

}

else

{

float T2,S2;

T2=T1/2+h/2*s;

S2=T2+1/3*(T2-T1);

if(k==1)

{

k+1;

h=h/2;

T1=T2;s=S2;

}

else

{

float c2,c1;

c2=S2+1/15*(S2-s);

if(k==2)

c1=c2;

else

{

float R1,R2;

R2=c2+1/63*(c2-c1);

if(k==3)

R1=R2;

if(fabs(R2-R1)

cout<

}

}

}

}

2.梯形递推化

#include

#include

double f(float x)

{

if(x>-0.0001 && x<0.0001)

return 1;

else

return sin(x)/x;

}

T(float a,float b,float e)

{

float h,T1,T2;

h=b-a;

T1=h/2*(f(a)+f(b));

T2=0;

float s,x;

s=0;

x=a+h/2;

相关文档
最新文档