logo资料库

常微分方程初值问题--改进欧拉法.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
淮海工学院计算机工程学院 实 验 报 告 书 课 程 名 :《计算机方法与实习》 题 目: 计算方法实习 班 级: 学 号: 姓 名: 评语: 成绩: 指导教师: 批阅时间: 年 月 日
(一)目的与要求 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 生成易见的图形,也使得实验过程更加的有趣。增强了更多的计算方法的实际动 手能力。
分享到:
收藏