PP solver 編


数値積分法を変えるには?

問題に応じて Solver を変更する必要があるかもしれない.BunKi では,MATLAB 標準関数として用意されている数値積分 Solver の幾つかを選択することが可能である.

  1. Setting -> Solver を選択.

    sol.png

  2. Solver に関する詳細設定パネルが起動.

    sol2.png

  3. Solver 欄の pull down メニューから適当な数値積分 solver を選択する.

    sol3.png

    • 各 Solver の詳細については以下を参照のこと.
      ode45Dormand-Prince の Runge-Kutta の明示的な式に基づいた solver. 一般に,ode45 は, ほとんどの問題に対して,最初の試みとして行うのに最も適している関数.
      ode23Bogacki と Shampine による明示的な Runge-Kutta を実現した Solver. 粗い許容値やわずかなスティッフ性のあるときには,ode45 よりも効率的.
      ode113可変次数の Adams-Bashforth-Moulton PECE*1 solver. 厳重な許容値や ODE ファイル関数が特に計算量が多い場合には,ode45 よりも効率的.ode113 は,マルチステップソルバであり,カレントの解の計算のために,数ステップ前の時刻での解を通常必要とする.
      ode23s2次の修正 Rosenbrock 式に基づいた solver.粗い許容値では,ode15s よりも効率的な場合がある.Stiff な問題に対する solver.
      ode15s数値微分式(numerical differentiation formulas:NDF)に基づく可変 solver.ode113 と同様に,ode15s はマルチステップソルバである. 問題が,Stiff である可能性がある場合や,ode45では失敗したり,非常に非効率であった場合は,ode15s が有効かもしれない.
      myself固定ステップサイズの4次 Runge-Kutta 法を実装した関数を使用.特別なことがない限り,このモードを利用することは推奨しない.



数値積分の精度を上げるには?

数値積分 Solver の精度が悪い場合,数値計算に悪影響を及ぼす場合がある.その場合は,その solver の精度を変更する必要がある.そのためには,真の解からの誤差をどの程度許容するか?の指標である RelTol, AbsTol を変更する.

  1. Setting -> Solver を選択

    sol.png

  2. Relative Tolerance, および Absolute Tolerance のパラメータを変更する.

    tol.png

  • それぞれのパラメータの意味は以下:
    • Relative tolerance:解ベクトルのすべての要素に適用される相対的な誤差許容範囲
    • Absolute tolerance絶対誤差許容範囲.スカラの場合,解ベクトルの全ての要素に適用される許容範囲.ベクトルの場合は,対応する要素に適用される許容範囲.



固定step幅で数値積分をしたい

MATLAB に用意された数値積分用 solver は,計算効率を高めるため,解軌道の状態によって step size を変化させる*2,可変ステップサイズアルゴリズムが実装されている.しかしながら,問題によっては,step size は固定した方が良い場合もある.そこで,数値積分用 solver の step size を固定 size として作動させるには次のようにする.

  1. Setting -> Solver を選択

    sol.png

  2. Solver に関する詳細設定パネルが起動.

    sol2.png

  3. Step type として Invariable を選択する.

    step.png

  4. Initial step を設定する.本来,Initial step は,solver が最初に使用する Step size としての役目を持つ(詳しくは,step sizeを参照のこと).ここに適当な数値を記入する.これが固定される step size となる.

    step2.png



PP 全体の応答が悪い

数値積分用 solver は,指定された時間区間で計算し,その結果を出力する.リアルタイムシミュレーションでは,終了時間を指定することなく作動させたい.そこで,PP では,内部で設けた end time までを solver で計算した後,表示&キーイベントの処理を行い,再び計算するという操作を繰り返している.通常,リミットサイクル・周期解であれば,end time はその周期に設定される.しかしながら,自律系リミットサイクルの場合,問題によっては,非常に周期の長いリミットサイクルを表示しなければならないケースも出てくる.end time をリミットサイクルの周期として設定していた場合,PP 自体の応答が悪くなるといった問題が発生することになる.

そこで,リミットサイクルの周期の代わりに,Solver frequencyを設定する.すなわち,frequency の値だけ,solver で計算した後,表示&キーイベントを発生させる(Poincare断面を横切った場合はそこで抜ける).

frq.png

従って,Solver frequency 値は,キーレスポンス,クリックレスポンス,イベント類,一度に描画する量に係わってくる.応答が遅い系でこの頻度を高く(値を小さく)してもあまり意味はなく,速い系では,アトラクタの途中でイベントを入れたい場合は値を小さくする必要がある.




*1 PECE:Predict-Evaluate-Correct-Evaluate
*2 急峻な部分は小さな step size を,なだらかな変化の時は step size を大きくとる.

Attach file: filefrq.png 389 download [Information] filetol.png 390 download [Information] filestep2.png 395 download [Information] filestep.png 394 download [Information] filesol3.png 399 download [Information] filesol2.png 394 download [Information] filesol.png 385 download [Information]

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-07-23 (Thu) 20:18:53 (3309d)