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

news2024/11/14 6:15:52

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 math

def f_function(x,y):     #完成对微分方程的表达
    y_pie=0.0
    #y_pie=math.cos(x)   #对于不同的微分方程,这里采用不同的表达式
    y_pie=y-2.0*x/y
    return y_pie

def 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.coloradmin.cn/o/2105132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工厂验收(FAT)和现场验收(SAT)的含义

工厂验收&#xff08;Factory Acceptance Test&#xff0c;FAT&#xff09;和现场验收&#xff08;Site Acceptance Test&#xff0c;SAT&#xff09;是在工程领域中常见的术语&#xff0c;用于确保设备在制造商及用户之间达成一致的验收标准&#xff0c;保证设备能够正常、安全…

【图灵完备 Turing Complete】游戏经验攻略分享 Part.2 算术运算

算术运算部分算是开始有难度了。 前几关按照自己思路来&#xff0c;二进制速算应该没问题。 画真值表&#xff0c;卡诺图&#xff0c;推表达式。 下面几关&#xff0c;几个输出信号分开来看&#xff0c;有三个输出就画三个卡诺图&#xff0c;有几个画几个&#xff0c;分而治之。…

Shadow Dom 是什么

概念 官方&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/API/Web_components/Using_shadow_DOM 核心&#xff1a;影子 DOM&#xff08;Shadow DOM&#xff09;允许你将一个 DOM 树附加到一个元素上&#xff0c;并且使该树的内部对于在页面中运行的 JavaScript 和…

Java笔试面试题AI答之正则表达式(3)

文章目录 13. 简述Java String支持哪几种使用正则表达式的方法&#xff1f;14. 请列举常见校验数字的表达式 &#xff1f;15. 请列举常见校验字符的表达式 &#xff1f;1. 汉字2. 英文和数字3. 特定长度的字符串4. 由26个英文字母组成的字符串5. 由数字和26个英文字母组成的字符…

JVM面试(五)垃圾回收机制和算法

概述 了解Java虚拟机的垃圾回收机制&#xff08;Garbage Collection&#xff0c;简称GC&#xff09;&#xff0c;我们也要像其作者John McCarthy一样&#xff0c;思考一下三个问题&#xff1a; 哪些内存需要回收&#xff1f;什么时候回收&#xff1f;如何回收&#xff1f; 虽…

pytorch+深度学习实现图像的神经风格迁移

本文的完整代码和部署教程已上传至本人的GitHub仓库&#xff0c;欢迎各位朋友批评指正&#xff01; 1.各代码文件详解 1.1 train.py train.py 文件负责训练神经风格迁移模型。 加载内容和风格图片&#xff1a;使用 utils.load_image 函数加载并预处理内容和风格图片。初始化…

网络攻击全解析:主动、被动与钓鱼式攻击的深度剖析

在当今这个互联网高度普及与深度融合的时代&#xff0c;网络攻击&#xff0c;这一赛博空间的隐形威胁&#xff0c;正以前所未有的频率和复杂度挑战着网络安全乃至国家安全的底线。为了更好地理解并防范这些威胁&#xff0c;本文将深入剖析网络攻击的主要类型——主动攻击、被动…

程序设计基础

一、程序 1.什么是程序&#xff1f; 程序可以看作是对一系列动作的执行过程的描述。 计算机程序是指为了得到某种结果而由计算机等具有信息处理能力的装置执行的代码化指令序列。 程序的几个性质&#xff1a; ● 目的性 ● 分步性 ● 有限性 ● 可操作性 ● 有序性 2…

Splasthop 安全远程访问帮助企业对抗 Cobalt Strike 载荷网络攻击

一、背景 根据 FreeBuf&#xff08;标题为&#xff1a;潜藏系统2个月未被发现&#xff0c;新型网络攻击瞄准中国高价值目标&#xff09;和 The Hacker News&#xff08;标题为&#xff1a;New Cyberattack Targets Chinese-Speaking Businesses with Cobalt Strike Payloads&a…

农产品自主供销系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;农产品管理&#xff0c;资讯信息管理&#xff0c;订单管理&#xff0c;资讯回复管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;农产品&#xff0c;购物车&#xff0c;我的 开发系统&#…

接口自动化测试学习 —— Mock服务实现

1.Mock实现原理和实现机制 在某些时候&#xff0c;后端在开发接口的时候&#xff0c;处理逻辑非常复杂&#xff0c;在测试的时候&#xff0c;后端在未完成接口的情况下该如何去测试呢&#xff1f; 我们需要测试&#xff0c;但是有些请求又需要修改一下参数&#xff0c;或者改变…

说明书keithley2420吉时利2410数字源表

说明书keithley2420吉时利2410数字源表 产品概述 Keithley 2420 高压源表是一款 60W 仪器&#xff0c;设计用于提供和测量 5V&#xff08;源&#xff09;和 1V&#xff08;测量&#xff09;至 60V 的电压和 100pA 至 3A 的电流。2420 型的生产测试应用包括必须在更高电流水平下…

微信和苹果叫板的资本

这两天&#xff0c;关于苹果用户还能不能使用微信这么一个新闻炒得沸沸扬扬的。其实&#xff0c;在很多年前我就说过&#xff0c;腾讯和苹果必有一战。那么这一战到了今天终于到来了。 原因其实也很简单。这个事件的背后&#xff0c;并不是简单的腾讯和苹果彼此之间抽成争夺的问…

pr瘦脸怎么操作?

相信大家平时在拍摄自己的日常生活的时候&#xff0c;通常为了保证视频的清晰度往往都会选择原相机进行拍摄&#xff0c;原相机拍摄自然就会清清楚楚的将我们的真实展现出来&#xff0c;特别是脸部肥大~那么&#xff0c;这么大的一张脸这么可以瘦下去呢&#xff1f;其实使用PR软…

glsl着色器学习(五)

接下来是创建buffer&#xff0c;设置顶点位置&#xff0c;法线&#xff0c;顶点索引等。 const cubeVertexPositions new Float32Array([1, 1, -1,1, 1, 1, 1, -1, 1, 1, -1, -1,-1, 1, 1, -1, 1, -1,-1, -1, -1,-1, -1, 1,-1, 1, 1,1, 1, 1,1, 1, -1,-1, 1, -1,-1, -1, -1,1…

2024.9.3C++

自行实现Mystring类 #include <iostream> #include <cstring> using namespace std;class mystring { public:mystring(){len 0;str nullptr;}mystring(const char* s){len strlen(s);str new char[len 1];strcpy(str, s);}mystring(const mystring& othe…

短时相关+FFT捕获方法的MATLAB仿真

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 短时相关FFT捕获方法的MATLAB仿真 前言短时相关FFT捕获相关原理1、频偏引起的相关损失2、扇贝损失 MATLAB程序获取完整程序 前言 对于算法类的工程&#xff0c;FPGA设计&…

pandas数据处理库使用

文章目录 链接: [原文章链接](https://mp.weixin.qq.com/s?__bizMzkzNjI3ODkyNQ&tempkeyMTI4Nl8zM3FHVFU1NDRDL0p2SkplRTVidmhiNmh1ZWF3YXkwY3VYZlZNaWx0MXowdThFbVRUVEFEdEs5YlU2SUJLcmtXTHZpbnFmR2V6SG1rbGJyd01zYnRkdURWa1ZvNGtIU1piWDd5RFA4OUxkNmlaVmZ1QVpEd2tWR25IR…

MySQL常用窗口函数总和

在 MySQL 中&#xff0c;窗口函数是一类用于在查询结果集中计算值的函数&#xff0c;允许用户根据数据行进行聚合或排序操作&#xff0c;同时保留行的详细信息。窗口函数在分析数据时非常有用&#xff0c;因为它们允许您在不缩小结果集的情况下对数据进行复杂的计算。 常见的窗…

【文献及模型、制图分享】县域城乡融合发展对乡村旅游地实现共同富裕的影响机制——以长三角地区60个典型县为例

文献介绍 乡村旅游地是推动城乡融合、实现共同富裕的关键区域&#xff0c;精准把握县域城乡融合发展多维特征&#xff0c;系统解析其促进乡村旅游地共同富裕的机制&#xff0c;有助于丰富新时代城乡共富理论体系。基于共生理论&#xff0c;构建“共生单元—共生环境—共生结果…