MATHEMATICA 教程

NDSolve 的"ImplicitRungeKutta"方法

引言

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

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

以下加载定义了一些实例问题和实用函数的程序包.
In[3]:=
Click for copyable input

系数

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

    方法系数的推导可以达到任意阶数和任意精度.

系数的产生

  • 从多项式的定义开始,定义 阶段系数的横坐标. 例如,Gauss-Legendre 方法的横坐标定义为.
  • 单变量多项式因式分解提供定义多项式的根的基本不可约多项式.
  • 构造 Root 对象来表示解(使用单一的根隔离和 Jenkins-Traub以实现数值近似).
  • 接着,对 Root 对象进行精度系数的数值近似.
  • 控制系数的 Vandermonde 系统的条件估计产生对根的数值近似时所采用的精度.
  • 用非合流 Vandermonde 系统的专用求解器求解系数的方程 (见 [GVL96]).
    • 用一个单步迭代精化来修正近似解,并且检查获得的系数以达到要求的精度.
    以下产生具有50位小数精度的二阶段四阶 Gauss-Legendre方法的系数.
    In[5]:=
    Click for copyable input
    Out[5]=

    系数具有形式 .

    以下精确地产生二阶段四阶 Gauss-Legendre方法的系数.对于高阶方法,精确产生系数常常可能花很多时间.
    In[6]:=
    Click for copyable input
    Out[6]=
    以下产生精度为20位小数的六阶段10阶 RaduaIA 隐式朗格-库塔方法的系数.
    In[7]:=
    Click for copyable input
    Out[7]=

示例

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

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

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

不过,对于某种类型的问题,求解非线性系统到工作精度是有用的.
In[13]:=
Click for copyable input
Out[13]=

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

第二个不变量精确保持(到四舍五入)不变,因为高斯隐式朗格-库塔方法保持二次不变量不变.
In[14]:=
Click for copyable input
Out[14]=

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

对于该问题,使用固定点迭代,而不是牛顿迭代来求解非线性系统更加有效.
In[15]:=
Click for copyable input
In[16]:=
Click for copyable input
Out[16]=

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

选项总结

"ImplicitRungeKutta"选项

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

方法 的选项.

选项 Automatic 默认设置使用值.

"ImplicitSolver"选项

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

的通用选项.

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

方法的特定选项.

New to Mathematica? Find your learning path »
Have a question? Ask support »