跳转到内容

数值方法导论/常微分方程

来自维基教科书,开放书籍,开放世界

资源

一个 微分方程 是一个将某个函数与其导数联系起来的方程。这种关系通常存在于动态系统建模中,其中一个量的变化率受另一个量的影响,该量可以是其他量的函数。因此,微分方程通常用于在许多学科中数学地表示这些关系,包括工程、物理学、经济学和生物学。我们将重点关注常微分方程,它不涉及偏导数。

微分方程的解是满足该方程的函数或函数集。一些具有明确公式的简单微分方程可以通过解析方法求解,但我们始终可以使用数值方法使用计算机以一定精度来估计答案。

https://martinfowler.com.cn/bliki/TwoHardThings.html "计算机科学中的两件难事:缓存失效、命名事物和 off-by-one 错误。"

初始值问题

[编辑 | 编辑源代码]

一阶微分方程的一般形式:。解包含一个任意常数(积分常数),因为 满足所有微分方程 满足。使用辅助条件,例如 y(a)=b,我们可以解出 y'=F(x, y)。这被称为 初始值问题

函数 的不定积分是一类函数 ,使得 。不定积分也称为反导数。函数在固定区间上的定积分是一个数字。

与积分的联系

[编辑 | 编辑源代码]

计算积分 是要找到一个 满足条件 。换句话说,积分可以用来解出具有初始条件的微分方程。

欧拉方法

[编辑 | 编辑源代码]
欧拉方法的示意图。未知曲线为蓝色,其多边形近似为红色。

欧拉方法 使用逐步方法来解决具有初始条件的常微分方程。

给定 ( 是自变量, 是因变量) 欧拉方法求解 对于 .

欧拉方法可以通过多种方式推导出来。让我们看看一个地理描述。

鉴于在特定点 ,我们可以用 来近似 。导数表示 处的瞬时(连续发生)变化。

上的平均变化是

,

它表示变化的离散形式(随时间的“步长”变化)。如果 的变化足够小,则两者中的任何一个都可以用来近似另一个。

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

我们刚刚推导出欧拉方法的公式

示例

[edit | edit source]

给定 ,求解 为 1 时,即 y(1) 的解。

欧拉方法的公式是递归定义的函数,可以迭代计算。 称为步长。如果我们选择 1 的步长,则解如下

方程 的数值积分图示。蓝色是欧拉方法;绿色是 中点法;红色是精确解, 步长为 h = 1.0。
0 0 1 1
1 1 2 2
2 2 4 4
3 3 8 8

推导欧拉方法的另一种方法是使用 周围的泰勒展开

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

龙格-库塔二阶方法

[edit | edit source]

龙格-库塔二阶方法中的一种是 中点法,这是一种改进的欧拉方法(单步方法),用于数值求解常微分方程。

.

中点法的公式如下

.

请注意, 是使用此方法对 的近似值。

假设 等于精确值 中点法计算 ,使得红色弦线近似平行于中点处的切线(绿色线)。

龙格-库塔四阶方法

[edit | edit source]

龙格-库塔四阶方法通常被称为“RK4”,“经典的龙格-库塔方法”或简称“龙格-库塔方法”。

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

该方法通过将 加上四个增量的加权平均值来计算 ,每个增量都是步长 乘以估计的斜率。

  • 是基于区间开始时的估计斜率的增量(欧拉方法);
  • 是基于区间中点时的斜率的增量;
  • 又是基于区间中点时的斜率的增量,但是现在使用
  • 是基于区间结束时的斜率的增量,使用

在对四个增量进行平均时,给中点时的增量更大的权重。权重的选择方式是,如果 无关,则微分方程等效于一个简单的积分。

案例研究

[编辑 | 编辑源代码]

来源

iPython 笔记本中的解决方案

华夏公益教科书