In [1]:
# https://matplotlib.org/stable/gallery/mplot3d/lorenz_attractor.html
import matplotlib.pyplot as plt;import numpy as np; import apple
In [2]:
# s=10, r=28, b=2.667
lorenz=apple.jit('''
{ s ← 10; r ← 28; b ← 8%3
; ∇ ← λ(x,y,z). (s*(y-x),r*x-y-x*z,x*y-b*z)
; sp ← λ(x0,y0,z0).λ(x1,y1,z1). (x0+x1,y0+y1,z0+z1)
; ms ← λr.λ(x,y,z). (r*x,r*y,r*z)
; gen. (0,1,1.05) [sp x (ms 0.01 (∇x))] 10000
}
''')
In [3]:
def r3(x):
p1=np.vectorize(lambda x: x[0])
p2=np.vectorize(lambda x: x[1])
p3=np.vectorize(lambda x: x[2])
return np.stack([p1(x),p2(x),p3(x)])
In [4]:
xyzs=r3(lorenz())
In [13]:
ax = plt.figure().add_subplot(projection='3d')
ax.plot(*xyzs, lw=0.5)
ax.set_title("Lorenz Attractor")
plt.show()