2D Strange Attractors

カオスである。Strange Attractor を Scratch で実装する、というのに凝ってしばらくハマっていた。 Strange Attractor とは何かなどについては この辺。 キーワード "strange attractor", "chaos attractor" などで画像を検索すると、いろんな図が見つかって面白い。だいぶ溜まってきたのでリンク集がてらまとめておく。3Dは別エントリ。

2DのStrange Attractorはだいたい次のような漸化式で定義される。

 \begin{cases} x_{n+1} = f_x \left(x_n, y_n \right) \\ y_{n+1} = f_y \left(x_n, y_n \right) \end{cases}

これに適当な  \left(x_0,y_0\right) を与えて得られる各々  (x,y) をプロットしていくと奇妙な図形ができ上がる、というもの。

Peter de Jong Attractor

2D Strange Attractor といえば Peter de Jong Attractor である(個人の感想)。詳細はこのページからリンクされているPDFに。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = \sin\left(a y_n\right) - \cos\left(b x_n\right) \\ y_{n+1} = \sin\left(c x_n\right) - \cos\left(d y_n\right) \end{cases}

4つのパラメータ a,b,c,d は-3から +3までの値。

f:id:hrt1ro:20201115111046p:plaina=2.01 b=-2.53 c=1.61 d=-0.33

f:id:hrt1ro:20201115111042p:plaina=0.97 b=-1.899 c=1.381 d=-1.506

f:id:hrt1ro:20201115111037p:plaina=-0.709 b=1.638 c=0.452 d=1.74

f:id:hrt1ro:20201115111032p:plaina=1.4 b=-2.3 c=2.4 d=-2.1

Peter de Jong Attractor on Scratch

Clifford Attractor

Clifford A Pickoverによって発見された。 Pickover Attractor と呼ばれることもある。

  •  \left(x_0, y_0\right)=\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = \sin\left(a y_n\right) + c \cos\left(a x_n\right) \\ y_{n+1} = \sin\left(b x_n\right) + d \cos\left(b y_n\right) \end{cases}
  • 4つのパラメータ a,b,c, d は -3 から +3 までの値。

f:id:hrt1ro:20201116203643p:plaina=1.7 b=1.7 c=0.6 d=1.2

f:id:hrt1ro:20201116203610p:plaina=-1.7 b=1.8 c=-0.9 d=-0.4

f:id:hrt1ro:20201116203556p:plaina=-1.7 b=1.3 c=-0.1 d=-1.21

f:id:hrt1ro:20201116203545p:plaina=-1.4 b=1.6 c=1.0 d=0.7

Clifford Attractor on Scratch

Fractal Dream Attractor

Clifford A Pickover によって発見された。彼の書籍 “Chaos In Wonderland” で議論されている。パラメータは Jason Rampe によるもの。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = \sin\left(b y_n\right) + c \sin\left(b x_n\right) \\ y_{n+1} = \sin\left(a x_n\right) + d \sin\left(a y_n\right) \end{cases}
  • パラメータ a, b は -3 から +3 までの値、 パラメータ c, d は -0.5 から +1.5 までの値。
  • "SSSS version" と呼ばれてるみたいだけどたぶん… sin() が 4つあるから(?)

f:id:hrt1ro:20201117163602p:plaina=-0.966918 b=2.879879 c=0.765145 d=0.744728

f:id:hrt1ro:20201117163615p:plaina=-1.9956 b=-1.4528 c=-2.6206 d=0.8517

f:id:hrt1ro:20201117163611p:plaina=-1.1554 b=-2.3419 c=-1.9799 d=2.1828

f:id:hrt1ro:20201117163606p:plaina=-2.8276 b=1.2813 c=1.9655 d=0.597

Fractal Dream Attractor on Scratch

Gumowski-Mira Attractor

I. Gumowski と C. Mira による発見。コードとパラメータは Jason Rampe と Lázaro Alonso によるもの。 詳細はグモウスキー・ミラの写像。Miraは鳥が翼を広げているように見える図を「神話の鳥(mythic bird)」と名付けた。

  •  \left(x_0,y_0\right) =\left(0.1, 0.01\right)
  • f,gの2種類の手続きにそれぞれ2種類の実装がある
  • (f1)  \begin{cases} x_{n+1} = y_n + g(x_n)\\ y_{n+1} = -x_n + g(x_{n+1}) \end{cases}
  • (f2)  \begin{cases} x_{n+1} = y_n + \alpha * y * (1 - \sigma * y_n^2) + g(x) \\ y_{n+1} = -x_n + g(x_{n+1}) \end{cases}
  • (g1)  g(x):=\frac{\mu x + (2 (1-\mu) x^2)}{1+x^2}
  • (g2)  g(x):=\mu x + (1 - \mu) x^2 e^{\frac{1 - x^2}{4}}
  • パラメータは f,gのそれぞれどちらを選択するかの指定と、α,σ,μ の3つ。

f:id:hrt1ro:20201114172858p:plain(f2,g1), α=0.008, σ=0.05, μ=-0.496

f:id:hrt1ro:20201114172852p:plain(f2,g1), α=0.009, σ=0.05, μ=-0.801

Gumowski-Mira Attractor on Scratch

Hopalong Attractor

Barry Martin によって発見された。 hopalong はポーランド語で「飛び交い」

f:id:hrt1ro:20201117191428p:plaina=7.1687818 b=8.436598 c=2.5598342

f:id:hrt1ro:20201117191432p:plaina=7.7867513 b=0.13218981 c=8.14611

f:id:hrt1ro:20201117191439p:plaina=9.745469 b=1.5632023 c=7.868182

f:id:hrt1ro:20201117191443p:plaina=9.767124 b=4.1097345 c=3.7833269

Hopalong Attractor on Scratch

Jason Rampe 1 Attractor

Jason Rampe による、既存の式にランダムな変更を試行するうちに発見された。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = \cos\left(b y_n\right) + c \sin\left(b x_n\right) \\ y_{n+1} = \cos\left(a x_n\right) + d \sin\left(a y_n\right) \end{cases}

パラメータ a, b, c, d は -3 から +3 までの値。

f:id:hrt1ro:20201118131806p:plaina=-1.8669 b=1.2768 c=-2.9296 d=-0.4121

f:id:hrt1ro:20201118131815p:plaina=2.6 b=-2.5995 c=-2.9007 d=0.3565

f:id:hrt1ro:20201118131810p:plaina=-2.7918 b=2.1196 c=1.0284 d=0.1384.png

f:id:hrt1ro:20201118131819p:plaina=1.8285 b=-1.8539 c=0.3816 d=1.9765

Jason Rampe 1 Attractor on Scratch

Jason Rampe 2 Attractor

その2

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = \cos\left(b y_n\right) + c \cos\left(b x_n\right) \\ y_{n+1} = \cos\left(a x_n\right) + d \cos\left(a y_n\right) \end{cases}

f:id:hrt1ro:20201119110932p:plaina=-2.4121 b=-1.0028 c=-2.2386 d=0.274

f:id:hrt1ro:20201119110936p:plaina=-2.9581 b=0.927 c=2.7842 d=0.6267

f:id:hrt1ro:20201119110941p:plaina=1.546 b=1.929 c=1.09 d=1.41

f:id:hrt1ro:20201119110945p:plaina=2.907 b=-1.9472 c=1.2833 d=1.3206

Jason Rampe 2 Attractor on Scratch

Jason Rampe 3 Attractor

その3

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = \sin\left(b y_n\right) + c \cos\left(b x_n\right) \\ y_{n+1} = \cos\left(a x_n\right) + d \sin\left(a y_n\right) \end{cases}

f:id:hrt1ro:20201119131612p:plaina=-2.7564 b=-1.8234 c=2.8514 d=-0.8745

f:id:hrt1ro:20201119131616p:plaina=1.2418 b=-2.4174 c=-0.7112 d=-1.9802

f:id:hrt1ro:20201119131620p:plaina=2.0246 b=-1.323 c=-2.8151 d=0.2277

f:id:hrt1ro:20201119131624p:plaina=1.4662 b=-2.3632 c=-0.4167 d=2.4162

Jason Rampe 3 Attractor on Scratch

Johnny Svensson Attractor

Peter de Jong Attractor の変種。 Johnny Svensson によって創られた。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = d \sin\left(a x_n\right) - \sin\left(b y_n\right) \\ y_{n+1} = c \cos\left(a x_n\right) + \cos\left(b y_n\right) \end{cases}

パラメータa,b,c,dは -3から3までの値

f:id:hrt1ro:20201118113509p:plaina=-2.337 b=-2.337 c=0.533 d=1.378

f:id:hrt1ro:20201118113514p:plaina=1.4 b=1.56 c=1.4 d=-6.56

f:id:hrt1ro:20201118113518p:plaina=-2.538 b=1.362 c=1.315 d=0.513

f:id:hrt1ro:20201118113522p:plaina=-2.722 b=2.574 c=1.284 d=1.043

Johnny Svensson Attractor on Scratch

Bedhead Attractor

Ivan Emrich によって発見された。bed head の意味はたぶん寝癖。

  •  \left(x_0,y_0\right) =\left(1.0, 1.0\right)
  •  \begin{cases} x_{n+1} = \sin\left(\frac{x_n y_n}{b}\right)y_n + \cos\left(a x_n - y_n\right) \\ y_{n+1} = \frac{\sin\left(y_n\right)}{b} \end{cases}
  • aとbは-1から+1までの値。

f:id:hrt1ro:20201117154731p:plaina=-0.81 b=-0.92

f:id:hrt1ro:20201117154720p:plaina=-0.64 b=0.76

f:id:hrt1ro:20201117154727p:plaina=-0.67 b=0.83

f:id:hrt1ro:20201117154723p:plaina=0.06 b=0.98

Bedhead Attractor on Scratch

Quadratic Strange Attractor

Clint Sprottによる、12パラメータの系。quadraticは2次式ということ。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = a_0 + a_1 x_n + a_2 x_n^2 + a_3 x_n y_n + a_4 y_n + a_5 y_n^2 \\ y_{n+1} = a_6 + a_7 x_n + a_8 x_n^2 + a_9 x_n y_n + a_{10} y_n + a_{11} y_n^2 \end{cases}
  • パラメータは  a_0 から  a_{11} までの12個。各値は長さ12文字の文字列で与えられる。
  • パラメータ文字はAからYまでの25種類で-1.2から+1.2までの値を表す。 A=-1.2として、次の文字に進むごとに0.1刻みで増え、Y=+1.2である。

f:id:hrt1ro:20201118150429p:plainCVQKGHQTPHTE

f:id:hrt1ro:20201118150433p:plainWNCSLFLGIHGL

Quadratic Strange Attractor on Scratch

Cubic Strange Attractor

cubicは3次。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1} = a_0 + a_1 x_n + a_2 x_n^2 + a_3 x_n^3 + a_4 x_n^2 y_n + a_5 x_n y_n + a_6 x_n y_n^2 + a_7 y_n + a_8 y_n^2 + a_9 y_n^3 \\ y_{n+1} = a_{10} + a_{11} x_n + a_{12} x_n^2 + a_{13} x_n^3 + a_{14} x_n^2 y_n + a_{15} x_n y_n + a_{16} x_n y_n^2 + a_{17} y_n + a_{18} y_n^2 + a_{19} y_n^3 \end{cases}
  • パラメータは  a_0 から  a_{19} までの20個。値は Quadratic と同じ、AからYまでの25種類からなる20文字の文字列で与えられる。

f:id:hrt1ro:20201119121908p:plainISMHQCHPDFKFBKEALIFD

f:id:hrt1ro:20201119121904p:plainJYCBMNFNYOEPYUGHHESU

Cubic Strange Attractor on Scratch

あと4次,5次,6次とあるけど割愛。

Symmetric Icon Attractor

Michael Field と Martin Golubitsky によって創られた。コードとパラメータは Jason Rampe によるもの。

  •  \left(x_0,y_0\right) =\left(0.01, 0.01\right)
  •  \left(x_n, y_n\right) から  \left(x_{n+1}, y_{n+1}\right) を得る手順は下記の擬似コードで与えられる。
    zreal ← xn
    zimag ← yn
    repeat (degree-2) times {
         za ← zreal*xn - zimag*yn
         zb ← zimag*xn + zreal*yn
         zreal ← za
         zimag ← zb
    }
    zn ← xn*zreal - yn*zimag
    p ← α*(xn2 + yn2) + β*zn + λ
    xn+1 ← p*xn + γ*zreal - ω*yn
    yn+1 ← p*yn - γ*zimag + ω*xn
    

パラメータは λ, α, β, γ, ω, degree の6つ。degree は3以上の整数。

f:id:hrt1ro:20201118100409p:plainλ=-2.195 α=10.0 β=-12.0 γ=1.0 ω=0.0 degree=3

f:id:hrt1ro:20201118100413p:plainλ=1.56 α=-1.0 β=0.1 γ=-0.82 ω=0.12 degree=3

f:id:hrt1ro:20201118100418p:plainλ=-1.806 α=1.806 β=0.0 γ=1.0 ω=0.0 degree=5

f:id:hrt1ro:20201118100421p:plainλ=2.409 α=-2.5 β=0.0 γ=0.9 ω=0.0 degree=23

Symmetric Icon Attractor on Scratch

Tinkerbell Attractor

詳細はティンカーベル写像。名前の由来は定かではない。本アトラクタの解軌道が「シンデレラ城の上空を飛ぶティンカーベルの動きに似ている」らしいが、もし本当に似ていたら消されるやつでは。

  •  \left(x_0,y_0\right) =\left(-0.72, -0.64\right)
  •  \begin{cases} x_{n+1} = x_n^2 − y_n^2 + a x_n + b y_n \\ y_{n+1} = 2 x_n y_n + c x_n + d y_n \end{cases}
  • パラメータは a,b,c,dの4つ。

f:id:hrt1ro:20201119132816p:plaina=0.9 b=-0.6013 c=2.0 d=0.5

a=0.3, b=0.6, c=2.0, d=0.27 にもattractorがあるけど、あまりstrangeではないので割愛。

Tinkerbell Attractor on Scratch

Chossat Golubitsky Attractor

チョーサ氏とゴルビツキー氏のカオス。 ぐぐり方がヘボいせいかチョーサ氏の綴がこれで正しいかどうか確証が持てない。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} A = a (x_n^2 + y_n^2) + b x_n (x_n^2 - 3 y_n^2) + c \\ x_{n+1} = A x_n + d (x_n^2 - y_n^2) \\ y_{n+1} = A y_n - 2 d x_n y_n \end{cases}
  • パラメータは a,b,c,dの4つ。

f:id:hrt1ro:20201117111528p:plaina=2.0 b=-0.2 c=-1.75 d=1.0

f:id:hrt1ro:20201117111522p:plaina=1.0 b=0.0 c=-1.9 d=0.4

f:id:hrt1ro:20201117111518p:plaina=-1.0 b=0.1 c=1.6 d=-0.8

f:id:hrt1ro:20201117111513p:plaina=-1.0 b=0.1 c=1.52 d=-0.8

Chossat Golubitsky Attractor on Scratch

Lorenz Attractor

Lorenz Attractorでぐぐっても3Dのほうばかりヒットするので、2Dのこいつの詳細が分からない。

  •  \left(x_0,y_0\right) =\left(0.1, 0.1\right)
  •  \begin{cases} x_{n+1}= (1 + a b) x_n - b x_n y_n \\ y_{n+1}= (1 - b) y_n + b x_n^2 \end{cases}
  • パラメータは a, b のふたつ。

f:id:hrt1ro:20201117203103p:plaina=0.45 b=1.9

f:id:hrt1ro:20201117203058p:plaina=1.0 b=0.9

2D Lorenz Attractor on Scratch

色の付け方

 (x_n,y_n)の色の決め方は、2つの点  (x_n,y_n) -  (x_{n-1},y_{n-1}) 間の距離を適当な色相にマッピングするとなんとなく良いようである。

参考リンク