Кусочно-дифференциальное уравнение с использованием Юлии

Я новичок в Юлии, я хотел бы решить эту систему

\frac{dx}{dt} = k1y \ \frac{dy}{dt} = k2y+I

где k1 и k2 - постоянные параметры. однако, I=0, когда y,0 или Ky в противном случае, где k является постоянным значением.

Я следовал учебному пособию по ODE в вопросе, как можно решить это кусочно-дифференциальное уравнение в DifferentialEquations.jl, однако я не нашел ничего о кусочно-зависимых функциях

Заранее спасибо

Франциско

1 ответ

Ответил на перекрестный пост ОП на Джулии Дискурс; здесь скопировано для полноты.

Вот (слегка) интересный пример $x''+x'+x=\pm p_1$, где знак $p_1$ изменяется, когда встречающийся многообразие встречается при $x=p_2$. Чтобы сделать вещи более интересными, рассмотрим гистерезис в переключающем многообразии, так что $p_2\mapsto -p_2$ при каждом пересечении переключающего многообразия.

Код относительно прост; StaticArrays/SVector/MVector можно игнорировать, они только для скорости.

using OrdinaryDiffEq
using StaticArrays

f(x, p, t) = SVector(x[2], -x[2]-x[1]+p[1])  # x'' + x' + x = ±p₁
h(u, t, integrator) = u[1]-integrator.p[2]  # switching surface x = ±p₂;
g(integrator) = (integrator.p .= -integrator.p)  # impact map (p₁, p₂) = -(p₁, p₂)

prob = ODEProblem(f,  # RHS
                  SVector(0.0, 1.0),  # initial value
                  (0.0, 100.0),  # time interval
                  MVector(1.0, 1.0))  # parameters
cb = ContinuousCallback(h, g)
sol = solve(prob, Vern6(), callback=cb, dtmax=0.1)

Тогда сюжет sol[2,:] против sol[1,:] видеть фазовую плоскость - хороший негладкий предельный цикл в этом случае.

Обратите внимание, что если вы попытаетесь использовать интерполяцию полученного решения (т.е. sol(t)Вы должны быть очень осторожны в отношении точек, которые имеют прерывистую производную, так как интерполант идет немного не так. Вот почему я использовал dtmax=0.1 чтобы получить более плавный вывод решения в этом случае. (Возможно, я тоже не использую наиболее подходящий интегратор, но это тот, который я использовал в предыдущем фрагменте кода, который я скопировал и вставил.)

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