フラクタル

ブルースカイ・カタストロフィ

ブルースカイ・カタストロフィ(つよそう)

スクリーンショット 2018-05-05 17.10.41

↑は参考にあった Blue sky orbit in the Gavrilov-A. Shilnikov model でパラメータも同じもの.

以下は, \(\varepsilon\) をそのまま固定しながら, \(\mu\) を \([0.1, 1.1]\) の範囲で動かしたもの(0.02 間隔で 80000 回のルンゲクッタ.最初の 1000 回は捨てている).

ローレンツアトラクタとカオス

こんにちは.TRSasasusu です.

記事を更新していないだけで,KCS は活動しています.新歓の準備も進んでいるようです.

さて,自分は生命情報学科に所属していますが,この前のレポートにてカオスで遊んだので,今回はその話をします.

スクリーンショット 2018-02-01 15.46.11

これはローレンツ方程式(↓の式)のアトラクタです.この軌道に沿って点が移動していきます.


\begin{align}
\frac{dx}{dt} &= -\sigma x + \sigma y \\
\frac{dy}{dt} &= -xz + rx -y \\
\frac{dz}{dt} &= xy – bz
\end{align}

特にこのようなフラクタル構造を持つアトラクタはストレンジアトラクタと呼ばれ,カオスを生み出します.蝶の羽みたいで美しいですね.

そして,パラメータ(今回は \(\sigma,\ r,\ b\))を変化させると,カオスになったりならなかったりします.これを表すのが分岐図です.

スクリーンショット 2018-02-01 16.07.43

なんかすごいですね.そして,カオスを定量的に表すのがリアプノフ指数(多次元でまとめたものがリアプノフスペクトラム)です.力学系を表すヤコビ行列を時系列順に並べて QR 分解して(時刻 \(0\) では時刻 \(0\) のヤコビ行列のみを,それ以降ではヤコビ行列に前時刻の \(Q\) を右から掛けたものをそれぞれ QR 分解する),各時刻の \(R\) のそれぞれの対角要素の \(\log\) をとって全部足し合わせて \(N\) で割ると,以下のようになります.

スクリーンショット 2018-02-02 1.06.55

1 つでも正のリアプノフ指数があればカオスとなるようなので,この結果は分岐図のものと一致していますね.

最後に,ストレンジアトラクタの動画を載せて終わりにします(動画はレポートには載せられない).

フラクタルギャラリー2

フラクタルギャラリー1」の続き。

要旨

ST法により等角写像を繰り返し用いた3Dフラクタルを実装できる。

等角写像を用いる順番、種類、回数を変えることにより、様々な3Dフラクタルを実装できる。

描画結果

f5f4f3f2f1f

最後の奴は、何かの膜で包まれているようにも見える。

フラクタル・ギャラリー1

f
サムネイル

前回の記事もそうだったように、レイトレーシングの手法の一つにSphereTracing法というものがある。

このSphereTracing法の距離関数を上手く設定することで、3Dフラクタルを現実的な速度で書く事ができます。

3Dフラクタル描画の問題点

 

ff
(図1)開発中のフラクタル・エディタ(2Dver)

一般的に、GPUを使って2Dフラクタルを実装する際は、フラクタルを描画したい閉区間をピクセルにラスタライズして、各点がそのフラクタルの内部にあるか外部にあるか確かめねばならない。(図1)

これを常識的に拡張すれば、当然3Dのピクセル、すなわちボクセルの集合体として閉空間をラスタライズし、フラクタル内部の点かどうか確かめ適当な射影行列で2Dにマッピングするという考えに至るだろう。

しかし、これには問題がある。それは計算量の問題である。2Dフラクタルの計算量は時間計算量・空間計算量ともにO(n^2)であり、これを拡張した3DフラクタルではO(n^3)となっている。これは非常に大きい。

距離関数の設計

そこで、SphereTracing法である。すなわち、ある点が与えられた時、その点から最も近いフラクタル立体の距離がわかれば、ST法を用いて計算量O(n^2)で2Dマッピングができるというわけだ。

詳細な距離関数の設計は他所(Hypercomplex Iterations,Distance Estimation and Higher Dimensional Fractals, Yumei et al.)に譲るとして、フラクタルの構成の際に、すべてが等角写像であれば、距離関数d(r)は

d(r) > sd(r) = 0.5rlog(f(r))/abs(grad(f(r)))

で計算できることが知られている。ここで等号ではなく不等号が使われているのは、距離関数の近似を用いているためである。ST法ではsum(n=0…∞)d(r_n)=sum(n=0…∞)sd(r_n)が成り立つとき、dをsdで代用できる(自明である)。

これを用いて、実際にフラクタルを実装してみた結果が、次のようである。

描画結果

これらは、現在開発中の「フラクタル・エディタ(3Dver)」の出力結果である。解像度がころころ変わっているのは気にしないで欲しい。「フラクタル・エディタ(3Dver)」はリアルタイム式(Unity)と高解像式(CUDA)の二種類を開発している。しかし、やっていることは変わらないのであんまり意味は無い。しいて言えば、CUDA式のほうが拡張性が高いといったところである。現在、フラクタル・エディタに進化計算システムを追加しようとしている。

imagee5

mandelbox_mmm

ff