Юлия Плотс; Как я могу увеличить количество образцов / точек данных?
При решении дифференциальных уравнений и построении графиков результатов, как я могу увеличить количество отображаемых точек данных? я имею
using DifferentialEquations
using Plots
function lorenz(du,u,p,t)
du[1] = 10.0*(u[2]-u[1])
du[2] = u[1]*(28.0-u[3]) - u[2]
du[3] = u[1]*u[2] - (8/3)*u[3]
end
u0 = [5.0;0.0;0.0]
tspan = (0.0,100000.0)
prob = ODEProblem(lorenz,u0,tspan)
sol = solve(prob)
plot(sol, vars = 1, xlims = (10,100000),xscale =:log)
В частности, при использовании чего-то вроде PyPlots я могу использовать:
x = linspace(0,100000,num=10000)
где я установил num = 10000, что увеличивает количество выборок и позволяет получить более высокое разрешение точек данных для увеличения времени интегрирования.
Очевидный ответ - использовать PyPlots, но я не уверен, смогу ли я вообще использовать PyPlots с пакетом DifferentialEquations. Было бы неплохо узнать, как это делается для сюжетов. (Как в зависимости от функции, некоторые сюжеты получаются очень неровными).
1 ответ
Plots.jl
на самом деле обертка вокруг построения бэкэндов, таких как PyPlot.jl
а также GR.jl
(которые также являются обертками).
Ты можешь сделать Plots.jl
использовать PyPlot, вызывая pyplot()
при условии, что у вас есть PyPlot.jl
установлены.
using Plots
pyplot() # switch to PyPlot
plot(sol.t[2:end], sol[1,2:end], xlim =(10,100000), xscale=:log10)
Обратите внимание, что я начал со второго индекса, потому что у первого индекса t
0, что создает проблему с лог-масштабом (даже если xlim
установлено). Это использует каждую точку данных в решении. Если вы находитесь в терминале, это откроет графический интерфейс PyPlot, так что вы можете изменять масштаб по своему желанию. Если вы находитесь на Юноне, вы можете использовать gui(plot(...))
открыть окно.
Вы можете попробовать систему в произвольные моменты времени. (с DifferentialEquations
интерполант sol(t)
)
t = range(10, stop = 100000, num=10000) # to reach t=100000 you need to adjust `maxiters` accordingly in your call to `solve`
samples = sol(t) # sample using interpolator
plot(samples.t, samples.u[1,:], xscale=:log10)
Вы также можете использовать рецепт без логарифмического масштаба и с plotdensity
вариант.
plot(sol, vars=1, plotdensity=1000)
Смотрите здесь для большего количества примеров: http://docs.juliadiffeq.org/stable/basics/plot.html