2015-04-29 41 views
0

在一個需要我使用相同代碼的項目上工作,注意在同一個文件中生成mandelbrot集和julia集,我有一個工作mandelbrot集,但可以看到如何擴展到使用相同代碼的julia集。 也許沒有得到區別?任何人都可以闡述擴展mandelbrot生成julia

import numpy as np 
import matplotlib.pyplot as plt 
import math 



def Mandelbrot(zmin, zmax, m, n, tmax=256): 

    xs = np.linspace(zmin, zmax, n) 
    ys = np.linspace(zmin, zmax, m) 
    X, Y = np.meshgrid(xs, ys) 


    Z = X + 1j * Y 
    C = np.copy(Z) 
    M = np.ones(Z.shape) * tmax 

    for t in xrange(tmax): 
     mask = np.abs(Z) <= 2. 
     Z[ mask] = Z[mask]**2 + C[mask] 
     M[-mask] -= 1. 
    return M 

list=Mandelbrot(-2,2,500,500) 
plt.imshow(list.T, extent=[-2, 1, -1.5, 1.5]) 
plt.gray() 
plt.savefig('mandelbrot.png') 
+0

upvoting它,因爲建設性downvote – karatedog

回答

1

曼德爾布羅集是在Julia集方面具有特殊的設置,一些文件寫道,Mandelbrot集,所有被朱莉婭的索引集(有一個且只有一個索引集 - 曼德爾布羅 - 有無限數量的Julia集合)

當您計算Mandelbrot集上的一個點並遍歷z^2 + c時,此c採用與您嘗試確定它是否屬於地圖的一部分相同的值。這個c會改變,如果你去下一點(這是你如何做你的計算)。

換句話說,你有一個值是常數當你通過迭代,但會改變每一個不同的點。

當您計算茱莉亞集時,計算結果與99.9%相同,除非您必須使用在計算過程中不變的c值,而不僅僅是一個點。這就是爲什麼它不被命名爲c以避免混淆,但通常是k

現在,如果我足夠困惑,解決方案是非常簡單的。你必須改變這一點:

Z[ mask] = Z[mask]**2 + C[mask] 

這樣:

Z[ mask] = Z[mask]**2 + (-0.8+0.156j) 

檢查組同樣在這裏:http://en.wikipedia.org/wiki/File:Julia_set_camp4_hi_rez.png

+0

我只是嘗試了一些擺弄後這真的很愚蠢,只是讓Mandelbrot運行 - 非常感謝你! – HugMyster

0

在曼德爾布羅分形的Z值是0在迭代開始,並在Julia集,它使用從屏幕不同的值的座標和固定複數。