工学の博士です。ここ数年、開発にpythonを使っています。pythonはライブラリも豊富で使いやすいと思います。しかし、ハマってしまうときはあるので、自分自身への備忘録を兼ねて、コツを紹介します。
2014年5月29日木曜日
フラクタル 第3回
今度は前回のマンデルブロ集合の変則的な形として、試してみたものです。
今回は
z(n+1) = z(n)^3 + c
という漸化式による収束性について複素平面の図を作ってみました。
できたのは下のような左右対称な図です。
各c(複素数)の点で、zの発散しなかった領域が黒い部分です。緑部分は発散領域です。
この場合もフラクタルのような図形になりました。
図の中央が原点で、左右対称な図形となりました。
範囲は実数軸、虚数軸ともに-1.5から1.5までです。
データ点は約14M 個生成して作成しました。
漸化式の繰り返し回数は10回です。
今回はpythonからデータを生成して、MySQLを使ってデータを管理しましたが、30分程度かかりました。
今回の計算結果はWEBを検索しても簡単に見つからなかったので、ちょっとした課題としていいかもしれません。
作った関数はこんなかんじです。
def makeMandelbrot3( itrn, n=100, xrange=None, yrange=None ):
if xrange == None:
xrange = (-2.5, 2.5)
if yrange == None:
yrange = (-2.5, 2.5)
c = np.random.uniform( xrange[0], xrange[1], n) + 1j*np.random.uniform( yrange[0], yrange[1],n)
z = 0
for i in range(itrn):
z = z**3 + c
return c, z
itrnは繰り返し回数で、データ数はnです。
戻り値はcとzなので、
この関数を使用するときは
c, z = makeMandelbrot3( 10, 1000 )
のようにします。
これで繰り返し10回のデータcとzが1000点分生成されます。
メモリ確保の問題さえなければ、nの値を大きくすればその分データが生成されます。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿