经典Runge-Kutta方法和显式四阶Adams方法.doc_第1页
经典Runge-Kutta方法和显式四阶Adams方法.doc_第2页
经典Runge-Kutta方法和显式四阶Adams方法.doc_第3页
经典Runge-Kutta方法和显式四阶Adams方法.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微分方程数值解实验报告姓名丁建伟学号200708020211日期20101023实验项目经典Runge-Kutta方法和显式四阶Adams方法指导教师徐强1、 上机实验的问题和要求(需求分析): 考虑一阶常微分方程初值问题dy/dx =y, 0=x=1, y(0)=1,其精确解为y = ex,求初值问题数值解。 要求:(1)=-2时,分别以h=1/16,1/32,1/64,1/128为步长时,使用两种方法求解初值问题,给出右端点的误差,分析误差阶。(2)=-100时,取h=1/16,用经典Runge-Kutta法求解初值问题,并验证时数值不稳定性。二、程序设计的基本思想,原理和算法描述:算法的基本思想:若已知dy/dx=f(x,y),0=x=1;y(0)=1;经典Runge-Kutta法公式:显性四阶Adams公式: 算法描述: 先设置两个数组y和Y,用来存储结果。经典Runge-Kutta算法:(1) 置h=1/n;x=0,y=1;f=my(2) 设置一个Runge-Kutta函数,每一步求出对应的x和y值,共循环进行n次,并每次将结果存储到一个数组里y。(3) 将结果输出,并求在右端点处截断误差。显性四阶Adams: (1)从y0到y3先由经典Runge-Kutta算法求出,并分别存储到Y0到Y3中; (2)从y4开始,利用前面求出的值,求解y值,并存储到数组相应位置,使用公式为Yi=Yi-1+(h/24)*(55*m*Yi-1-59*m*Yi-2+37*m*Yi-3-9*m*Yi-4)。3、 主要程序代码或命令:#include#include /因为用到fabs()和exp()函数,加上函数预处理名。#define M 200 /申请两个大容量的数组用来存放两种方法每一步求的y值float m; /将m和h都设为全局变量,后面的分函数也要用到。float h;float RungeKutta(float y) /经典Runge-kutta方法的函数,精髓。float k1,k2,k3,k4; k1=m*y;k2=m*(y+h*k1/2);k3=m*(y+h*k2/2);k4=m*(y+h*k3);y=y+(h/6)*(k1+2*k2+2*k3+k4);return y;void main() /主函数int n,i;float yM,YM; /申请两个数组float y0,e0,e1;printf(请输入区间等分数n值和参数值m:);scanf(%d,%f,&n,&m);h=1/float(n);y0=1.0,Y0=1.0; /赋初始值。 for(i=1;i=n;i+) /按照区间等分数,循环执行以下语句n次 if(i=3) /使用显性4阶Adams方法只能从y4开始求起,故y0到y3都用 /龙塔方法求出。 yi=RungeKutta(yi-1); Yi=RungeKutta(Yi-1); else yi=RungeKutta(yi-1); Yi=Yi-1+(h/24)*(55*m*Yi-1-59*m*Yi-2+37*m*Yi-3-9*m*Yi-4); /上公式是显性四阶Adams方法的核心公式。 printf(请输出Runge-Kutta算法结果y0:%f和使用显式四阶Adams算法结果y1:%fn,yi,Yi); y0=exp(m*1.0); /求出在区间右端点的精确解e0=fabs(y0-yn); /求Runge-Kutta算法在右端点处的截断误差e1=fabs(y0-Yn); /求显式四阶Adams算法在右端点处截断误差printf(请输出在右端点处的Runge-Kutta算法误差e0=%f和显式四阶Adams算法误差e1=%f,e0,e1);注意:若想仅使用经典Runge-Kutta算法可修改为for(i=1;i=n;i+) yi=RungeKutta(yi-1); /仅用这些就可以了四、调试和运行程序过程中产生的问题及采取的措施:1、编译时出错,若想在主函数和被调用函数都使用一些变量,必须把这些变量设为全局变量。2、编译时,没有注意数据类型转换,如float h;h=1/n;是错误的,因为n是整形的,当n值大于1时,h老为零。应进行模式转换,h=1/float(n);这样才是正确的。3、对浮点数求绝对值时,应使用fabs()函数,而不是abs()。五、运行输出结果及分析:上述程序在Visual C+ 6.0环境下加以实现。经过多次测试,程序运行正确。例如:分别输入n值和m值:16 ,-2,运行结果如图所示,图中显示了每一步的值及端点误差。由上图可知:1. 在右端x=1点处的截断误差E(h)=|yn - y(1)|,经典Runge-Kutta算法误差为0.000001,显式四阶Adams算法为0.000023。由此可得,在误差精度上经典Runge-Kutta算法要比显式四阶Adams算法好。2. 由变换公式知,经典Runge-Kutta算法误差整体截断误差为O(h4),局部截断误差为O(h5),显式四阶Adams算法局部截断误差也为O(h5)。对于去掉显式四阶Adams算法的单纯的经典Runge-Kutta算法,输入等分数n和参数值m:16,-100,可有以下图示:分析:经典Runge-Kutta方法:它的绝对稳定区间为(-2.785,0),必须取足够小的步长,使落在绝对稳定区域内,数值解才具有数值稳定性,而从上可知,h=1/16,=-100,可知

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论