数值微分方程求解的实用程序包
InterpolatingFunctionAnatomy
NDSolve 把解作为 InterpolatingFunction 对象返回. 在大多数情况下,简单地把这些作为函数使用可以实现所需的目的,但是有时访问内部的数据是有用的,这包括实际值和 NDSolve 采取步骤时计算的点. 一个InterpolatingFunction 对象的结构被精确编排使得数据的存储更有效,在一个给定点的计算速度更快. 该结构在 Wolfram 语言版本之间可能发生改变,因此访问 InterpolatingFunction 对象的代码对于新的 Wolfram 语言版本可能不适用. DifferentialEquations`InterpolatingFunctionAnatomy` 程序包提供了为将来的 Wolfram 语言版本维护的 InterpolatingFunction 对象中的数据接口.
InterpolatingFunctionDomain[ifun] | 对 InterpolatingFunction 对象 ifun 的每个维度,返回定义域的一个列表 |
InterpolatingFunctionCoordinates[ifun] | 对 InterpolatingFunction 对象 ifun 的每个维度上指定的数据,返回数据坐标的一个列表 |
InterpolatingFunctionGrid[ifun] | 返回为 InterpolatingFunction 对象 ifun 指定数据的网格点. |
InterpolatingFunctionValuesOnGrid[ifun] | 通过在每个网格点上计算 InterpolatingFunction 对象 ifun,返回计算所得的值 |
InterpolatingFunctionInterpolationOrder[ifun] | 返回对 InterpolatingFunction 对象 ifun 的每个维度所用的插值顺序 |
InterpolatingFunctionDerivativeOrder[ifun] | 返回基本函数的导数的阶数,其值当计算 InterpolatingFunction 对象 ifun 时指定 |
InterpolatingFunction 对象的分解.
一个 InterpolatingFunctionAnatomy 程序包变得有用的常见情况是:当 NDSolve 无法在指定的整个值域上计算一个解,并且用户想要把所有计算所得的解画出图形,以便于尝试对可能出现的错误有更好的理解.
从图形中,很显然可以看出形成了一个奇异点,不可能对系统进一步积分.
有时候,查看 NDSolve 在哪里采取步进是有用的. 获取坐标对于实现此目的是有用的.
当采用 InterpolatingFunction 对象的一个导数时,则返回一个新的 InterpolatingFunction 对象,那么在一个点上计算时,它会给出要求的导数. InterpolatingFunctionDerivativeOrder 是决定哪种导数应该计算的一种方法.
NDSolveUtilities
我们已经编写了许多实用例程来用来对不同的 NDSolve 方法进行考查和比较. 这些函数收集在程序包 DifferentialEquations`NDSolveUtilities` 中.
CompareMethods[sys,refsol,methods,opts] | 返回应用到系统 sys 的不同方法的统计 |
FinalSolutions[sys,sols] | 关于对应于系统 sys 的不同解 sols,在数值积分的末尾返回解的值 |
InvariantErrorPlot[invts,dvars,ivar,sol,opts] | 返回解 sol 的不变量 invts 中的误差的图形 |
RungeKuttaLinearStabilityFunction[amat,bvec,var] | 使用变量 var 返回朗格-库塔方法的线性稳定性函数,其中系数矩阵 amat 和权向量 bvec |
StepDataPlot[sols,opts] | 以对数度量返回解 sols 采用的步长的图形 |
分析朗格-库塔方法的有益途径是当应用到一个标量线性测试问题时,研究他们如何表现(见程序包 FunctionApproximations.m).
函数 CompareMethods、FinalSolutions、RungeKuttaLinearStabilityFunction 和 StepDataPlot 的例子可以在 "NDSolve 的 “ExplicitRungeKutta” 方法" 中找到.
函数 InvariantErrorPlot 的例子可以在 "NDSolve 的“Projection”方法" 中找到.
InvariantErrorPlot 选项
函数 InvariantErrorPlot 具有许多可以用来控制结果形式的选项.
选项名 | 默认值 | |
InvariantDimensions | Automatic | 指定不变量的维度 |
InvariantErrorFunction | Abs[Subtract[#1,#2]]& | 指定用于比较误差的函数 |
InvariantErrorSampleRate | Automatic | 指定对误差进行采样的频率 |
InvariantDimensions 的默认值用来从输入的结构确定维度,Dimensions[invts].
InvariantErrorFunction 的默认值是一个计算绝对误差的函数.
InvariantErrorSampleRate 的默认值是如果所采取的步骤小于1000,则对所有点采样,在这个阈值之上,则使用一个对数采样率.