龙格-库塔方法与亚当姆斯方法相结合求解偏微分方程

实验要求
a. 实现龙格-库塔方法,并验证它的正确性
b. 先用龙格-库塔方法计算前3点,然后实现亚当姆斯预报-校正系统,并验证算法的正确性。
算法介绍
在本次实验中,我们使用最为常用的四阶的龙格-库塔方法,其原理如下图:
再结合四阶亚当姆斯预报-校正系统来增加计算结果的准确性,四阶亚当姆斯预报-
校正系统原理如下图:

根据上述的公式,我们首先实现未经过四阶亚当姆斯预报-校正系统的四阶龙格-库塔方法,之后再
计算前3个点,通过四阶亚当姆斯预报-校正系统计算后续节点。
算法步骤
四阶龙格-库塔方法
1. 定义两个列表分别储存xy的值,并且令x的初值为最小值;
2. 计算K1 = h * f(x, y);
3. 计算K2 = h * f(x + (h / 2.0), y + (K1 / 2.0));
4. 计算K3 = h * f(x + (h / 2.0), y + (K2 / 2.0));
5. 计算K4 = h * f(x + h, y + K3);
6. 计算y = y + (1.0 / 6) * (K1 + 2 * K2 + 2 * K3 + K4);
7. 将新计算的节点y扩展进y_list;
8. x = x + h, 进行下一次计算,直到X大于最大值停止计算;
亚当姆斯预报-校正系统
1. 通过四阶龙格-库塔方法计算前3个节点;
2. 计算y1 = f(x - 4*h, y_list[i - 3]);
3. 计算y2 = f(x - 3*h, y_list[i - 2]);
4. 计算y3 = f(x - 2 * h, y_list[i - 1]);
5. 计算y4 = f(x - h, y_list[i]);
6. 计算y_a = y_list[i] + (h / 24) * (55 * y4 - 59 * y3 + 37 * y2 - 9 * y1);
7. 计算y_a = f(x, y_a);
8. 计算y_a = y_list[i] + (h / 24) * (9 * y_a + 19 * y4 - 5 * y3 + y1);
9. 将新计算的节点y_a扩展进y_list;
10. x = x + h, 进行下一次计算,直到X大于最大值停止计算;算法实现
实现算法所用语言:Python
四阶龙格-库塔方法计算代码
四阶龙格-库塔方法通过亚当姆斯校正系统后代码:
对比函数代码:
实验结果
dy/dx = x + y
准确解: y = -x - 1
未使用亚当姆斯预报-校正系统的四阶龙格-库塔方法:

使用亚当姆斯预报-校正系统的四阶龙格-库塔方法:

dy/dx = -y^2
准确解: y = 1 / (x + 1)
未使用亚当姆斯预报-校正系统的四阶龙格-库塔方法:

使用亚当姆斯预报-校正系统的四阶龙格-库塔:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值