资源
一个 微分方程 是一个将某个函数与其导数联系起来的方程。这种关系通常存在于动态系统建模中,其中一个量的变化率受另一个量的影响,该量可以是其他量的函数。因此,微分方程通常用于在许多学科中数学地表示这些关系,包括工程、物理学、经济学和生物学。我们将重点关注常微分方程,它不涉及偏导数。
微分方程的解是满足该方程的函数或函数集。一些具有明确公式的简单微分方程可以通过解析方法求解,但我们始终可以使用数值方法使用计算机以一定精度来估计答案。
https://martinfowler.com.cn/bliki/TwoHardThings.html "计算机科学中的两件难事:缓存失效、命名事物和 off-by-one 错误。"
一阶微分方程的一般形式: 或 。解包含一个任意常数(积分常数),因为 满足所有微分方程 满足。使用辅助条件,例如 y(a)=b,我们可以解出 y'=F(x, y)。这被称为 初始值问题。
函数 的不定积分是一类函数 ,使得 。不定积分也称为反导数。函数在固定区间上的定积分是一个数字。
计算积分 是要找到一个 满足条件 ,。换句话说,积分可以用来解出具有初始条件的微分方程。
欧拉方法 使用逐步方法来解决具有初始条件的常微分方程。
给定 和 ( 是自变量, 是因变量) 欧拉方法求解 对于 .
欧拉方法可以通过多种方式推导出来。让我们看看一个地理描述。
鉴于在特定点 ,我们可以用 来近似 。导数表示 在 处的瞬时(连续发生)变化。
在 上的平均变化是
- ,
它表示变化的离散形式(随时间的“步长”变化)。如果 的变化足够小,则两者中的任何一个都可以用来近似另一个。
假设我们知道未知曲线的导数函数,并想找到曲线的形状(满足微分方程的函数)。我们可以从一个已知点开始,使用微分方程作为公式来获得曲线上任意点的切线的斜率,并沿着该切线走一小步,直到下一个点。如果步长足够小,我们可以预期下一个点会靠近曲线。如果我们假装该点仍在曲线上,就可以使用相同的方法来找到下一个点,以此类推。在图形上,我们使用多项式来近似未知曲线。两条曲线之间的间隙代表近似的误差,可以通过缩短步长来减少误差。
我们刚刚推导出欧拉方法的公式
给定 和 ,求解 为 1 时,即 y(1) 的解。
欧拉方法的公式是递归定义的函数,可以迭代计算。 称为步长。如果我们选择 1 的步长,则解如下
|
|
|
|
0 |
0 |
1 |
1
|
1 |
1 |
2 |
2
|
2 |
2 |
4 |
4
|
3 |
3 |
8 |
8
|
推导欧拉方法的另一种方法是使用 周围的泰勒展开
如果我们忽略高阶导数项,就会得到欧拉方法公式
龙格-库塔二阶方法中的一种是 中点法,这是一种改进的欧拉方法(单步方法),用于数值求解常微分方程。
- .
中点法的公式如下
- .
请注意, 是使用此方法对 的近似值。
龙格-库塔四阶方法通常被称为“RK4”,“经典的龙格-库塔方法”或简称“龙格-库塔方法”。
其中 i = 0, 1, 2, 3, . . . ,使用
该方法通过将 加上四个增量的加权平均值来计算 ,每个增量都是步长 乘以估计的斜率。
- 是基于区间开始时的估计斜率的增量(欧拉方法);
- 是基于区间中点时的斜率的增量;
- 又是基于区间中点时的斜率的增量,但是现在使用 ;
- 是基于区间结束时的斜率的增量,使用 。
在对四个增量进行平均时,给中点时的增量更大的权重。权重的选择方式是,如果 与 无关,则微分方程等效于一个简单的积分。
来源
iPython 笔记本中的解决方案