NDSolve 的ImplicitRungeKutta方法

引言

隐式朗格-库塔方法具有许多优良的属性.

例如,GaussLegendre方法是自伴的,就是说在时间上向前或者向后积分时,它们给出相同的解.

以下加载定义了一些实例问题和实用函数的程序包:

系数

隐式朗格-库塔方法的通用框架已经实现. 到目前为止,讨论的重点集中在具有令人感兴趣的几何属性的方法,涉及以下方案:

系数的产生

示例

加载一个实例问题:
该问题具有两个应该保持为常量的不变量. 数值方法可能不能够保持这些不变量:
这里使用隐式朗格-库塔高斯方法求解该系统. 该方案的阶数是用 "DifferenceOrder" 方法选项来选择的:
不变量的误差的图形显示,当积分进行时误差在增加:

"ImplicitRungeKutta""ImplicitSolver" 方法具有选项 AccuracyGoalPrecisionGoal,用以指定求解非线性方程组所要达到的绝对和相对误差.

这些选项具有和 NDSolve 中相应选项同样的默认值,因为求解非线性系统到比方法的局部误差更高的准度通常是没有多大意义的.

不过,对于某种类型的问题,求解非线性系统到工作精度是有用的:

第一个不变量是系统的哈密顿量,而现在误差, 正如所料,是有界的,因为高斯隐式朗格-库塔方法是一个辛积分器.

第二个不变量精确保持(到四舍五入)不变,因为高斯隐式朗格-库塔方法保持二次不变量不变:

这里把隐式中点法定义为二阶的一阶段隐式朗格-库塔方法.

对于该问题,使用固定点迭代,而不是牛顿迭代来求解非线性系统更加有效:

目前,隐式朗格-库塔方法框架不使用带状牛顿技术于解耦非线性系统.

选项总结

ImplicitRungeKutta选项

选项名
默认值
"Coefficients""ImplicitRungeKuttaGaussCoefficients"指定在隐式朗格-库塔方法中使用的系数
"DifferenceOrder"Automatic指定方法的局部准确度的阶数
"ImplicitSolver""Newton"指定用于非线性系统的求解器;有效的设置是 FixedPoint 或者 "Newton"
"StepSizeControlParameters"Automatic指定步进控制参数
"StepSizeRatioBounds"{,4}指定在新步长中的相对变化的界限
"StepSizeSafetyFactors"Automatic指定在步长估计中使用的安全因子

方法 "ImplicitRungeKutta" 的选项.

选项 "StepSizeSafetyFactors"Automatic 默认设置使用值{9/10,9/10}.

ImplicitSolver选项

选项名
默认值
AccuracyGoalAutomatic指定用于非线性系统求解的绝对容差
"IterationSafetyFactor"指定用于非线性系统求解的安全因子
MaxIterationsAutomatic指定用于非线性系统求解的最大迭代次数
PrecisionGoalAutomatic指定用于非线性系统求解的相对容差

"ImplicitSolver" 的通用选项.

选项名
默认值
"JacobianEvaluationParameter"指定在牛顿迭代中什么时候重新计算雅可比矩阵
"LinearSolveMethod"Automatic指定在牛顿迭代中使用的线性求解器
"LUDecompositionEvaluationParameter"指定在牛顿迭代中什么时候计算 LU 分解

"ImplicitSolver""Newton" 方法的特定选项.