资源
一个 微分方程 是一个将某个函数与其导数联系起来的方程。这种关系通常存在于动态系统建模中,其中一个量的变化率受另一个量的影响,该量可以是其他量的函数。因此,微分方程通常用于在许多学科中数学地表示这些关系,包括工程、物理学、经济学和生物学。我们将重点关注常微分方程,它不涉及偏导数。
微分方程的解是满足该方程的函数或函数集。一些具有明确公式的简单微分方程可以通过解析方法求解,但我们始终可以使用数值方法使用计算机以一定精度来估计答案。
https://martinfowler.com.cn/bliki/TwoHardThings.html "计算机科学中的两件难事:缓存失效、命名事物和 off-by-one 错误。"
一阶微分方程的一般形式:
或
。解包含一个任意常数(积分常数),因为
满足所有微分方程
满足。使用辅助条件,例如 y(a)=b,我们可以解出 y'=F(x, y)。这被称为 初始值问题。
函数
的不定积分是一类函数
,使得
。不定积分也称为反导数。函数在固定区间上的定积分是一个数字。
计算积分
是要找到一个
满足条件
,
。换句话说,积分可以用来解出具有初始条件的微分方程。
欧拉方法的示意图。未知曲线为蓝色,其多边形近似为红色。
欧拉方法 使用逐步方法来解决具有初始条件的常微分方程。
给定
和
(
是自变量,
是因变量) 欧拉方法求解
对于
.
欧拉方法可以通过多种方式推导出来。让我们看看一个地理描述。
鉴于在特定点
,我们可以用
来近似
。导数表示
在
处的瞬时(连续发生)变化。

在
上的平均变化是
,
它表示变化的离散形式(随时间的“步长”变化)。如果
的变化足够小,则两者中的任何一个都可以用来近似另一个。
假设我们知道未知曲线的导数函数,并想找到曲线的形状(满足微分方程的函数)。我们可以从一个已知点开始,使用微分方程作为公式来获得曲线上任意点的切线的斜率,并沿着该切线走一小步,直到下一个点。如果步长足够小,我们可以预期下一个点会靠近曲线。如果我们假装该点仍在曲线上,就可以使用相同的方法来找到下一个点,以此类推。在图形上,我们使用多项式来近似未知曲线。两条曲线之间的间隙代表近似的误差,可以通过缩短步长来减少误差。
我们刚刚推导出欧拉方法的公式

给定
和
,求解
为 1 时,即 y(1) 的解。
欧拉方法的公式是递归定义的函数,可以迭代计算。
称为步长。如果我们选择 1 的步长,则解如下
方程
的数值积分图示。蓝色是欧拉方法;绿色是 中点法;红色是精确解,
步长为 h = 1.0。
 |
 |
 |
|
0 |
0 |
1 |
1
|
1 |
1 |
2 |
2
|
2 |
2 |
4 |
4
|
3 |
3 |
8 |
8
|
推导欧拉方法的另一种方法是使用
周围的泰勒展开

如果我们忽略高阶导数项,就会得到欧拉方法公式

龙格-库塔二阶方法中的一种是 中点法,这是一种改进的欧拉方法(单步方法),用于数值求解常微分方程。
.
中点法的公式如下
.
请注意,
是使用此方法对
的近似值。
假设
等于精确值
中点法计算
,使得红色弦线近似平行于中点处的切线(绿色线)。
龙格-库塔四阶方法通常被称为“RK4”,“经典的龙格-库塔方法”或简称“龙格-库塔方法”。

其中 i = 0, 1, 2, 3, . . . ,使用

该方法通过将
加上四个增量的加权平均值来计算
,每个增量都是步长
乘以估计的斜率。
是基于区间开始时的估计斜率的增量(欧拉方法);
是基于区间中点时的斜率的增量;
又是基于区间中点时的斜率的增量,但是现在使用
;
是基于区间结束时的斜率的增量,使用
。
在对四个增量进行平均时,给中点时的增量更大的权重。权重的选择方式是,如果
与
无关,则微分方程等效于一个简单的积分。
来源
iPython 笔记本中的解决方案