расширение Мандельброта для создания Джулии

работая над проектом, требующим, чтобы я использовал один и тот же код, обратите внимание, что в одном и том же файле генерируются наборы Мандельброта и наборы Джулии, у меня есть рабочий набор Мандельброта, но я могу увидеть, как расширить набор Джулии, используя тот же код. может быть, я не понимаю различий между ними? кто-нибудь может уточнить

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')

person user46772    schedule 29.04.2015    source источник
comment
голосование за него из-за неконструктивного отрицательного голоса   -  person karatedog    schedule 30.04.2015


Ответы (2)


Набор Мандельброта — это особый набор с точки зрения наборов Жюлиа, в некоторых документах написано, что набор Мандельброта — это индексный набор ВСЕХ наборов Жюлиа (существует один и только один индексный набор — Мандельброт — и есть бесконечное число наборов Жюлиа.)

Когда вы вычисляете точку на множестве Мандельброта и перебираете 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

person karatedog    schedule 01.05.2015
comment
Я только что попробовал это после некоторой возни, и это действительно глупо, просто запустив Мандельброта - большое спасибо !! - person HugMyster; 18.11.2015

Во фрактале Мандельброта значение z равно 0 в начале итерации, а во фрактале Джулии используется значение, отличное от экранной координаты, и фиксированное комплексное число.

person Gigamegs    schedule 01.05.2015