Fraktale Pythona

Mar 22 2023
Geometria fraktalna to fascynująca dziedzina zajmująca się badaniem struktur matematycznych zwanych fraktalami. Fraktale to złożone, samopodobne wzory, które powtarzają się w różnych skalach i można je znaleźć w przyrodzie, sztuce i nauce.

Geometria fraktalna to fascynująca dziedzina zajmująca się badaniem struktur matematycznych zwanych fraktalami. Fraktale to złożone, samopodobne wzory, które powtarzają się w różnych skalach i można je znaleźć w przyrodzie, sztuce i nauce.

Jednym z najbardziej znanych fraktali jest zbiór Mandelbrota, nazwany na cześć matematyka Benoit Mandelbrota. Zbiór Mandelbrota jest generowany przez wielokrotne iterowanie prostego równania i badanie zachowania wynikowej sekwencji liczb zespolonych. Zbiór Mandelbrota definiuje się jako zbiór liczb zespolonych c, dla których sekwencja pozostaje ograniczona podczas iteracji.

Aby wygenerować zbiór Mandelbrota, możemy użyć Pythona i biblioteki matplotlib. Pierwszym krokiem jest zdefiniowanie funkcji, która przyjmuje liczbę zespoloną c i maksymalną liczbę iteracji i zwraca liczbę iteracji wymaganych, aby sekwencja stała się nieograniczona.

import numpy as np 
 
def mandelbrot(c, max_iter): 
    z = 0 
    for i in range(max_iter): 
        z = z**2 + c 
        if abs(z) > 2: 
            return i 
    return max_iter

def generate_mandelbrot_set(xmin, xmax, ymin, ymax, width, height, max_iter): 
    x_values = np.linspace(xmin, xmax, width) 
    y_values = np.linspace(ymin, ymax, height) 
    mandelbrot_set = np.zeros((height, width)) 
     
    for i in range(height): 
        for j in range(width): 
            mandelbrot_set[i,j] = mandelbrot(complex(x_values[j], y_values[i]), max_iter) 
             
    return mandelbrot_set

Po wygenerowaniu zbioru Mandelbrota możemy użyć biblioteki matplotlib, aby zwizualizować go jako obraz.

def generate_mandelbrot_set(xmin, xmax, ymin, ymax, width, height, max_iter): 
    x_values = np.linspace(xmin, xmax, width) 
    y_values = np.linspace(ymin, ymax, height) 
    mandelbrot_set = np.zeros((height, width)) 
     
    for i in range(height): 
        for j in range(width): 
            mandelbrot_set[i,j] = mandelbrot(complex(x_values[j], y_values[i]), max_iter) 
             
    return mandelbrot_set

Możemy teraz użyć tych funkcji do wygenerowania i wykreślenia zbioru Mandelbrota dla danego obszaru zainteresowania i rozdzielczości.

if __name__ == '__main__': 
    xmin, xmax, ymin, ymax = -2, 1, -1.5, 1.5 
    width, height = 1000, 1000 
    max_iter = 1000 
    mandelbrot_set = generate_mandelbrot_set(xmin, xmax, ymin, ymax, width, height, max_iter) 
    plot_mandelbrot_set(mandelbrot_set, cmap='inferno')

Innym znanym fraktalem, który można wygenerować przy użyciu podobnego podejścia, jest zbiór Julii, zdefiniowany jako zbiór liczb zespolonych c, dla których ciąg z_n = z_{n-1}² + c pozostaje ograniczony. Zbiór Julii jest generowany przez iterację tego samego równania co zbiór Mandelbrota, ale ze stałą wartością c.

Aby wygenerować zbiór Julii, możemy zmodyfikować funkcję Mandelbrota, aby przyjąć stałą wartość c i zastosować ją do każdego punktu na płaszczyźnie zespolonej.

def julia(z, c, max_iter): 
    for i in range(max_iter): 
        z = z**2 + c 
        if abs(z) > 2: 
            return i 
    return max_iter

def julia(z, c, max_iter): 
    for i in range(max_iter): 
        z = z**2 + c 
        if abs(z) > 2: 
            return i 
    return max_iter

if __name__ == '__main__': 
    xmin, xmax, ymin, ymax = -2, 2, -2, 2 
    width, height = 1000, 1000 
    max_iter = 1000 
    c = complex(-0.4, 0.6) 
    julia_set = generate_julia_set(xmin, xmax, ymin, ymax, width, height, c, max_iter) 
    plot_mandelbrot_set(julia_set, cmap='inferno')

Fraktale to fascynujące struktury matematyczne, które można generować i wizualizować za pomocą Pythona i biblioteki matplotlib. Zbiór Mandelbrota i zbiór Julii to dwa słynne przykłady fraktali, które można generować za pomocą prostych algorytmów iteracyjnych, a ich skomplikowane i piękne struktury sprawiają, że są popularnym przedmiotem badań i eksploracji w matematyce, naukach ścisłych i sztuce.