我有一个julia代码:
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工作?
答案 0 :(得分:3)
对于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()
现在应该可以使用。