Для 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. Плоский бэкэнд не может делать анимации. Может быть, PlotlyJS может? The animation function is documented here.
Использование этой команды будет самым простым способом, но вы можете сделать это «более вручную», используя integrator interface. По сути, вы можете просто построить интервал каждого шага, используя это и в конце концов попасть в одно и то же место. Вам нужно будет использовать Plots.jl's animation interface.
Редактировать: Если вы Pkg.update()
, это должно работать.