3

我有一个朱莉娅代码:

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))

这导致: 下一个情节
我如何为这个情节制作动画,使其可以从 REPL 和 jupyter 中工作?

4

1 回答 1

4

对于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可以采用任何正常的绘图命令。但是,它在从开始到第ith 步绘制的每一帧,这意味着您可能需要手动设置轴以使它们不会移动。需要注意的另一件事是我将后端切换到 PyPlot。Plotly 后端不能做动画。也许 PlotlyJS 可以?动画功能在此处记录

到目前为止,使用该命令将是最简单的方法,但您可以使用积分器界面“更手动地”执行此操作。本质上,您可以使用它绘制每个步骤间隔并最终到达相同的位置。您必须使用 Plots.jl 的动画界面

编辑:如果你Pkg.update()现在应该工作。

于 2017-02-14T03:50:36.470 回答