倭算数理研究所

科学・数学・学習関連の記事を、「倭マン日記」とは別に書いていくのだ!

2.9 視覚化 : 問題 2.5 2次元の写像 simpleMap

今回は前回に引き続き、プロットの練習です。

問題

プログラム 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()

出力結果は、上記のチャートと同じになります。

計算物理学入門

計算物理学入門

  • 作者: ハーベイゴールド,ジャントボチニク,Harvey Gould,Jan Tobochnik,鈴木増雄,石川正勝,溜渕継博,宮島佐介
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本
  • 購入: 1人 クリック: 28回
  • この商品を含むブログ (45件) を見る
プログラミングGROOVY

プログラミングGROOVY