juliaでjulia集合を作成した。ついでにmandelbrot集合も。配列系の演算子(.など)の勉強になった
環境
- julia: 1.4.1
- Plots: 1.5.9
mantelbrot集合
として漸化式をとく
cは複素数なので実数a,bより以下のように表せる
このとき となるcの集まりをmantelbrot集合という
zを実数(x,y)からなるとして表現すると以下のように計算できる
より実部と虚部を分ける
実装
虚部を使用して計算
- パッケージと関数
# install package
using Pkg
Pkg.add("Plots")
using Plots
function mandelbrot(c, n=2000)
z = zero(c)
for i = 1:n
z = z^2 + c
abs2(z) > 4 && return i
end
return n
end
- plot
# plot
x = range(-2, 1; length=300)
y = range(-1.5, 1.5; length=300)
c = x' .+ y * im
r = mandelbrot.(c, 300)
heatmap(x, y, log10.(r),
colorbar=false, size=(300, 300), color=reverse(cgrad(:jet1)))

- アニメーション
# 始点
xs = -1.45
ys = 0
t = range(0.01, 4, length=200)
ss = @. exp(-2*t)
anim = @animate for s in ss
x = range(xs-s, xs+s, length=300)
y = range(ys-s, ys+s, length=300)
c = x' .+ y * im
r = mandelbrot.(c, 300)
# title
s = @sprintf "x=%.3f~%.3f, y=%.3f~%.3f" xs-s xs+s ys-s ys+s;
plot(x, y,label=s, size=(250,250))
heatmap!(x, y, log.(r),
colorbar=false, size=(300, 300), color=reverse(cgrad(:jet1)))
end
gif(anim, fps=40, "mandelbrot.gif")

julia集合
mandelbrotと同じ漸化式を用いる。初期値と変化させる値が異なる
の(a,b)を変化させる
となるの集まりをjulia集合という