| 操作関数 | 組込み関数 | キーワード | 構造体 | フック関数 |
IntegrateODE 操作関数は導関数を積分して結合常微分方程式の集合の数値解を計算します。導関数はユーザ定義関数 derivFunc を使用してユーザが指定します。方程式は一次式の組でなければなりません。1つの二次式は 2つの一次式に、1つの三次式は 3つの一次式にという具合に変換する必要があります。関数の記述方法の詳細については、III-311 ページの「微分方程式を解く」を参照してください。
IntegrateODE には、出力の Y 値を格納する独立変数 (一般に X とか t とか呼ばれる) の値を指定する方法が 2つ用意されています。X 値を指定することも、自走モードを使用することもできます。
IntegrateODE で使用されているアルゴリズムでは、ODE システムの特性および必要な精度によって異なる区間の結果が計算されます。出力が必要な場合に X 値を指定すると (下記の /X フラグを参照) 、指定した X 値での値を得るための準備が行われます。
IntegrateODE によって、これらの値の中間に、どれだけの空間が必要かが計算されますが、計算した中間値は出力されません。
自走モードを指定した場合は、結果の X 値の間隔には無関係に、単にすべてのステップが IntegrateODE によって出力されます。
| cwaveName | derivFunc に渡す定数の係数を格納したウェーブの名前です。 | ||||
| derivFunc | 導関数を計算するユーザ関数名です。関数形式の詳細については、III-311 ページの「微分方程式を解く」を参照してください。 | ||||
| ywaveSpec | 計算結果を受け取るウェーブを 1つまたは複数指定します。ウェーブは初期条件も含みます。ywaveSpec は次の 2つの形式のどちらかで指定します。 | ||||
|
|||||
/R フラグを指定して開始ポイントを変更しないかぎり、方程式の解はウェーブの行 1 から各ポイントごとに計算されます。初期条件を行 0 に格納しておく必要があります。 |
| /CVOP={solver, jacobian, extendedErrors [, maxStep]} | |||||||||
Adams-Moulton および BDF 積分方式の演算方法に影響を与えるオプションを選択します。このフラグは /M = 2 または /M = 3 を使用するときにのみ適用されます。これらの方法は CVODE パッケージが基になっているためフラグには “CV” が使用されています。 |
|||||||||
| solver パラメータは、各ステップでの解法を選択します。solver の値は次のいずれかです。 | |||||||||
|
|||||||||
jacobian パラメータは、ヤコビ行列 (df/dyi の行列。f は導関数) の近似に使用する方法を選択します。 |
|||||||||
|
|||||||||
| どちらの場合も、導関数は有限差分によって近似されます。 | |||||||||
弊社の経験では、jacobian = 1 を選択すると積分がより細かく細分化されます。ヤコビ行列の近似に必要な計算が少なくなることにより、積分に要する総計算時間が短縮されることがあります。 |
|||||||||
extendedErrors パラメータが 0 でない値の場合は、/M=2 または /M=3 を使用して積分中にエラーが発生すると、履歴ウィンドウにエラー情報が表示されます。この情報は、WaveMetrics のソフトウェア技術者にのみ意味のある種類のものですが、問題の解決に役立つことがあります。弊社のバグであるかユーザのバグであるかに関係なく、バグメッセージ (BUG:...) として出力されます。 |
|||||||||
| If maxStep is present and greater than zero, this option sets the maximum internal step size that the CVODE package is allowed to take. This is particularly useful with /M=3, as the BDF method is capable of taking extremely large steps if the derivatives don't change much. Use of this option may be necessary to make sure that the CVODE package doesn't step right over a brief excursion in, say, a forcing function. If you have something in your derivative function that may be step‐like and brief, set maxStep to something smaller than the duration of the excursion. | |||||||||
| maxStep が存在し、0 以上の場合は、CVODE パッケージが受け取れる最大の内部ステップサイズが設定されます。 導関数の変更が多くなければ、BDF 法が非常に多くのステップを実行でき、/M=3 で特に役立ちます。 このオプションを使用する場合、CVODE パッケージがちょうど短い可動域で、例えば強制関数で、ステップしないことを確認する必要がある場合があります。 導関数にステップおよび要約のような何かがある場合、maxStep を可動域の期間よりも少なく設定してください。 | |||||||||
| If you want to set maxStep only, set the other three options to zero. | |||||||||
| maxStep のみを設定したい場合は、他の3つのオプションは 0 にしてください。 | |||||||||
| /E=eps | Igor は区間分割数の端数に対する打ち切り誤差の見積を比較して計算で使用するステップサイズを調整します。端数は eps で指定します。たとえば、誤差を 1/1000 未満にするには、eps に 0.001 を設定します。数値自体は /F フラグと、可能性として /S フラグで指定するウェーブの組み合わせで設定されます。詳細については、III-311 ページの「微分方程式を解く」を参照してください。 |
||||||||
/E フラグを使用しない場合、eps は 10-6 に設定されます。 |
|||||||||
| 詳細については、III-321 ページの「誤差の監視」を参照してください。 | |||||||||
| /F=errMethod | スケーリングした値の丸め誤差の推定値を比較することによって、計算に使用するステップサイズを調整します。errMethod は、その数値に加算するものを指定するビットワイズ値です。 | ||||||||
|
|||||||||
ビット 0、1、2 を設定すると、所定の項が加算されます。たとえば、ビット 3 を設定した場合は、和と現在のステップサイズを乗算して大域誤差限界が求められます。Adams または BDF 積分法 (/M=2 または /M=3) を使用する場合は、ビット 3 は無効です。ビット設定の詳細については、IV-13 ページの「ビットパラメータの設定」を参照してください。 |
|||||||||
/F フラグを使用しなかった場合は、定数が使用されます。/S フラグを使用しなかった場合は、定数は 1.0 に設定されます。 |
|||||||||
| 詳細については、III-321 ページの「誤差の監視」を参照してください。 | |||||||||
| /M=m | 解の計算に使用する方法を指定します。 | ||||||||
|
|||||||||
積分法の指定を省略した場合は、Runge-Kutta 法 (m=0) が使用されます。Bulirsch-Stoer 法 (m=1) は、滑らかな解を持つ問題では
Runge-Kutta 法より高速のはずですが、そうでないことがよくあります。単純な実験では、硬い方程式系ではない問題には Adams-Moulton 法 (m=2) の方が高速であることが分かっています。硬い方程式系の問題では、明らかにBDF (m=3) が優れています。Runge-Kutta 法は柔軟で、他の積分法ではうまくいかない問題にも使用することができます。 |
|||||||||
| /Q= quiet | quiet=1 または単に /Q フラグを指定すると Quiet モードになります。 |
||||||||
このモードでは履歴エリアには一切メッセージは出力されず、エラーによってマクロが停止することもありません。変数 V_flag はエラーコードを返します。V_flag のエラーコードの意味については詳細を参照してください。 |
|||||||||
| /R=(startX,endX) | ywaveSpec のウェーブの X 範囲を指定します。 | ||||||||
| /R=[startP,endP] | ywaveSpec のポイント範囲を指定します。 | ||||||||
/R=[startP] のように範囲を指定した場合、範囲の終了ポイントはウェーブの終端として受け取られます。/R が省略されると、ウェーブ全体が評価されます。/R=[,endP] として終了ポイントだけ指定すると、開始ポイントはポイント 0 として受け取られます。 |
|||||||||
初期条件は startP に格納する必要があります。最初のポイントは
startP+1 です。 |
|||||||||
| /S=errScaleWaveName | |||||||||
/F フラグを使用して errMethod のビット 0 を設定するか、/F フラグを指定しない場合は、各微分方程式の誤差の見積の分割に定数を必要とします。デフォルトでは定数は単に 1.0 に設定されます。 |
|||||||||
/S フラグとウェーブを使用すると、この定数に指定した値を与えることができます。ウェーブが各導関数に対して 1つのエレメントを持つようにして、対応する方程式に対して合理的な分割ファクタを設定し、errScaleWaveName にそのウェーブの名称を設定してください。 |
|||||||||
/S フラグを使用しない場合は、定数はすべて 1.0 に設定されます。 |
|||||||||
| /STOP = {stopWave, mode} | |||||||||
解 (Y 値) または導関数のいずれかが指定した条件に一致したときに、IntegrateODE を停止するように要求します。 |
|||||||||
stopWave には、いつ停止するかを決定するために IntegrateODE が使用する情報が格納されます。 |
|||||||||
|
|||||||||
| 詳細については、次を参照してください。 | |||||||||
| /U=u | u ポイントごとに表示を更新します。デフォルトでは 10 ポイントごとに表示を更新します。更新しないようにするには、u を非常に大きな値に設定してください。 |
||||||||
| /X=xvaluespec | 独立変数 (通常は x または t と呼ばれています) が計算される場所でその値を指定します (ywaveSpec を参照してください) 。 | ||||||||
| ウェーブまたは x0 および deltaX で指定できます。 | |||||||||
| /X = xWaveName | |||||||||
| この形式を使用して独立変数の値のリストを指定します。それらの値は任意の間隔を取ることができ、増減してもかまいませんが、単調である必要があります。 | |||||||||
/XRUN フラグを使用して自走モードを指定した場合は、/X = xWaveName が必要です。この場合は、X ウェーブが出力ウェーブになり、内容が上書きされます。詳細については、/XRUN の説明を参照してください。 |
|||||||||
| xValues={x0,deltaX} | |||||||||
| この形式を使用する場合は、x0 が独立変数の初期値であり、ここに初期条件が適用されます。まず x0+deltaX の位置で計算が行われ、その後の結果は deltaX ずつ移動しながら計算されます。 | |||||||||
| deltaX に負の値も指定できます。 | |||||||||
| xValues キーワードを使用しない場合、独立変数の値は結果ウェーブの X 分割から読み取られます (ywaveSpec パラメータを参照してください) 。 | |||||||||
| /XRUN={dx0, Xmax} | |||||||||
dx0 が 0 でない値の場合は、出力は自走モードで生成されます。つまり、積分法が必要な精度を達成するのに必要な独立変数 (x または t) がどのような値のときでも出力ウェーブが生成されます。したがって、得られた解の X 値は不等間隔になります。 |
|||||||||
| パラメータ dx0 は、最初の積分ステップのステップサイズを設定します。このサイズを必要以上に小さくした場合は、ステップサイズが急速に増加します。必要な精度に対して大きすぎる場合は、積分法によって適当なサイズに修正されます。 | |||||||||
dx0 を 0 に設定した場合は、自走モードは使用されません。/XRUN フラグの指定を省略した場合と同様です。 |
|||||||||
自走モードを使用する場合は、/X = xWaveName を使用して X ウェーブを指定する必要があります。ウェーブの最初の値 (これは通常は点 0 ですが、/R フラグを使用した場合は異なることがあります) を X の初期値に設定します。 |
|||||||||
| 積分の進行に合わせて、各出力ポイントの X 値が X ウェーブ内に書き込まれます。積分は、そのステップが Xmax を超えるか、出力ウェーブが満たされると終了します。 | |||||||||
IntegrateODE コマンドで使用するウェーブは、所定の規準を満たしている必要があります。
初期条件を含み、結果を受け取るウェーブ (ywaveSpec) は連立方程式の各方程式に対して正確に 1つの列を持つ必要があります。あるいは、各方程式に対して 1つのウェーブを含むウェーブのリストを指定する必要があります。IntegrateODE はユーザ定義関数内の方程式の個数を知ることができないため、リストの列数またはウェーブ数を使用して、方程式の個数を決定します。
ywaveSpec でウェーブのリストを渡す場合は、すべてのウェーブは同じ行数である必要があります。独立変数の値を格納したウェーブを使用する場合、または自走モードから X 値を受け取る場合は (/X=waveName を使用) 、このウェーブの行数は ywaveSpec ウェーブと同数でなければなりません。
/S フラグを使用して渡す誤差分割用のウェーブは、各方程式に対して 1つのポイントを持つ必要があります。つまり、各 ywaveSpec ウェーブに対して、または複数列の ywaveSpec の各列に対して、1つのポイントが必要です。
デフォルトでは 10 ポイントの計算が終わるごとに表示が更新されます。ywaveSpec ウェーブの中の 1つをグラフに表示すると、積分の進捗状況を見ることができます。
表示の更新によって計算速度が大幅に低下します。/U フラグを使用して更新間隔を変更してください。表示の更新をまったくしないようにするには、ywaveSpec のウェーブの長さよりも大きな値を更新間隔に設定します。
自走モードでは、出力値の個数を予測することはできません。IntegrateODE は、ウェーブが満たされるか、X値が /XRUN フラグで設定した Xmax を超えると終了します。このウェーブをあまり大きくしないようにする最良の方法は、ウェーブ内の未使用行には触れないことです。グラフ上に奇妙なトレースが描画されるのを避けるには、予めこのウェーブを NaN で満たしておきます。ただし、初期条件行と X の初期値の行を NaN に設定しないように注意する必要があります。
出力値のすべての計算が終了する前に積分を停止できると便利なことがあります。それには、/STOP フラグを使用して解の条件を設定する、または導関数から 1 を返す、の 2つの方法があります。
/STOP={stopWave, mode} を使用するときは、stopWave に、系の 1つの方程式に対して 1つの列が格納されているか、列数と系の次数が等しい必要があります。各列は、系の指定した方程式の解または導関数に対する条件を表します。
stopWave の行 0 には、解に適用する条件の種類を示すフラグを格納します。このフラグが 0 の場合、この値は無視されます。フラグが 1 の場合、解の値が行 1 で指定した値より大きくなると積分が停止されます。フラグが -1 の場合、解の値が行 1 で指定した値より小さくなると積分が停止されます。
行 2 および 3 は、行 0 および 1 と同じ機能ですが、条件は、解の値ではなく導関数に適用されます。
stopWave の行数が 2 の場合は解の値のみがチェックされます。stopWave の行数が 4 の場合は、解の値と導関数の両方に条件を設定することができます。
複数のフラグの値をゼロでない値に設定することができます。その場合は、mode によって、複数の条件を適用する方法を指定します。mode に 0 を指定すると、どの条件が満たされた場合でも積分が停止されます。mode が 1 の場合は、ゼロでない値のフラグの条件が同時にすべて満たされていなければなりません。row 0 および row 2 にゼロ以外の値が存在しない場合は、stopWave は無視されます。
詳細については、III-325 ページの「状況に応じて IntegrateODE を停止する」を参照してください。
IntegrateODE 操作関数は各種変数を設定して積分に関する情報を提供します。これらの変数の値も表示の更新と同時に更新されるので、積分の進捗状況を見ることができます。以下にその変数を示します。
V_ODEStepCompleted |
最後に計算した結果のポイント番号です。 |
V_ODEStepSize |
計算の最後の刻み幅です。 |
V_ODETotalSteps |
現在の結果に到達するまでに必要だった刻み幅の合計です。自走モードでは、これは V_ODEStepCompleted と同じです。 |
V_ODEMinStep |
計算全体での最小刻み幅です。 |
V_ODEFunctionCalls |
導関数の総呼び出し回数。 |
クワイエットモード (/Q フラグ参照) では、IntegrateODE が停止したときに、その理由を示すために V_Flag が設定されます。
V_flag |
クワイエットモードのときのみ設定されます。値は、IntegrateODE が停止した理由を表します。その値を下記に示します。 |
||||||||||||||||||||
|
Runge-Kutta (/M=0) および Bulirsh-Stoer (/M=1) 法は『Press, William H., et al., Numerical
Recipes in C, 2nd ed., 994 pp., Cambridge University Press, New York, 1992』のルーチンを基にし、許可を得て使用しています。
Adams-Moulton (/M=2) および BDF (/M=3) 法は、Lawrence Livermore National Laboratory
で開発された CVODE パッケージを基にしています。
CVODE パッケージは、VODE パッケージから作成されたものです。Igor で使用している部分の説明が下記の文献に掲載されています。
| ※このページの内容は予告なしに変更される場合があります。 ※記載された商品名、会社名は、各社の商標および登録商標です。 |
| お問い合わせはこちらまで: 株式会社ヒューリンクス テクニカルサポート係 | ||||||
|