今回は前回に引き続き、プロットの練習です。
問題
プログラム simpleMap を使い、初期条件 \( x_0 = -0.1,\,y_0 = 0 \) から出発し、連立差分方程式
\begin{align*}
x_{n+1} &= 1-y_n+\left|x_n\right| \\
y_{n+1} &= x_n
\end{align*}
を繰り返し計算せよ。
シミュレーション・スクリプト
前回は「パラメータ表示された座標」という形の関数を function ノードでプロットしましたが、今回のような古い座標から新しい座標を計算するマップ形式の関数はまだサポートしていないので、普通に物理系を作成してプロットすることにします。 実装は簡単:@GrabResolver('https://github.com/waman/groops-core/tree/master/repo') @Grab('org.waman.groops:groops-core:0.1-beta') import org.waman.groops.builder.SimulationBuilder import org.waman.groops.simulation.system.* import static java.lang.Math.* new SimulationBuilder().simulation{ system(new SimpleMapSystem()) init(x:-0.1d, y:0.0d) count(total:10000) //console() png(fileName:'simpleMap.png', overwrite:true){ chart(title:'Simple Map', domainLabel:'x', rangeLabel:'y'){ dot(label:"Simulation", x:'x', y:'y') } } }.simulate() class SimpleMapSystem extends AnnotationObservableSystem{ @State double x, y @Override void evolve(Map params) { (x, y) = [1.0d - y + abs(x), x] } }
- simpleMap.groovy
- 反復は 10000 回にしています。
- evolve() メソッドでは「(x, y) = 《リスト》」という文で変数に一括代入していますが、単なる見やすさのためです。
シミュレーションを実行すると、以下のようなグラフが生成されます:
追記
Groops 0.2-beta から、今回のような点の写像も function ノードで書けるようにしました:@GrabResolver('https://github.com/waman/groops-core/tree/master/repo') @Grab('org.waman.groops:groops-core:0.2-beta') import org.waman.groops.builder.SimulationBuilder import org.waman.groops.simulation.system.* import static java.lang.Math.* new SimulationBuilder().simulation{ function(xy:{ double x, double y -> [1.0d - y + abs(x), x] }) init(x:-0.1d, y:0.0d) count(total:10000) //console() png(fileName:'simpleMap.png', overwrite:true){ chart(title:'Simple Map', domainLabel:'x', rangeLabel:'y'){ dot(label:"Simulation", x:'x', y:'y') } } }.simulate()
- simpleMap2.groovy
- function ノードの xy 属性に引数が2つのクロージャをセットします
- クロージャの返り値は Double の List (x 座標、y 座標の2成分)とします
出力結果は、上記のチャートと同じになります。
- 作者: ハーベイゴールド,ジャントボチニク,Harvey Gould,Jan Tobochnik,鈴木増雄,石川正勝,溜渕継博,宮島佐介
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/12
- メディア: 単行本
- 購入: 1人 クリック: 28回
- この商品を含むブログ (45件) を見る
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (155件) を見る