美しいのか奇妙なのか・・・マンデルブロ集合を可視化した図【Python×matplotlib×ChatGPT】
さて、こんばんわ!今回もPythonで図を描画したいと思います。
前回はまるっこい三角形や四角形を描画しました。
こんな図です。
今回は趣を変えて、マンデルブロ集合です。
マンデルブロ集合、ご存知ですか?私は知りませんでした。
なにやら数学が絡んでいて、ちゃんとした数式があるのですが、私には理解できません。
ということで割り切って、図、のみに着目します。
さて、マンデルブロ集合、こんな図です。
眩しい・・・こんな図があるのですね。
Pythonのコードはこちらです。ChatGPTから情報を得ました。
import numpy as np import matplotlib.pyplot as plt def mandelbrot(c, max_iter): z = c for i in range(max_iter): if abs(z) > 2: return i z = z * z + c return max_iter def create_mandelbrot(width, height, real1, real2, imag1, imag2, max_iter): image = np.zeros((height, width)) for x in range(width): for y in range(height): zx = np.interp(x, [0, width], [real1, real2]) zy = np.interp(y, [0, height], [imag1, imag2]) c = zx + zy * 1j color = mandelbrot(c, max_iter) image[y, x] = color return image def plot_mandelbrot(image): plt.figure(figsize=(8, 8)) plt.imshow(image, cmap='hot', extent=[-1.5, -1.3, -0.1, 0.1]) plt.axis('off') plt.show() def main(): width = 512 height = 512 real1 = -1.5 # ズームインしたい範囲の左端の実部 real2 = -1.3 # ズームインしたい範囲の右端の実部 imag1 = -0.1 # ズームインしたい範囲の下端の虚部 imag2 = 0.1 # ズームインしたい範囲の上端の虚部 max_iter = 500 image = create_mandelbrot(width, height, real1, real2, imag1, imag2, max_iter) plot_mandelbrot(image) if __name__ == '__main__': main()
ここで、マンデルブロ集合の特徴を、ChatGPTに教えてもらいました。
マンデルブロ集合は非常に複雑で美しい幾何学的なパターンを持つことがあります。
可視化には、プログラミングや数値計算の手法が一般的に使用されます。
座標やズームレベルを変更することで、異なる部分を拡大したり、興味深い規則正しいパターンを見つけたりすることができます。
数学的に興味深く、美しい視覚表現が可能になります。
なるほど。
ということで、座標やズームレベルを変更してみました。
# 座標1
x_c1 = -0.743643135
y_c1 = 0.131825963
zoom1 = 0.000014628
max_iter1 = 1000
かなりダイナミックです。
# 座標2
x_c2 = -0.8
y_c2 = 0.156
zoom2 = 0.003
max_iter2 = 1000
なんかかっこいい!と個人的には思いました。
すごいです。
プログラミングでこんな図が描けるのですね。
こうやって色々ためして、自分のお気に入りの図を持つのも良さそうです。