無限プールアニメが動き始めた

そろそろ作業に入れるのではないだろうか?目標はとりあえず,f(x)=x^2-3/2 のときの無限数列 x_n = f(x_{n-1}) をトレースするグラフを描画することだ.ローレンツ・アトラクタのグラフはこの仕様にかなり近いので,少しアレンジすればできると思う.本当は実時間で軌跡をトレースするようなものが作りたいのだが,とりあえず,GIF で出力するという方法から入ることにする.まず,このファイル(Lorentz attractor.jl)を解析してみよう.

Base.@kwdef mutable struct PoolGame

mutable というのは,可変という意味で,書き込み可能ということだが,Base.@kwdef というのは何だろう?Base は Julia の基本モジュールと考えてよいと思われるが,kwdef というのが分からない.

What does @kwdef do?
https://discourse.julialang.org/t/what-does-kwdef-do/51973

help?> Base.@kwdefで情報が取れる.

This is a helper macro that automatically defines a keyword-based constructor for the type declared in the expression typedef, which must be a struct or mutable struct expression. The default argument is supplied by declaring fields of the form field::T = default or field = default. If no default is provided then the keyword argument becomes a required keyword argument in the resulting type constructor.

これはある種の連想配列ないし辞書のようなもののように思われる.以のような使い方が想定されている.

julia> @kwdef struct Foo
              a::Int = 1         # specified default
              b::String          # required keyword
          end
   Foo

しかし,実際の使い方を見るとキーワードは指定されていない.

Base.@kwdef mutable struct PoolGame

    dt::Float64 = 0.02
    σ::Float64 = 10
    ρ::Float64 = 28
    β::Float64 = 8/3
    x::Float64 = 1
    y::Float64 = 1
    z::Float64 = 1

end

a, b という変数はデフォルトで使えるようになっているのだろうか?上の構造体では,7個の変数が定義されている.x, y, z は3D空間の座標と見られる.σ,ρ,βはなんだろう?Step! では,引数のPoolGameから座標値を取り出し,σ,ρ,βを使ってそれらを加工した後,x, y, z に戻している.つまり,この3つはあらかじめ初期化されたパラメータと見てよさそうだ.dtも同様のパラメータだ.

これは3Dなので2Dに変えようとしているのだが,うまくゆかない.plot3d という関数が3Dの作りになっているのだろう.⇒plot3dをplotに書き換えたら動作するようになった.あとは,座標を決めてやればとりあえず描画できるはずだ.⇒開始点が(X, Y)だとすると,次の点はもし,(X, Y)が関数y上の点であれば,(Y, Y) となるはずだ.もし,(X, Y)がy上の点でなければ,次の点は(X, f(x))となる,というのでよいだろうか?⇒一応動き始めた.

Infinte Pool Game

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA