教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 资格考试 >

经典Runge-Kutta方法和显式四阶Adams方法

来源:网络收集 时间:2026-09-22
导读: 经典Runge-Kutta方法和显式四阶Adams方法的比较和上机实现。 微分方程数值解实验报告 经典Runge-Kutta方法和显式四阶Adams方法的比较和上机实现。 #includestdio.h #includemath.h #define M 200 float m; float h; //因为用到 fabs()和 exp()函数,加上函数

经典Runge-Kutta方法和显式四阶Adams方法的比较和上机实现。

微分方程数值解实验报告

经典Runge-Kutta方法和显式四阶Adams方法的比较和上机实现。

#include<stdio.h> #include<math.h> #define M 200 float m; float h;

//因为用到 fabs()和 exp()函数,加上函数预处理名。 //申请两个大容量的数组用来存放两种方法每一步求的 y 值 //将 m 和 h 都设为全局变量,后面的分函数也要用到。

float RungeKutta(float y) { 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 y[M],Y[M];

//经典 Runge-kutta 方法的函数,精髓。

//主函数

//申请两个数组

float y0,e0,e1; printf("请输入区间等分数 n 值和参数值 m:"); scanf("%d,%f",&n,&m); h=1/float(n); y[0]=1.0,Y[0]=1.0; for(i=1;i<=n;i++) { if(i<=3) 用 { //龙塔方法求出。 //使用显性 4 阶 Adams 方法只能从 y4 开始求起,故 y0 到 y3 都 //赋初始值。 //按照区间等分数,循环执行以下语句 n 次

y[i]=Rung

eKutta(y[i-1]); Y[i]=RungeKutta(Y[i-1]); } else {

经典Runge-Kutta方法和显式四阶Adams方法的比较和上机实现。

y[i]=RungeKutta(y[i-1]); Y[i]=Y[i-1]+(h/24)*(55*m*Y[i-1]-59*m*Y[i-2]+37*m*Y[i-3]-9*m*Y[i-4]); } //上公式是显性四阶 Adams 方法的核心公式。

printf("请输出 Runge-Kutta 算法结果 y0:%f 和使用显式四阶 Adams 算法结果 y1:%f\n",y[i],Y[i]); } y0=exp(m*1.0); e0=fabs(y0-y[n]); e1=fabs(y0-Y[n]); //求出在区间右端点的精确解 //求 Runge-Kutta 算法在右端点处的截断误差 //求显式四阶 Adams 算法在右端点处截断误差

printf("请输出在右端点处的 Runge-Kutta 算法误差 e0=%f 和显式四阶 Adams 算法误差 e1=%f",e0,e1); }

注意: Runge算法可修改为 注意:若想仅使用 经典 Runge-Kutta 算法可修改为for(i=1;i<=n;i++) y[i]=RungeKutta(y[i-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,运行结果如图所示,图中显示了每一步的值及端点误差。

经典Runge-Kutta方法和显式四阶Adams方法的比较和上机实现。

由上图可知: 由上图可知: 1.在右端 x=1 点处的截断误差 E(h)=|yn - y(1)|, 经典 Runge-Kutta 算法误差为 0.000001, 显式四阶 Adams 算法为 0.000023。 由此可得, 在误差精度上经典 Runge-Kutta 算法要比显式 四阶 Adams 算法好。 2.由变换公式知,经典 Runge-Kutta 算法误差整体截断误差为 O(h4) ,局部截断误差 5 5 为 O(h ),显式四阶 Adams 算法局部截断误差也为 O(h )。

对于去掉显式四阶 算法的单纯的 的单纯的经典 Runge算法, 对于去掉显式四阶 Adams 算法的单纯的经典 Runge-Kutta 算法, 输入 16, 100,可有以下图示: 等分数 n 和参数值 m:16,-100,可有以下图示:

经典Runge-Kutta方法和显式四阶Adams方法的比较和上机实现。

分析:经典 Runge-Kutta 方法: E ( h ) = 1 + h +

h 2 h3 h4 + + 2! 3! 4!

它的绝对稳定区间为(-2.785,0) ,必须取足够小的步长,使 λh 落在绝对稳定区域内, 数值解才具有数值稳定性,而从上可知,h=1/16, λ =-100,可知 λh =-6.25,不在稳定区间 (-2.785,0) ,故是不稳定的。 通过这次课程设计: 1. 我又进一步巩固了 C 语言的基础。 2. 做课程设计达到了理论与实践结合的目的,提高了自己的编程能力。 3. 对两种方法有了更深一步的了解,掌握了其原理和使用。

…… 此处隐藏:501字,全部文档内容请下载后查看。喜欢就下载吧 ……
经典Runge-Kutta方法和显式四阶Adams方法.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/94769.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)