在Julia中为ODE动画解决方案

时间:2017-02-14 00:00:08

标签: julia visualization ode plots.jl differentialequations.jl

我有一个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工作?

1 个答案:

答案 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()现在应该可以使用。