Юлия Плотс; Как я могу увеличить количество образцов / точек данных?

При решении дифференциальных уравнений и построении графиков результатов, как я могу увеличить количество отображаемых точек данных? я имею

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

Другие вопросы по тегам