2

我有一個朱莉婭代碼:動畫解決的ODE在茱莉亞

using DifferentialEquations 
using Plots 
using ParameterizedFunctions 
plotly() 
lorenz = @ode_def Lorenz begin 
    dx = σ*(y-x) 
    dy = ρ*x-y-x*z 
    dz = x*y-β*z 
end σ = 10. β = 8./3. ρ => 28. 
u0 = [1., 5., 10.] 
tspan = (0., 2.) 
prob = ODEProblem(lorenz, u0, tspan) 
sol = solve(prob,save_timeseries=true) 
plot(sol,vars=(:x,:y,:z)) 

導致: next plot
我怎麼能動畫這個情節,使得它的工作無論是從REPL和jupyter?

回答

2

對於DifferentialEquations.jl,有一個內置的動畫函數可以處理這個問題。不幸的是,我意識到我忘了把它放在最後的版本。當它的發佈,語法會(簡化你的代碼一點點):

using DifferentialEquations 
using Plots 
using ParameterizedFunctions 
pyplot() 
lorenz = @ode_def Lorenz begin 
    dx = σ*(y-x) 
    dy = ρ*x-y-x*z 
    dz = x*y-β*z 
end σ = 10. β = 8./3. ρ => 28. 
u0 = [1., 5., 10.] 
tspan = (0., 2.) 
prob = ODEProblem(lorenz, u0, tspan) 
sol = solve(prob) 
animate(sol,vars=(:x,:y,:z),xlims=(-20,20),ylims=(-15,20),zlims=(10,40)) 

有幾件事情:animate可以採取任何正常的情節命令。但是,它在每一幀都從開始到第i階段繪製,這意味着您可能需要手動設置軸以使它們不轉移。另外需要注意的是,我將後端切換到PyPlot。 Plotly後端無法做動畫。也許PlotlyJS可以嗎? The animation function is documented here

使用該命令將是迄今爲止最簡單的方法,但您可以使用integrator interface「更手動」執行此操作。基本上,你可以使用這個繪製每個步驟的時間間隔,最後到達相同的地方。你必須使用Plots.jl的animation interface

編輯:如果你Pkg.update()這現在應該工作。