phân dạng Python

Mar 22 2023
Hình học Fractal là một lĩnh vực hấp dẫn liên quan đến việc nghiên cứu các cấu trúc toán học được gọi là fractals. Fractals là các mẫu phức tạp, tự tương tự lặp lại ở các quy mô khác nhau và chúng có thể được tìm thấy trong tự nhiên, nghệ thuật và khoa học.

Hình học Fractal là một lĩnh vực hấp dẫn liên quan đến việc nghiên cứu các cấu trúc toán học được gọi là fractals. Fractals là các mẫu phức tạp, tự tương tự lặp lại ở các quy mô khác nhau và chúng có thể được tìm thấy trong tự nhiên, nghệ thuật và khoa học.

Một trong những fractal nổi tiếng nhất là tập hợp Mandelbrot, được đặt theo tên của nhà toán học Benoit Mandelbrot. Tập hợp Mandelbrot được tạo ra bằng cách lặp đi lặp lại một phương trình đơn giản và kiểm tra hành vi của chuỗi số phức kết quả. Tập hợp Mandelbrot được định nghĩa là tập hợp các số phức c mà dãy vẫn bị chặn khi lặp lại.

Để tạo bộ Mandelbrot, chúng ta có thể sử dụng Python và thư viện matplotlib. Bước đầu tiên là xác định một hàm nhận vào một số phức c và số lần lặp tối đa, đồng thời trả về số lần lặp cần thiết để chuỗi trở nên không bị chặn.

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

Khi bộ Mandelbrot đã được tạo, chúng ta có thể sử dụng thư viện matplotlib để trực quan hóa nó dưới dạng hình ảnh.

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

Bây giờ chúng ta có thể sử dụng các hàm này để tạo và vẽ đồ thị tập hợp Mandelbrot cho một vùng quan tâm và độ phân giải nhất định.

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

Một fractal nổi tiếng khác có thể được tạo bằng cách sử dụng cách tiếp cận tương tự là tập hợp Julia, được định nghĩa là tập hợp các số phức c mà chuỗi z_n = z_{n-1}² + c vẫn bị chặn. Tập hợp Julia được tạo bằng cách lặp lại phương trình tương tự như tập hợp Mandelbrot, nhưng với giá trị cố định là c.

Để tạo tập hợp Julia, chúng ta có thể sửa đổi hàm mandelbrot để nhận giá trị cố định của c và áp dụng nó cho từng điểm trong mặt phẳng phứ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')

Fractals là các cấu trúc toán học hấp dẫn có thể được tạo và hiển thị trực quan bằng Python và thư viện matplotlib. Tập hợp Mandelbrot và tập hợp Julia là hai ví dụ nổi tiếng về fractals có thể được tạo bằng thuật toán lặp đơn giản, và cấu trúc phức tạp và đẹp mắt của chúng khiến chúng trở thành chủ đề nghiên cứu và khám phá phổ biến trong toán học, khoa học và nghệ thuật.