<<主页
向后欧拉法 (Backward Euler Method)
本模块演示数值求解常微分方程(ordinary differential equation, ODE)初值问题的隐式向后欧拉法. 数值解法通过一步一步(step-by-step)的计算得到离散时间点上的函数近似值, 从而近似原问题的解函数. 使用向后欧拉法求解时, 每步计算都沿着解函数曲线在还未知的下一点处的切线(其斜率由常微分方程指定)进行外推. 特别地, 对于ODE y′ = f(t, y), 若算出了时刻tk的近似解yk, 向后欧拉法通过解隐式方程yk+1 = yk +
hk f(tk+1,
yk+1)得到yk+1, 来近似时刻tk+1 = tk +
hk的解y(tk+1).
由于这个方程可能是非线性的, 一般需要使用迭代法, 如不动点迭代法或牛顿法, 来求解它.
用户首先从下拉菜单中选择一个微分方程(differential equation). 此时在绘图区中, 会有一个黑点标记出所选微分方程在初始时刻t0的解函数值y0, 同时绘出对应的初值问题的准确解曲线. 从这个初始值开始, 用户可以使用向后欧拉法一步一步地求解这个问题. 求解的每一步又分为四个阶段, 每个阶段的执行通过用鼠标点击Next按钮或当前加亮显示的文字来触发:
- 使用水平滑块, 用户可以在允许的最小、最大值范围内选择从时刻tk到tk+1的步长hk. 下一个时刻近似解的迭代初值通过欧拉法使用当前选定的步长算出, 并显示为红色, 这条连接当前解和下一时刻解的线段随步长的改变而改变. 一旦用户设定好想要的步长, 需点击"Choose Step Size"或Next按钮让它生效, 此时这条线段的颜色由红色变为黑色, 说明固定了步长的大小. 由于迭代求解隐式方程会使下一时刻的函数近似值发生变化, 下一时刻近似解的的位置仍然用红点表示.
- 第二个阶段是求解隐式方程. 用户可以选择使用不动点迭代法(Functional Iteration)或牛顿法(Newton's Method), 通过点击Iterate按钮执行一次或多次迭代来求解非线性方程. 在这个阶段, 通过下一步临时解的ODE的准确解曲线用粉红色绘出, 相应的切线为紫色. 当求得隐式方程的解时, 连接当前解和下一时刻解的线段将与切线重合, 因此通过图形可直观地看到迭代收敛的过程. 残差(residual), 也就是隐式方程等号左、右两边之差, 作为是否收敛的另一种判据显示在迭代解法选项的下方. 注意, 非线性方程的求解过程并不总收敛, 尤其当步长很大时. 当用户对迭代求解过程的收敛情况满意时, 点击"Solve Implicit Equation"或Next按钮结束这个阶段. 这将使代表下一时刻解的红点变为黑点, 指示它已完全确定下来了, 同时在绘图区删去切线.
- 当前步的计算通过点击"Take Step"或
Next按钮来完成, 这将使绘图区下方的表格中增加一行, 显示一个新的时刻点上解函数的近似值和准确值. 同时, 绘图区中通过这个新坐标点的原微分方程的准确解曲线由粉红色变为灰色.
- 点击"Next Step"或Next按钮将为下一步计算做准备. 此时,绘图区中用一根红色线段显示下一步的缺省步长, 其值一般与前一步相同, 接着又可以重复选择步长阶段(Choose Step Size).
参考内容: 课本第8.2.3小节.