LoginSignup
14
16

More than 5 years have passed since last update.

Python, matplotlibでリアプノフ・フラクタルを描く

Last updated at Posted at 2016-09-04

はじめに

2016年8月22日より,2ヶ月の予定でマレーシアに出張してきている.ホテル暮らしで休日は暇なので,久しぶりに趣味のプログラムを作ってみることにした.

フラクタル関係では,マンデルブロー,ブッダブロ,ジュリア集合などを描いたことがあるが,いずれもFortranで座標の色を計算し,GMTで出力させるものであったが,今回は全てPythonでやってみることにした.

作図機能としては,Python-matplotlibのヒートマップ描画機能(pcolor)を使っている.x座標,y座標,z値(作図上は色を示す値)をそれぞれ2次元配列で準備する必要があるが,作図用コーディングは非常にシンプルにでき,このような作図には便利である.

プログラム事例

以下のプログラムは,参考サイト(1)に記載のBASICプログラムをPythonに書き換えたものです.多少筆者の趣味で変更してある.

変化させる変数は以下のとおり

ab a=0, b=1 として描きたい基本文字列(プログラム上では1次元配列)を作成
nm 1次元配列 *ab* の繰り返し数
a0, a1 x軸の範囲
b0, b1 y軸の範囲
irx, iry x軸範囲およびy軸範囲の分割数


py_lyapunov0.py
import numpy as np
import matplotlib.pyplot as plt

ab=np.array([0,1])
nab=len(ab)
nm=10
a0=2
a1=4
b0=2
b1=4
irx=800
iry=600

x = np.linspace(a0,a1,irx+1)
y = np.linspace(b0,b1,iry+1)
X, Y = np.meshgrid(x, y)

z=np.empty((iry+1,irx+1))
for i in range(0,irx+1):
    a=a0+(a1-a0)/(irx)*i
    for j in range(0,iry+1):
        b=b0+(b1-b0)/(iry)*j
        s=0
        xx=0.5
        for n in range(0,nm):
            for m in range(0,nab):
                if ab[m]==0:
                    rr=a
                else:
                    rr=b
                xx=rr*xx*(1-xx)
                v=np.abs(rr*(1-2*xx))
                if 0<v: s=s+np.log(v)
        s=s/(nm*nab)
        if 2<s:
            z[j,i]=2
        elif s<-5:
            z[j,i]=-5
        else:
            z[j,i]=s

print(np.max(z))
print(np.min(z))

z=-1.0*z
plt.xlim(a0,a1)
plt.ylim(b0,b1)
plt.pcolor(X, Y, z, cmap=plt.cm.spectral)
plt.colorbar()
plt.show()

作図事例

上記プログラムに記載の変数により作図した事例を以下に示す.

figure_1.png

参考サイト

(1) Lyapunov フラクタル作図プログラム事例
http://www.rowan.edu/colleges/csm/departments/math/facultystaff/osler/15.%20A%20quick%20look%20at%20Lyapunov%20space.pdf

(2) ヒートマップ実例
http://yoshihikomuto.hatenablog.jp/entry/2015/04/10/105615

(3) ヒートマップ基礎
http://d.hatena.ne.jp/y_n_c/20091122/1258904025

(4) リアプノフ・フラクタル(Wikipedia)
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A2%E3%83%97%E3%83%8E%E3%83%95%E3%83%BB%E3%83%95%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%AB

以上

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16