淮海工学院计算机工程学院
实 验 报 告 书
课 程 名 :《计算机方法与实习》
题 目:
计算方法实习
班 级:
学 号:
姓 名:
评语:
成绩:
指导教师:
批阅时间: 年
月
日
(一)目的与要求
1. 熟悉求解常微分方程初值问题的有关方法和理论,主要是改进欧拉法;
2. 会编制上述方法的计算程序,包括求解微分方程组的计算程序;
3. 针对实习编制程序,并上机计算其所需要的结果;
4. 通过对各种求解方法的计算实习,体会各种解法的功能、优缺点及适用场合,会选取适
当的求解方法。
(二)实验内容或题目
1.试在曲线 f(x)=10exp(-x*x)上自行采集样点,(1)采等距点;(2)采非等距点。
根据所采集的样点,选用不同的函数类进行拟合,并借助于计算机图形显示,来比较各类拟
合曲线的优劣。
2.用改进 Euler 方法求解微分方程初值问题
y’=xex2+sinx
y(0)=0
在[0,2]上的解(步长 h=0.1),并在计算机上生成该解的曲线图
(三)实验步骤及代码
实验步骤:
1) 在 C++环境下编写代码,编译并调试使程序运行正常
2) 将数据导入 Excel,通过计算机图形来显示解的曲线图
程序代码
1.取点的算法
#include
#include
float f(float x)
{
return 10*(exp(-x*x));
}
void main()
{
float x,j;
int i,k;
printf("x:");
scanf("%f",&x);
printf("dx:");
scanf("%f",&j);
printf("k:");
scanf("%d",&k);
for(i=0;i
#include
#define N 20
float f(float x,float)
{
return x*exp(x*x)+sin(x);
}
void ModEuler(float(*f)(float,float),float x0,float y0,float xn,int n)
{
int i;
float yp,yc,x=x0,y=y0,h=(xn-x0)/n;
printf("x[0]=%f\ty[0]=%f\n",x,y);
for(i=1;i<=n;i++)
{
yp=y+h*(*f)(x,y);
x=x0+i*h;
yc=y+h*(*f)(x,yp);
y=(yp+yc)/2;
printf("x[%d]=%f\ty[%d]=%f\n",i,x,i,y);
}
}
void main()
{
float xn = 2,x0=0,y0 = 0;
ModEuler(f,x0,y0,xn,N);
}
(四) 测试数据与实验结果
1.等距取点 20 个:
导入 Excel,生成图形:
2.根据要求取点:
将数据导入 Excel,生成曲线图
(五) 结果分析与实验体会
这两题的实验,开始的时候感觉是无从下手,但是通过书上的几个实习的例题的锻炼,
也渐渐找到的方法,并且在实验过程中,让我感觉到了计算机在数学上的真正的运用,由于
通过 Excel 生成易见的图形,也使得实验过程更加的有趣。增强了更多的计算方法的实际动
手能力。