微分方程式の数値解法のためのユーティリティパッケージ
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では指定した値の全範囲に渡る解が計算できないときに,計算された解のすべてをプロットしてどこで不具合が起ったのかをよく理解しようする場合に常に有用である.
プロットを見ると,特異点が1つ形成され,それ以上系を積分するのが不可能であることがはっきりと分かる.
NDSolveがステップを取った場所を見ると役に立つことがある.このためには,座標を調べるのがよい.
このパッケージは,計算されたPDEの解を解析するのに特に便利である.
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] | ルンゲ・クッタ法の線形安定関数を返す.この関数の係数行列は amat,重みべクトル bvec には変数 var を使用する |
StepDataPlot[sols,opts] | 解 sols で取られる刻み幅のプロットを返す |
NDSolveUtilitiesパッケージで提供されている関数
ルンゲ・クッタ法を解析するための便利な手法として,スカラー線形テスト問題(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未満の場合にはすべての点をサンプルする.1000を超えると,対数のサンプルレートが使われる.