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

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

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 Ответ

0 голосов
/ 28 октября 2018

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, так что вы можете изменять масштаб по своему желанию. Если вы используете Juno, вы можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...