清华大学课程“数值分析”(No.20240033)
交互演示网站

<<主页

梯形法 (Trapezoid Method)

本模块演示数值求解常微分方程(ordinary differential equation, ODE)初值问题的梯形法. 数值解法通过一步一步(step-by-step)的计算得到离散时间点上的函数近似值, 从而近似原问题的解函数. 梯形法是欧拉法向后欧拉法两者取平均, 使用它求解时得到的相邻两个近似解连线的斜率正好是两个端点处解函数导数的算术平均. 特别地, 对于ODE y′ = f(t, y), 若算出了时刻tk的近似解yk, 梯形法通过解隐式方程yk+1 = yk + hk [f(tk, yk) + f(tk+1, yk+1)] ⁄ 2得到yk+1, 来近似时刻tk+1 = tk + hk的解y(tk+1). 由于这个方程可能是非线性的, 一般需要使用迭代法来求解. 本演示为求解隐式方程提供了不动点迭代法和牛顿法两个选项, 而使用显式的欧拉法来得到迭代求解的初值.

用户首先从下拉菜单中选择一个微分方程(differential equation). 此时在绘图区中, 会有一个黑点标记出所选微分方程在初始时刻t0的解函数值y0, 同时绘出对应的初值问题的准确解曲线. 从这个初始值开始, 用户可以使用梯形法一步一步地求解这个问题. 绘图区有两种显示模式, 即显示数值求解ODE整体进展的基本模式和显示每步求解隐式方程的替代显示模式:

  • 在基本显示模式中, 就像已经看到的, 初值问题的准确解和已计算出的近似数值解部分用黑线绘出. 在除了初始值以外的其他数值解节点上, 通过它们的ODE的准确解用灰色线条绘出.
  • 在替代显示模式中, 黑点标记前一个近似解, 而红点标记刚刚确定的下一个近似解. 通过已算出的节点的ODE准确解曲线用淡蓝色绘出, 而过那一点的切线为深蓝色. 通过标记新解的点的ODE准确解曲线用粉色绘出, 而相应的切线为红色. 通过两条切线的交点有一条绿色的直线, 其斜率等于两端点处导数的平均值.

要执行梯形法的一步, 用户需通过用鼠标点击Next按钮或当前加亮显示的文字来依次触发下面四个阶段:

  1. 使用水平滑块, 用户可以在允许的最小、最大值范围内选择从时刻tktk+1的步长hk. 下一个时刻近似解的迭代初值通过欧拉法使用当前选定的步长算出, 并显示为红色, 这条连接当前解和下一时刻解的线段随步长的改变而改变. 一旦用户设定好想要的步长, 需点击"Choose Step Size"Next按钮让它生效, 这使绘图区由基本显示模式变为替代显示模式, 为下一阶段做准备.
  2. 第二个阶段是求解隐式方程. 用户可以选择使用不动点迭代法(Functional Iteration)或牛顿法(Newton's Method), 通过点击Iterate按钮执行一次或多次迭代来求解非线性方程. 由于在求得隐式方程的解时, 连接当前解和下一时刻解的黑线段将与绿线平行, 通过图形可直观地看到迭代收敛的过程. 残差(residual), 也就是隐式方程等号左、右两边之差, 作为是否收敛的另一种判据显示在迭代解法选项的下方. 注意, 非线性方程的求解过程并不总收敛, 尤其当步长很大时. 当用户对迭代求解过程的收敛情况满意时, 点击"Solve Implicit Equation"Next按钮结束这个阶段. 这使绘图区返回到基本显示模式, 仅保留代表新解的点(由红色变为黑色)和通过它的准确解曲线.
  3. 当前步的计算通过点击"Take Step"Next按钮来完成, 这将使绘图区下方的表格中增加一行, 显示一个新的时刻点上解函数的近似值和准确值. 同时, 绘图区中通过这个新坐标点的原微分方程的准确解曲线由粉红色变为灰色.
  4. 点击"Next Step"Next按钮将为下一步计算做准备. 此时,绘图区中用一根红色线段显示下一步的缺省步长, 其值一般与前一步相同, 接着又可以重复选择步长阶段(Choose Step Size).

参考内容: 课本第8.2.3小节.