NDSolve 的"ImplicitRungeKutta"方法
引言
隐式朗格-库塔方法具有许多优良的属性.
例如,Gauss-Legendre方法是自伴的,就是说在时间上向前或者向后积分时,它们给出相同的解.
系数
隐式朗格-库塔方法的通用框架已经实现. 到目前为止,讨论的重点集中在具有令人感兴趣的几何属性的方法,涉及以下方案:
系数的产生
- 从多项式的定义开始,定义
阶段系数的横坐标. 例如,Gauss-Legendre 方法的横坐标定义为
.
- 单变量多项式因式分解提供定义多项式的根的基本不可约多项式.
- 构造 Root 对象来表示解(使用单一的根隔离和 Jenkins-Traub以实现数值近似).
- 控制系数的 Vandermonde 系统的条件估计产生对根的数值近似时所采用的精度.
- 用非合流 Vandermonde 系统的专用求解器求解系数的方程 (见 [GVL96]).
- 用一个单步迭代精化来修正近似解,并且检查获得的系数以达到要求的精度.
以下产生具有50位小数精度的二阶段四阶 Gauss-Legendre方法的系数.
| Out[5]= |  |
系数具有形式
.
以下精确地产生二阶段四阶 Gauss-Legendre方法的系数.对于高阶方法,精确产生系数常常可能花很多时间.
| Out[6]= |  |
以下产生精度为20位小数的六阶段10阶 RaduaIA 隐式朗格-库塔方法的系数.
| Out[7]= |  |
示例
该问题具有两个应该保持为常量的不变量. 数值方法可能不能够保持这些不变量.
| Out[10]= |  |
这里使用隐式朗格-库塔高斯方法求解该系统. 该方案的阶数是用

方法选项来选择的.
| Out[11]= |  |
| Out[12]= |  |
的
方法具有选项 AccuracyGoal 和 PrecisionGoal,用以指定求解非线性方程组所要达到的绝对和相对误差.
这些选项具有和 NDSolve 中相应选项同样的默认值,因为求解非线性系统到比方法的局部误差更高的准度通常是没有多大意义的.
不过,对于某种类型的问题,求解非线性系统到工作精度是有用的.
| Out[13]= |  |
第一个不变量是系统的哈密顿量,而现在误差, 正如所料,是有界的,因为高斯隐式朗格-库塔方法是一个辛积分器.
第二个不变量精确保持(到四舍五入)不变,因为高斯隐式朗格-库塔方法保持二次不变量不变.
| Out[14]= |  |
这里把隐式中点法定义为二阶的一阶段隐式朗格-库塔方法.
对于该问题,使用固定点迭代,而不是牛顿迭代来求解非线性系统更加有效.
| Out[16]= |  |
目前,隐式朗格-库塔方法框架不使用带状牛顿技术于解耦非线性系统.
选项总结
"ImplicitRungeKutta"选项
| | |
| "Coefficients" | "ImplicitRungeKuttaGaussCoefficients" | 指定在隐式朗格-库塔方法中使用的系数 |
| "DifferenceOrder" | Automatic | 指定方法的局部准确度的阶数 |
| "ImplicitSolver" | "Newton" | 指定用于非线性系统的求解器;有效的设置是 FixedPoint 或者  |
| "StepSizeControlParameters" | Automatic | 指定步进控制参数 |
| "StepSizeRatioBounds" | { ,4} | 指定在新步长中的相对变化的界限 |
| "StepSizeSafetyFactors" | Automatic | 指定在步长估计中使用的安全因子 |
方法
的选项.
选项
的 Automatic 默认设置使用值
.
"ImplicitSolver"选项
的通用选项.
| | |
| "JacobianEvaluationParameter" |  | 指定在牛顿迭代中什么时候重新计算雅可比矩阵 |
| "LinearSolveMethod" | Automatic | 指定在牛顿迭代中使用的线性求解器 |
| "LUDecompositionEvaluationParameter" |  | 指定在牛顿迭代中什么时候计算 LU 分解 |
的
方法的特定选项.