假设你得到了一个 ,其中 ,因变量,是自变量 的函数,并且给定了 。这是一个常微分方程的初值问题,因为它指定了初始条件和给出 的微分方程。问题是计算 在 点的值。求解这类问题存在各种各样的数值方法。它们产生一个数值解,它只是一个值序列 ,对应于点 。
数值解是一个近似解。用 表示的真实解可能是
无论如何,数值解给了我们一个基于已知信息计算 的算法。因此,人们可以编写一个计算机程序来计算它。这就是模拟的基础。
欧拉方法是最简单的,它有点类似于数值地计算积分。在图形上很容易看到发生了什么。在每个点 x_n,你只是观察导数告诉你的前进方向,然后朝那个方向迈出一小步。
- 设 ,其中h 是某个小的步长值。
- 设 。
- 设 ,其中h 是某个小的步长值。
- 设 。
- 令 .
现在我们将介绍一些使用该算法的示例。
假设我们也知道我们要使用 n=4 次迭代计算 f(1)。因此 h=1/4=.25。
- x_0=0, y_0=5
- x_1=.25, y_1=5+.25*f'(0,5)=5+.25*0=5
- x_2=.5, y_2=5+.25*f'(.25,5)=5+.25*.25=5+.0625=5.0625
- x_3=.75, y_3=5.0625+.25*f'(.5,5.0625)=5.0625+.25*.5=5.0625+.125=5.1875
- x_4=1, y_4=5.1875+.25*f'(.75,5.1875)=5.1875+.25*.75=5.1875+.1875=5.375
所以我们完成了,我们知道 f(1)~=5.375。
我们通过积分知道精确解,y'=x,所以 y=x^2/2+c。在我们的例子中,为了计算 c,我们将 0 替换为 x,将 5 替换为 y,以看到 c=5。所以 f(1)=1^2/2+5 = 5.5。
误差只取决于函数的凹凸性(二阶导数)。因此我们可以估计误差为 O(x^2)。我们可以通过采用更小的步长来减少误差。
龙格-库塔方法是一系列算法,特别适合于数值求解联立微分方程组。
假设我们有一对联立方程,形式为
,以及
,
我们希望对它们进行数值积分,相对于 t,步长为 。然后我们计算以下数量
和 然后分别增加 和 ,然后为下一步重新计算所有上述数量。
显然,此方法可以扩展到三个或更多个联立方程,误差为 阶。这种方法的高精度和易于实现使其成为一种流行的计算工具。
同样有用的是, 可以在算法的任何步骤之后更改,这允许处理变量的快速变化。