龙格-库塔方法学习笔记

article/2025/8/29 22:19:27

1、龙格-库塔法简介

   龙格—库塔法是一种在工程上应用广泛的高精度单步算法,其中包括著名的欧拉法,用于数值求解微分方程。 由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。 在各种龙格—库塔法当中有一个方法十分常用,该方法主要是在已知方程导数和初值信息,利用计算机仿真时应用,省去求解微分方程的复杂过程,该方法被称为“RK4”或者就是“龙格—库塔法”。

2、龙格-库塔法基本思想

   在了解龙格—库塔法之前先回顾一下欧拉法。

2.1 欧拉法基本原理

在这里插入图片描述

   若已知上述方程组某点坐标,以及该点的斜率值,则可以使用欧拉法对 y(x) 进行迭代的近似求解。求解分析:已知 x = x0 时 y = y0 y=y ,且斜率为 y′( x0) = f ( x0 , y0 ) ,那么就可以用过该点且斜率为 y′( x0) 的直线近似求解 x0 附近一点 x1 的函数值。

   构建直线:
在这里插入图片描述
   那么,在 x = x1 时,求得:
在这里插入图片描述
可以求得 y = y ( x1 ),重复以上步骤,可以求得 y(x2) , y(x3) , ⋯   , y (xn) 。如果等间隔取 x 值,即 x1−x0= x2− x1 = x3 − x2 = ⋯ = xn − xn−1 = h,也即 xn = x0 + n ⋅ h 可以得到
在这里插入图片描述
总结为:
在这里插入图片描述
该公式就是欧拉公式。

2.2 龙格-库塔基本原理

   龙格-库塔算法是对欧拉法的改进,都是使用过 ( xk , yk) 的直线来近似下一点的函数值 yk+1 ,区别在于斜率的选择。在欧拉法中,直接使用该点的切线 y′(xk) 当做直线的斜率,这样会造成对于 y(xk+1) 的求解一定存在误差,除非 y(x) 为直线时,结果才是准确的。基于上面的考虑,需要解决的便是如何提高 y(xk+1) 求解的精度;或者说在知道 ( xk , yk) 的情况下,如何确定直线斜率确保恰好经过待估测点 y(xk+1) 。答案是利用拉格朗日中值定理。

   拉格朗日中值定理如下:

在这里插入图片描述

即在 ( xk , xk+1) 区间内存在一点 ϵ (xk< ϵ < xk+1) ,使得等式 f (xk+1) − f (xk) = f ′( ϵ ) (xk+1 − xk) 成立。

所以准确的直线方程为:
在这里插入图片描述
如果等间距取值,即 xk+1 − xk = h ,则有

在这里插入图片描述
其中,θ ∈ ( 0 , 1 ) ,而当 θ = 0 时就是欧拉法。

.
   现在,原理已经明确了,但如何确定 y′(ϵ) 的取值?这就涉及到算法的精度问题。考虑到直接使用端点处 y′( xk ) 的斜率不准确,那么取两端点斜率的平均准确度肯定就提升了一点,即y′(ϵ) 取
在这里插入图片描述
为了方便书写,将 y′(xk) = κ1, y′(xk+1) = κ2 ,即用 κ 表示斜率。则上式这可改写为:
在这里插入图片描述根据已知条件方程 y′(x) = f(x,y) ,同理可得:
在这里插入图片描述
其中 f(x,y) 是已知的,而 f(xk+1 , yk+1) 中的 yk+1 是未知的,若用欧拉法来估计此处的 yk+1,即有:
在这里插入图片描述
当然这是不准确的,若用两点的平均斜率来提高精,则有:
在这里插入图片描述
   值得注意的是,对于两端点斜率取平均是出于习惯,但实际应用中是对两斜率进行加权,取平均只是习惯性的把两者权重取相等而已,因此更一般描述为:
在这里插入图片描述

.
   根据上述斜率取平均值的思路,进行递推取 n 个点,获得更多点加权来估算 f′(ϵ) 的值所得结果精度肯定更高。现在,假设在 (xk, xk+1) 区间取 n 个点,对应点为 xk1h , xk2h , xk3h , ⋯   , xknh , 且 α ∈ [ 0 , 1 ] ,在每个点的斜率记为 κ1, κ2, ⋯   , κn ,对应加权为 λ1 , λ2, ⋯   , λn , 那么有
在这里插入图片描述
则有:
在这里插入图片描述
λ 为自取值,对于 κ 有:
在这里插入图片描述
通常 α1 取0,即对应 xk 点;此时,κ1 = f (xk, yk) 。同样,对于其余式子 f 自变量中的 y(xk+ αnh ) 使用欧拉法来求,即有:
在这里插入图片描述

总结以上,即得到龙格-库塔基本表达式:
在这里插入图片描述
其中:λ1, λ2, ⋯ , λn 为对应采样点斜率权值,满足 λ1 + λ2 + ⋯ + λn = 1 ;

   α1, α2, ⋯ , αn 为采样点位置比率,满足 0 < α1 < α2 < ⋯ < αn

.

3、 案例:四阶龙格-库塔法求解微分方程

   本次案例使用的微分方程如下:
在这里插入图片描述

   本次案例使用的是常用的 经典R-K方法,如下:

在这里插入图片描述

.
运行代码

# lgkt
import numpy as npdef RK(x0, y0, h, n, func):"""x0: 初始点x坐标y0: 初始点y坐标h: 步长n: 迭代次数func: 事先定义好的f(x,y)"""x = np.linspace(x0, x0 + (n - 1) * h, num=n)y = np.zeros_like(x)y[0] = y0for i in range(n - 1):k1 = func(x[i], y[i])k2 = func(x[i] + h / 2, y[i] + h * k1 / 2)k3 = func(x[i] + h / 2, y[i] + h * k2 / 2)k4 = func(x[i] + h, y[i] + h * k3)y[i + 1] = y[i] + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6return x, yif __name__ == '__main__':# y'=f(x,y)=2x/(3y^2)f = lambda x, y: 2 * x / (3 * y * y)X, Y = RK(0, 1, h=0.4, n=5, func=f)print("X=", X)print("Y=", Y)

http://chatgpt.dhexx.cn/article/n0k7endp.shtml

相关文章

四阶龙格库塔法的计算例子

序 没有对比就没有伤害&#xff0c;本文先给出很多时候直接采用的矩形法&#xff0c;然后与四阶龙格库塔法做比较&#xff0c;着重说明四阶龙格库塔法。 一、矩形法 1.1 原理 设微分方程 y ˙ f ( y ) (1.1) \dot yf(y) \tag{1.1} y˙​f(y)(1.1) 求 y y y。 使用数值方法…

龙格-库塔法(Runge-Kutta methods)

非线性的常微分方程通常是难以求出解析解的&#xff0c;只能通过多次迭代求近似的数值解。 龙格&#xff0d;库塔法&#xff08;Runge-Kutta methods&#xff09;是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。简写做RK法。 对于任意的Yf(X),假设某点(Xi,Yi)的斜…

龙格-库塔(Runge-Kutta)方法C++实现

龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高&#xff0c;采取措施对误差进行抑制&#xff0c;所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。 1 中点法 2传统二阶龙格库塔法&#xff1a; 3 传统三阶龙格库塔法 4 传…

龙格库塔法

1 基本思想 我们求解常微分方程的时候&#xff0c;某些常微分方程有解析方法&#xff0c;但是大多数的常微分方程只能用数值解法来求解。 数值解法的一个基本特点就是“递进式”&#xff0c;顺着节点的顺序一步一步向前推进。 龙格库塔法的基本思想就是利用f(x,y)在某些特殊点…

关于html中文字空格以及换行符的处理

在阮一峰大神的博客中发现空格原来可以有多种处理方式&#xff0c;过去只知道用$nbsp;真是惭愧。长路漫漫吖 目录 1、html里面的空格2、怎样原样显示空格和换行符2.1 使用pre标签2.2 使用white-space设置样式 3、参考链接 1、html里面的空格 在html里面&#xff0c;空格和换行符…

html5中如何取消换行,html5换行符元素: 元素

1. 基本概念 html5中的元素用于产生一个换行符&#xff0c;它的名称br正是单词break的前两个字母&#xff1b;break本身的含义为“打破、拆分”&#xff0c;在此处就引申为换行的意思。 为什么html5要专门定义一个元素来代表换行符呢&#xff1f;我们平常在办公软件中编辑文本的…

linux换行符 r,\r \n 回车换行符详解

\r \n 回车换行符详解 \r \n 回车换行符详解 \r \n 回车换行符详解1. \r \n 回车换行的含义1.1 \r 回车 1.2 \n 换行 2. \r \n 回车换行的历史2.1 \r \n 回车换行的历史 2.2 发展:linux 和 windows的不同 参考: 1.1 \r 回车 回车 CR (carriage return) 含义:return oldline …

html文本换行符

2019独角兽企业重金招聘Python工程师标准>>> p的样式&#xff1a;white-space:pre;或者white-space:pre-wrap;或者white-space:pre-line; <p> abcdef </p> 转载于:https://my.oschina.net/u/3407699/blog/1829940

在html中js如何给字符串中加换行符

var str 如果有一天休息休息下cvcvx,"\n" 那么&#xff5e;&#xff5e;&#xff5e;; 这种写法在html中是会被识别为"如果有一天休息休息下cvcvx,\n 那么&#xff5e;&#xff5e;&#xff5e;" 那么如何保证其这么写会被识别&#xff0c;只需要在该d…

linux cr换行符,回车符CR和换行符LF

我在Windows电脑上做开发时,经常会见到这个现象。代码从远程git仓库clone下来后,然后npm install安装依赖后,打开任意一个代码文件会看到每行结尾处有如下报红: 将鼠标指针停留在行尾报红处,会浮出如下提示: Expected linebreaks to be LF but found CRLF.eslint(linebre…

文本文件换行符

文本文件的每一行结尾用一个或者两个特殊的ASCII字符进行标识&#xff0c;这个标识就是换行符&#xff0c;不同的操作系统中会采用不同的换行符。 1.CR、LF、CRLF 主要的换行符有三种&#xff1a;LF&#xff08;Line Feed即换行&#xff0c;转义字符用“\n”表示&#xff0c;十…

html语言中的换行标签是,什么是换行符标签

HTML语言中换行的代码是什么&#xff1f; 方法有很多&#xff0c;但要做到用的恰到好处 段落标签 一个段落空一行 效果如下&#xff1a; 是默认的换行&#xff0c;在你要换行的地方加进去就行&#xff0c;单个标签 效果如下&#xff1a; 如果有了 ……&#xff0c;从到中的内容…

html语言换行格式,html换行符br标签

br标签的作用 在 html 源代码中对内容进行编辑,如果直接采用回车换行,那么浏览器解析的结果可能会是一个空格、或者被忽略,正确的做法是使用< br / >标签,在 html 语言中,br标签定义为一个换行符,所以应将它理解为简单的输入一个空行,而不是用来对内容进行分段。 …

html语言换行符,html换行符

在html源代码中对内容进行编辑&#xff0c;如果直接采用回车换行&#xff0c;那么浏览器解析的结果可能会是一个空格、或者被忽略&#xff0c;正确的做法是使用标签&#xff0c;在html语言中&#xff0c;br标签定义为一个换行符&#xff0c;所以应将它理解为简单的输入一个空行…

html怎么换行?换行代码是什么?九种html文字换行方法总结

在用html写网页时&#xff0c;为了让网页中内容看起来整洁流畅&#xff0c;我们需要将其中的文字内容进行换行&#xff0c;那么&#xff0c;html怎么来换行呢&#xff1f;本篇文章就来给大家介绍一下html中给文字换行的方法。 打造全网web前端全栈资料库&#xff08;总目录&am…

零基础HTML入门教程(11)——换行br

本章目录 1.任务目标2.br换行标签3.代码演示4.小结 1.任务目标 我们上一小节学习了img图像&#xff0c;我们这一小节学习一下新的标签br换行标签&#xff0c;并且熟练使用。 2.br换行标签 br 可插入一个简单的换行符。 br 标签是空标签&#xff08;意味着它没有结束标签&…

求菲波那切数列数列第n项三种方法小结

菲波那切数列数列的应用场景还是比较多的&#xff0c;比如可以在考试的时候考你递归啊&#xff0c;早上碰到的一道题就是这样&#xff0c;骄傲地写下递归方程&#xff0c;结果TLE了&#xff0c;然后旁边的大神给我说了一个叫滚动数组的东西。。。题目是这样的You are climbing …

PTA题库函数递归 菲波那切数列(递归版)

请编写递归函数&#xff0c;求菲波那切(Fibonacci)数列某一项的值。 0, 1, 1, 2, 3, 5, 8, 13 , 21, 34, 55, 89, 144, ... 函数原型 double Fib(int index);说明&#xff1a;参数 index 为数列项的索引号&#xff0c;从 0 开始计数。函数值为 Fibonacci 数列第 index 项的值…

菲波那切数列(Java)

题目&#xff1a; 写一个函数&#xff0c;输入n&#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第n项。斐波那契数列的定义如下&#xff1a; 知识点&#xff1a; 递归&#xff1a;是在一个函数的内部调用这个函数自身。循环&#xff1a;则是通过设置计算的初…

求解斐波那切数列的几种算法

斐波那切数列我们并不陌生。在百度百科中我们可以找到有关它的定义&#xff1a;斐波纳契数列&#xff08;Fibonacci Sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;指的是这样一个数列&#xff1a;1、1、2、3、5、8、13、21、……在数学上&#xff0c;斐波纳契…