Фракталы Python

Mar 22 2023
Фрактальная геометрия — увлекательная область, занимающаяся изучением математических структур, известных как фракталы. Фракталы — это сложные, самоподобные узоры, которые повторяются в разных масштабах, и их можно найти в природе, искусстве и науке.

Фрактальная геометрия — увлекательная область, занимающаяся изучением математических структур, известных как фракталы. Фракталы — это сложные, самоподобные узоры, которые повторяются в разных масштабах, и их можно найти в природе, искусстве и науке.

Одним из самых известных фракталов является множество Мандельброта, названное в честь математика Бенуа Мандельброта. Множество Мандельброта генерируется путем многократного повторения простого уравнения и изучения поведения результирующей последовательности комплексных чисел. Множество Мандельброта определяется как множество комплексных чисел c, для которых последовательность остается ограниченной при итерации.

Чтобы сгенерировать множество Мандельброта, мы можем использовать Python и библиотеку matplotlib. Первый шаг — определить функцию, которая принимает комплексное число c и максимальное количество итераций и возвращает количество итераций, необходимое для того, чтобы последовательность стала неограниченной.

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

После создания множества Мандельброта мы можем использовать библиотеку matplotlib для визуализации его в виде изображения.

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

Теперь мы можем использовать эти функции для создания и построения множества Мандельброта для заданной интересующей области и разрешения.

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

Другой известный фрактал, который можно сгенерировать с помощью аналогичного подхода, — это множество Жюлиа, которое определяется как множество комплексных чисел c, для которых последовательность z_n = z_{n-1}² + c остается ограниченной. Набор Жюлиа генерируется повторением того же уравнения, что и набор Мандельброта, но с фиксированным значением c.

Чтобы сгенерировать набор Жюлиа, мы можем изменить функцию Мандельброта, чтобы она принимала фиксированное значение c и применяла его к каждой точке комплексной плоскости.

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

Фракталы — это увлекательные математические структуры, которые можно генерировать и визуализировать с помощью Python и библиотеки matplotlib. Множество Мандельброта и множество Жюлиа — два известных примера фракталов, которые можно генерировать с помощью простых итерационных алгоритмов, а их сложная и красивая структура делает их популярным предметом изучения и исследования в математике, науке и искусстве.