Python案例 | 四阶龙格库塔法简介

1.引言

在数值分析中,龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔·龙格和马丁·威尔海姆·库塔于1900年左右发明。

龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,其中包括著名的欧拉法,用于数值求解微分方程。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。

在各种龙格-库塔法当中有一个方法十分常用,以至于经常被称为“RK4”或者就是“龙格-库塔法”。该方法主要是在已知方程导数和初值信息,利用计算机仿真时应用,省去求解微分方程的复杂过程。

对一般微分方程有:
{ y ′ = f ( x , y ) y ( x 0 ) = y 0 \begin{cases} y'=f(x,y)\\ y(x_0)=y_0 \end{cases} {y=f(x,y)y(x0)=y0
在x的取值范围内将其离散为 n n n段,定义步长,令第 n n n步对应的函数值为 y n y_n yn。于是通过一系列的推导可以得到下一步的 y n + 1 y_{n+1} yn+1值为
y n + 1 = y n + h 6 ( K 1 + 2 K 2 + 2 K 3 + K 4 ) y_{n+1}=y_n+\frac{h}{6} (K_1+2K_2+2K_3+K_4) yn+1=yn+6h(K1+2K2+2K3+K4)
其中
{ K 1 = f ( x n , y n ) K 2 = f ( x n + h 2 , y n + h 2 K 1 ) K 3 = f ( x n + h 2 , y n + h 2 K 2 ) K 4 = f ( x n + h , y n + h K 3 ) \begin{cases} K_1=f(x_n, y_n) \\ K_2=f(x_n+\frac{h}{2}, y_n+\frac{h}{2}K_1) \\ K_3=f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_2) \\ K_4=f(x_n+h,y_n+hK_3) \end{cases} K1=f(xn,yn)K2=f(xn+2h,yn+2hK1)K3=f(xn+2h,yn+2hK2)K4=f(xn+h,yn+hK3)

2.Python代码实现

以如下微分方程为例:
{ y ′ = y − 2 x y y ( 0 ) = 1 \begin{cases} y'=y - \frac{2x}{y} \\ y(0)=1 \end{cases} {y=yy2xy(0)=1
其中, 0 ≤ x ≤ 2 0\le x \le 2 0x2
已知,上述微分方程的函数解析表达式为:
y = 2 x + 1 y=\sqrt{2x+1} y=2x+1

##################################
import matplotlib.pyplot as plt
import mathdef f_function(x,y):     #完成对微分方程的表达y_pie=0.0#y_pie=math.cos(x)   #对于不同的微分方程,这里采用不同的表达式y_pie=y-2.0*x/yreturn y_piedef f_accurate(x):y_accu=math.sqrt(2.0*x+1)#计算精确解return y_accu#存储各步进状态时的值
xlist=[]
ylist=[]#存储解析解的值
y_accurate_list=[]#赋初值
x=0.0
y=1.0
h=0.1#对x范围内步进
while x <=2.0:#将步进结果放进列表中xlist.append(x)ylist.append(y)#四步龙格-库塔核心步骤k1=f_function(x,y)k2=f_function(x+h/2,y+h/2*k1)k3=f_function(x+h/2,y+h/2*k2)k4=f_function(x+h,y+h*k3)y= y+h/6*(k1+2*k2+2*k3+k4)  #得到yn+1的值x=x+h     #x步进#输出各步进状态的计算结果
for i in range(len(xlist)):print(xlist[i],ylist[i])y_accurate_list.append(f_accurate(xlist[i]))#求精确解#将结果绘图
plt.plot(xlist,ylist,'x-',color='red',label='R-K Results')
plt.plot(xlist,y_accurate_list,'o',color='green',label='Accurate Results')
plt.legend()
#plt.title('Computation Comare')
plt.xlabel("x")
plt.ylabel("y")
plt.show()
print('over')

3.计算过程如下:


其中第一列为x,第二列为龙格-库塔法计算结果,第三列为精确解。

0.0 1.00000 1.00000
0.1 1.09545 1.09545
0.2 1.18322 1.18322
0.3 1.26491 1.26491
0.4 1.34164 1.34164
0.5 1.41422 1.41421
0.6 1.48324 1.48324
0.7 1.54920 1.54919
0.8 1.61246 1.61245
0.9 1.67332 1.67332
1.0 1.73206 1.73205
1.1 1.78886 1.78885
1.2 1.84392 1.84391
1.3 1.89738 1.89737
1.4 1.94937 1.94936
1.5 2.00001 2.00000
1.6 2.04941 2.04939
1.7 2.09764 2.09762
1.8 2.14478 2.14476
1.9 2.19092 2.19089
计算结束

结合下图可以看出,四阶龙格-库塔法的计算精度是比较高的。
在这里插入图片描述

参考文献

https://www.bilibili.com/read/cv15448483/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

59.以太网数据回环实验(2)硬件资源梳理及系统框图

硬件资源梳理介绍&#xff1a; 升腾开发板使用的以太网PHY芯片型号为RTL8211F&#xff0c;是低功耗10-BASE/100-BASE/1000-BASE全双工以太网PHY层芯片&#xff0c;支持 10Mbps、100Mbps 和 1000Mbps以太网通信。I/O 引脚电压可变&#xff0c;符合 IEEE802.3-2005 标准&#xff…

Web3社交新经济,与 SOEX 实现无缝交易的高级安全性

出于充分的理由&#xff0c;安全性是交易中至关重要的考虑因素。每个人都应该确保自己的资金在交易时是安全的。由于 &#xff33;&#xff2f;&#xff25;&#xff38; 充当您与交易所的最佳连接&#xff0c;因此必须强调的是&#xff0c;该系统不会引发任何安全问题。 &a…

wincc 远程和PLC通讯方案

有 5个污水厂 的数据需要集中监控到1个组态软件上,软件是WINCC。每个污水厂监控系统都是独立的&#xff0c;已经投入运行了&#xff0c; 分站也是WINCC 和西门子PLC 。采用巨控远程模块的话&#xff0c;有两种方式&#xff1a;一种是从现场的PLC取数据&#xff0c;一种是从分站…

@DateTimeFormat和@JsonFormat的区别和使用场景

一、区别 DateTimeFormat 用于前端给后端传参时 JsonFormat 用于后端给前端返回时 二、使用场景 2、1 JsonFormat的场景 1、**&#xff08;错误写法&#xff09; **如果参数是实体类&#xff0c;不可以使用DateTimeFormat&#xff0c;这种写法前端传参序列化会报错&#xf…

设计模式-结构型模式-组合模式

1.组合模式的定义 将对象组合成树形结构以表示整个部分的层次结构&#xff0c;组合模式可以让用户统一对待单个对象和对象的组合&#xff1b;其更像是一种数据结构和算法的抽象&#xff0c;其中数据可以表示成树这种数据结构&#xff0c;业务需求可以通过在树上的递归遍历算法来…

论文速读|BiGym:一款基于演示的移动双手操作机器人基准

项目地址&#xff1a;BiGym: A Demo-Driven Mobile Bi-Manual Manipulation Benchmark BiGym 是一个针对移动双手操作的机器人学习基准&#xff0c;包含 40 个在家庭环境中进行的任务&#xff0c;如简单的目标接近到复杂的厨房清洁。这些任务涵盖了从固定的目标接近到需要与各种…

儿童耳勺需要买吗?真实测评赞誉有加的五大品牌

作为个护师&#xff0c;经常会碰到有家长问我需不需要买儿童耳勺&#xff0c;我每次的回答都必须是要的。因为传统耳勺由于不可视的原因&#xff0c;家长无法看清儿童狭窄的耳道&#xff0c;极容易刮伤儿童耳道。但是需要买哪种儿童耳勺&#xff1f; 这里可以跟大家分享一款神器…

vue项目生成插件的LICENSE文件

一、安装license-webpack-plugin npm install --save-dev license-webpack-plugin 二、添加webpack配置 const {LicenseWebpackPlugin} require(license-webpack-plugin)module.exports {configureWebpack: {plugins: [new LicenseWebpackPlugin()]} }三、执行npm run buil…

sM4040B科学级显微制冷相机特性

sM4040B科学级显微制冷相机特性 sM4040B搭载了 GSENSE4040BSI 3.2 英寸图像传感器&#xff0c;针对传感器固有的热噪声&#xff0c;专门设计了高效制冷模块&#xff0c;使得相机传感器的工作温度比环境温度低达 35-40 度。针对制冷相机常见的低温结雾现象设计了防结雾机制&…

计算机岗位(面试)

计算机岗位&#xff08;面试&#xff09; 明确从事工作内容&#xff1a; 计算机网络、设备、器材维护与管理等工作&#xff1b;计算机应用、数据分析、网络维护等工作&#xff1b;软件开发、网络维护与管理相关专业&#xff1b;信息保障、信息资源维护和建设&#xff1b;软件工…

推荐适合中秋的SVG模版(第III期)

宝藏模版 往期推荐&#xff08;点击阅读&#xff09;&#xff1a; 趣味效果&#xff5c;高大上&#xff5c;可爱风&#xff5c;年终总结I&#xff5c;年终总结II&#xff5c;循环特效&#xff5c;情人节I&#xff5c;情人节II&#xff5c;妇女节&#xff5c;儿童节I&#xff…

如何用 Typed.js 制作炫酷的打字效果?

前言 在前端开发的世界中&#xff0c;动态和交互性是用户体验的关键。 Typed.js 是一个轻量级的 JavaScript 库&#xff0c;它能够以编程方式模拟打字效果&#xff0c;为网页增添动态的文本展示。 这篇文章将带你深入了解 Typed.js 的魔力&#xff0c;探索它如何为前端开发带…

【Linux网络】应用层协议HTTP(1)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux网络 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 应用层协议HTTP 的相关内容。 如果看到最后您觉得这篇文章写得…

Mybatis链路分析:JDK动态代理和责任链模式的应用

背景 此前写过关于代理模式的文章&#xff0c;参考&#xff1a;代理模式 动态代理功能&#xff1a;生成一个Proxy代理类&#xff0c;Proxy代理类实现了业务接口&#xff0c;而通过调用Proxy代理类实现的业务接口&#xff0c;实际上会触发代理类的invoke增强处理方法。 责任链功…

算法笔试-编程练习-好题-03

这是一道非常综合的质数类的题目&#xff0c;值得仔细理解。 题目描述 n个正整数ai&#xff0c;希望你求出这些数的阶乘全部乘在一起生成的大数有多少个因子 输入描述 第一行输入一个正整数n。 第二行输入n个正整数ai​&#xff0c;用空格隔开 1≤n≤2 1≤ai≤ 输出描述 一个…

IP地址存在的意义及更改方法探析

在互联网的广阔天地中&#xff0c;‌每一个连接的设备都拥有一个独特的身份标识——IP地址。‌它不仅是设备在网络中的“身份证”&#xff0c;‌更是确保数据传输准确无误的基石。‌然而&#xff0c;‌随着网络环境的不断变化&#xff0c;‌有时我们需要更改设备的IP地址以适应…

关于SpringMVC的理解

1、SpringMVC 应用 1.1、简介 1.1.1、MVC 体系结构 三层架构&#xff1a; 我们的开发架构⼀般都是基于两种形式&#xff0c;⼀种是 C/S 架构&#xff0c;也就是客户端/服务器&#xff1b;另⼀种是 B/S 架构&#xff0c;也就是浏览器服务器。在 JavaEE 开发中&#xff0c;⼏乎…

2024最新PyCharm下载安装激活汉化教程!(附激活码)

激活码&#xff08;文末附带精品籽料&#xff09;&#xff1a; K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6I…

Qt模态对话框与非模态对话框

前言 在 Qt 中&#xff0c;模态对话框和非模态对话框是两种常见的对话框类型&#xff0c;它们的主要区别在于用户与应用程序的交互方式。 正文 对话框就是指QDialog嘛。 模态对话框 (Modal Dialog) 定义: 模态对话框是指在弹出对话框期间&#xff0c;用户无法与应用程序的…

Linux的远程登录教程(超详细)

我们在进行远程登录时要用的一种协议叫SSH&#xff0c;那什么叫SSH呢&#xff1f; SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于在不安全的网络中提供安全的远程登录和其他网络服务。它通过加密技术确保数据在传输过程中的机密性和完整性&#xff…