2011年7月30日土曜日

javascriptで4次Runge-Kutta法

ルンゲ=クッタ法(Runge-Kutta method)は、数値解析において常微分方程式の近似解を求める方法。

今回は、ルンゲクッタ法のサンプルをJavaScriptで作って動かしてみました。
 


EpidemiologyのSIRモデルのプログラムを見ていて、ここでもルンゲクッタを使用していたので、一度触っておいて損はなかろうと思いまして。

SIRモデルはウィルスの感染過程を”感染の可能性のある者”・”感染した者”・”感染の可能性の無い者(免疫できた or 隔離された or 亡くなった)”に3区分し、それぞれの状態遷移をプログラムで可視化したようなものです。

これをメディアのクチコミの影響力に当てはめたりできるかな…という前置きからの本エントリ。

ルンゲクッタ法を弄ってみた図は下記な具合です。


図1:Tmax=30, dt=0.01の場合


図2:Tmax=30, dt=0.05の場合


図3:Tmax=30, dt=0.1の場合


図4:Tmax=30, dt=0.5の場合

参照サイトにはRunge-Kutta法よりざっくりとした精度のEuler法との比較もあります。

図を見て見る限り、目の細かさのパラメータdtが細ければ理論値に近い値が算出されますね。







参照
ルンゲ=クッタ法(Runge-Kutta method)
Excelでルンゲクッタ法
gnuplotで微分方程式を解く

2011年7月5日火曜日

JavaScriptでKalmanFilter

hirabayashiさんのRubyカルマンフィルターをJavaScriptに換えてみました。

カルマンフィルターの概要はWikipediaにて。

ざっくりとした認識では、定時間感覚でぶれて出力される値を、そのぶれ幅から以降の予測出力値を算出するというもの…らしいです。


動くサンプルは下記URLに置いておきます。
http://sandbox4yoshi.appspot.com/KalmanFilter.html





 


門外漢ではありますが、制御工学って面白い分野だなぁと。

Blogger Syntax Highliter