ローレンツアトラクタは微分方程式の古典的なエントリケースであり、画像も非常に認識されます。どの言語でも、微分方程式を解くパッケージはどれもローレンツを解くのが好きです。
その方程式は
dxdt =σ(y − x)dydt = x(ρ− z)− ydzdt = xy −βz \ begin {aligned} \ frac {\ text dx} {\ text dt}&= \ sigma(yx)\\ \ frac {\ text dy} {\ text dt}&= x(\ rho-z)-y \\ \ frac {\ text dz} {\ text dt}&= xy- \ beta z \ end {aligned}d tdx _d td yd tdz _。=σ (y−x )=x (ρ−と)−と=xy _−βz _
ジュリア関数として書き直してください
function lorenz!(du,u,p,t)
σ,ρ,β = p
du[1] = σ*(u[2]-u[1])
du[2] = u[1]*(ρ-u[3]) - u[2]
du[3] = u[1]*u[2] - β*u[3]
end
初期値を設定するu0u_0u0およびパラメータpppはに設定されます
u0 = [1.0,0.0,0.0]
p = (10,28,8/3)
あなたと行く
using DifferentialEquations #导入微分方程包
tspan = (0.0,100.0)
prob = ODEProblem(lorenz!,u0,tspan,p)
sol = solve(prob)
お絵かき
using Plots; gr()
plot(sol,vars=(1,2,3))
savefig("ode_4.png")
もちろん、この画像では実際には「アンチエイリアシング」がオンになっています。sol
結果自体は個別の量のセットであるため、閉じdenseplot
た後、次のように表示されます。
plot(sol,vars=(1,2,3),denseplot=false)
savefig("ode_5.png")
ParameterizedFunctions.jl
非常に便利なマクロがで提供されておりode_def
、パラメトリック形式でローレンツ方程式をより直感的に記述できます。
L = @ode_def Lorentz begin
dx = σ*(y-x)
dy = x*(ρ -z)- y
dz = x*y -β*z
end σ ρ β
prob = ODEProblem(L,u0,tspan,p)
sol = solve(prob)
plot(sol,vars=(1,2,3))