经典Runge-Kutta方法和显式四阶Adams方法
经典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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [资格考试]石油钻采专业设备项目可行性研究报告编
- [资格考试]2012-2013学年度第二学期麻风病防治知
- [资格考试]道路勘测设计 绪论
- [资格考试]控烟戒烟知识培训资料
- [资格考试]建设工程安全生产管理(三类人员安全员
- [资格考试]photoshop制作茶叶包装盒步骤平面效果
- [资格考试]授课进度计划表封面(09-10下施工)
- [资格考试]麦肯锡卓越工作方法读后感
- [资格考试]2007年广西区农村信用社招聘考试试题
- [资格考试]软件实施工程师笔试题
- [资格考试]2014年初三数学复习专练第一章 数与式(
- [资格考试]中国糯玉米汁饮料市场发展概况及投资战
- [资格考试]塑钢门窗安装((专项方案)15)
- [资格考试]初中数学答题卡模板2
- [资格考试]2015-2020年中国效率手册行业市场调查
- [资格考试]华北电力大学学习实践活动领导小组办公
- [资格考试]溃疡性结肠炎研究的新进展
- [资格考试]人教版高中语文1—5册(必修)背诵篇目名
- [资格考试]ISO9001-2018质量管理体系最新版标准
- [资格考试]论文之希尔顿酒店集团进入中国的战略研
- 全国中小学生转学申请表
- 《奇迹暖暖》17-支2文学少女小满(9)公
- 2019-2020学年八年级地理下册 第六章
- 2005年高考试题——英语(天津卷)
- 无纺布耐磨测试方法及标准
- 建筑工程施工劳动力安排计划
- (目录)中国中央空调行业市场深度调研分
- 中国期货价格期限结构模型实证分析
- AutoCAD 2016基础教程第2章 AutoCAD基
- 2014-2015学年西城初三期末数学试题及
- 机械加工工艺基础(完整版)
- 归因理论在管理中的应用[1]0
- 突破瓶颈 实现医院可持续发展
- 2014年南京师范大学商学院决策学招生目
- 现浇箱梁支架预压报告
- Excel_2010函数图表入门与实战
- 人教版新课标初中数学 13.1 轴对称 (
- Visual Basic 6.0程序设计教程电子教案
- 2010北京助理工程师考试复习《建筑施工
- 国外5大医疗互联网模式分析




