ジュリア集合の可視化を試みる【Python×matplotlib×ChatGPT】

今日もこんにちは!
前回は、マンデルブロ集合を可視化してみました。
こんな図です。

今回は、ジュリア集合を可視化してみようと思います。
ジュリア集合とはなんなのか・・・
よくわかりません。

ChatGPTによると、

ジュリア集合は、複素数の数列を生成する再帰的な関数を用いて描かれる数学的な図形です。ジュリア集合はフラクタルとして知られており、美しい幾何学的な模様を生成しますジュリア集合の特徴は、その形状が収束する点(収束バスケット)や複雑なフラクタル構造を持つ点などがあります。さらに、ジュリア集合は数学的にも興味深く、カオス理論や非線形ダイナミクスの研究にも関連しています。

ということです。


そして、ChatGPTが作り出したジュリア集合がこちらです。



以下は、pythonコードです。

import numpy as np
import matplotlib.pyplot as plt

def julia_set(width, height, x_min, x_max, y_min, y_max, c, max_iter):
    x = np.linspace(x_min, x_max, width)
    y = np.linspace(y_min, y_max, height)
    X, Y = np.meshgrid(x, y)
    Z = X + 1j * Y
    img = np.zeros(Z.shape, dtype=int)

    for i in range(max_iter):
        mask = np.abs(Z) < 1000
        Z[mask] = Z[mask] ** 2 + c
        img += mask

    return img

# パラメータ設定
width, height = 800, 800
x_min, x_max = -2, 2
y_min, y_max = -2, 2
c = -0.8 + 0.156j
max_iter = 256

# ジュリア集合の計算
img = julia_set(width, height, x_min, x_max, y_min, y_max, c, max_iter)

# 描画
plt.imshow(img, extent=(x_min, x_max, y_min, y_max), cmap='hot')
plt.axis('off')  # 軸の表示をオフにする
plt.savefig('julia_set.png', bbox_inches='tight', pad_inches=0)
plt.show()

パラメータ設定を変更すると、また面白い図が出てきます。


# パラメータ設定
width, height = 800, 800
x_min, x_max = -1.6, 1.6
y_min, y_max = -1.6, 1.6
c = -0.4 + 0.6j
max_iter = 256




# パラメータ設定
width, height = 800, 800
x_min, x_max = -2, 2
y_min, y_max = -2, 2
c = -0.7269 + 0.1889j
max_iter = 512





面白くて、楽しい形です。

これらジュリア集合の図形の集合として表現されるのがマンデルブロ集合なのだそうです。
確かに、最初に載せたマンデルブロ集合の図をみてみると、ジュリア集合の図が集まっているように思えます。
むづかしいですが、図が気に入ればそれでいいです。