对于常微分方程,RK方法速度快,精度高,代码简单,是最为实用的数值方法之一。RK方法很简单,类似梯形法,RK法也是根据前一步点的值推算后一步点。具体算法见以下链接
https://wenku.baidu.com/view/3d7e77450a4c2e3f5727a5e9856a561252d32184.html?from=search&smallflow20190502=1

例:求解如下微分方程

精确解
显式方法中步长不能太大,否则结果不可靠。在代码中28对步长进行了判断。
例子中步长要小于0.066。 读者可取n=5, 10,100对比下。
函数RK计算四个系数,fxy是方程右端的表达式。

import math
import numpy as np
from numpy import *
import matplotlib.pyplot as plt
import timedef RK(y0,  a, b, n):#输入y0,x的区间【a,b】以及等分数h = (b-a)/ny = np.zeros(n)y[0] = y0for i in range(1, n, 1):  #从1到nx0 = a+(i-1)*h                #        这里对应上一步的x0k1 = fxy(x0, y0, h)k2 = fxy(x0+h/2., y0+h/2.*k1, h)k3 = fxy(x0+h/2., y0+h/2.*k2, h)k4 = fxy(x0+h, y0+h*k3, h)y0 = y0+h/6.*(k1+2.*k2+2.*k3+k4)y[i] = y0i = i+1    return ydef fxy(x, y, h):   #被积函数写在这里lanmb=-x*x*y #lanmb为正数的时候不用判断f = lanmb*y #这里需要判断步长是否收敛。表达式dy/dx=lanmb*yif (lanmb*h < -2):print('h should smaller than ',  abs(2/lanmb),  h)# 收敛判断条件return f
start = time.clock()
a0 = 0.
b0 = 1.5
y0 = 3.             #y的初始值
n = 80yy = RK(y0,  a0, b0+ (b0-a0)/n, n+1)# 这里是闭区间,开区间不需要加 (b0-a0)/n
xx = np.arange(a0, b0+ (b0-a0)/n, (b0-a0)/n)
print(xx[-1],yy[-1])#打印最后一个点yyy=3./(1+xx**3)   #精确解 测试用plt.figure(1)      #画图
print(xx.shape,  yy.shape)
plt.plot(xx, yy)
plt.scatter(xx,yyy)     #精确解
delta=np.sum(abs(yyy-yy))
print(delta)
end = time.clock()    #看一下所用时间
print('time=',end-start)
plt.show()

最后结果:散点是精确解,曲线是数值解

4阶显式Runge-Kutta法解常微分方程的通用程序--python实现相关推荐

  1. [Matlab科学计算] 四阶Runge-Kutta法解常微分方程

    四阶Runge-Kutta法格式的详细推导请查找相关数值分析书籍,这里直接给出四阶Runge-Kutta法的经典格式和Matlab代码 Matlab代码如下:自行修改常微分方程即可 %% 四阶Rung ...

  2. 法宣在线积分小程序python学满指定分钟数自动关闭

    微信↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑-----法宣在线积分学习小程序,可自动学 有不明白的可以联系我.这种只是辅助,不能一天刷很多,比如一天100多分就可以了不要太多,不然会被查,如果没电脑的,可以发账 ...

  3. C++ dll的隐式与显式调用

     转载自:http://blog.sina.com.cn/s/blog_53004b4901009h3b.html 应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接.在使用D ...

  4. 四阶显式Adams法求方程组C语言,第五讲第4章线性多步法(续

    <第五讲第4章线性多步法(续>由会员分享,可在线阅读,更多相关<第五讲第4章线性多步法(续(15页珍藏版)>请在人人文库网上搜索. 1.第4章 线性多步法4.1 线性多步法的一 ...

  5. Adams隐式4阶方法解常微分方程,python实现

    Adams隐式4阶方法解常微分方程,由4阶Runge-Kutta方法提供初值,隐式方法比显式复杂一些,主要是因为需要解方程.这里使用弦截法解微分方程. import math import numpy ...

  6. 1.7 Java创建对象详解(显式创建和隐含创建)

    对象是对类的实例化.对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为.Java 对象的生命周期包括创建.使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与 ...

  7. Mysql 死锁过程及案例详解之显式与隐式锁Explicit Table Lock Implicit Table Lock

    显式锁Explicit Table Lock与隐式锁Explicit Table Lock 显式锁Explicit Table Lock 显式表锁(Explicit Table Locks)即通过命令 ...

  8. oracle 游标内存自动释放,详解Oracle隐式游标和显式游标

    游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的e ...

  9. C++模版:包含模型、显式实例化、分离模型(详解)

    C++模版:包含模型.显式实例化.分离模型 函数和类类型声明和定义的实质 非模板类类型的分文件定义 test.cpp: #include "test.h" #include < ...

最新文章

  1. Ocelot + Consul实践
  2. 假设一个学校的计算机系新建,武汉大学计算机学院《计算机系统结构》08级A卷B卷及答案...
  3. C++ Primer 5th笔记(9)chapter9 顺序容器 vector 容器的自增长 容器适配器
  4. C++实现has-a关系的两种方法
  5. 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题
  6. Docker教程-简介
  7. ActiveMQ的network connectors部署集群(七)
  8. vue 公用组件开发 确认框confirm
  9. 刚学计算机先学什么好,计算机语言入门先学什么?
  10. android 短信优先级,Android-消息机制
  11. 【jQuery笔记Part3】02-jQuery抖动效果
  12. ubuntu解决网易云无法打开
  13. Linux获取外部程序指针,Linux内核获取当前进程指针
  14. 5类6类7类网线对比_5类6类7类网线到底有什么区别?
  15. 微信小程序开发制作 | 第1期:下载微信小程序开发工具
  16. 操作系统的资源分配系列算法
  17. 《杀生》,胡说一下电影与思考
  18. 智慧社区解决方案上线!给社区装上智能大脑
  19. 美容院共享系统开发|共享模式具体应该怎么去做?
  20. 【避免进程死锁】银行家算法

热门文章

  1. 【Maven】创建模块时出现Invalid packaging for parent POM
  2. MySQL cluster集群/NDB集群学习
  3. 阅读 | 《娱乐至死》笔记 | Part2
  4. 时序路径(Timing path)简介
  5. 电力电子转战数字IC——我的IC笔试(2022.10.14更新)
  6. [CTF]使用浏览器firefox插件伪装IP地址
  7. 测试用例详解用例模板
  8. 基于java web和echarts的数据可视化项目
  9. ICLR22 自监督graph learning------------AUTOMATED SELF-SUPERVISED LEARNING FORGRAPHS--- 密歇根州立
  10. 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。