今回も、マンデルブロのアレンジを作ってみました。
ただ、毎回関数を別に作るのは無駄なので、P乗で一般化してみました。
つまり、
z(n+1) = z(n)**p + c
z(0)=0
とした時のcと最終のzの値を出力します。
import numpy as np
def makeMandelbrotP( itrn, p=2, n=100, xrange=None, yrange=None ):
if xrange == None:
xrange = (-2.5, 2.5)
if yrange == None:
yrange = (-2.5, 2.5)
r = np.random.uniform( xrange[0], xrange[1], n) + 1j*np.random.uniform( yrange[0], yrange[1],n)
c = r.copy()
z = 0
for i in range(itrn):
z = z**p + c
return c, z
今回はp=4として4乗にした時、このzの値が発散しているかどうかを複素平面上に表示しました。
前回の3乗で180度対称だったので、p乗で306/(p-1) 度の回転対称になるものと想像できます。
この図は16回の繰り返しです。
繰り返し回数については、8回ぐらいでだいたいフラクタルっぽくなります。
繰り返し2回
繰り返し3回
繰り返し4回
繰り返し5回
繰り返し6回
繰り返し7回
繰り返し8回
という感じです。一枚あたりのデータ量が多く、リスト内表記を使うとメモリアロケーションのエラーになるので、
仕方なくforループを使いました。
通常書類作成用に使っているPC(Core2Quad 2.4GHz)で、上の画像作成時間は一枚あたり6分位かかりました。
0 件のコメント:
コメントを投稿