Джулия: примените вращение к раствору ODE

#julia #ode

Вопрос:

Я играю с модулем Julia ODE. Я решаю простое уравнение ньютоновской механики, включающее наклонную плоскость. Для удобства (потому что я сделал это, когда решил ее аналитически) Я поворачиваю свои оси так, чтобы e x следовал за плоскостью, а e y был нормален к ней. Однако при отображении решения я хотел бы повернуть его назад так, чтобы e y совпадал с направлением силы тяжести.

Теперь извлечение моих векторов положения из объекта решения не является проблемой (хотя мой метод может быть не очень идиоматичным), равно как и их построение. Но, поступая так, я теряю приятную магию, которая приходит с прямым построением решения. Есть ли способ применить мое вращение непосредственно к объекту решения, чтобы он по-прежнему вел себя как функтор с готовой интерполяцией и тому подобным?

Передавая определения своих функций, я запускаю это:

 prob = ODEProblem(pfm!, u0, tspan, (g, alpha))
cb = ContinuousCallback(condition, affect!)
sol = solve(prob, Tsit5(), reltol=1e-8, abstol=1e-8, callback=cb)
 

При построении графика сол:

Хорошая интерполяция

При получении вектора положения перед раздачей с

 pos = hcat(sol.u...)[[1, 2], :]
 

Я получаю

Без интерполяции

И не намного более существующее решение после ручного вращения с

 pos = rot_mat * hcat(sol.u...)[[1, 2], :]
 

производит

Без интерполяции, повернут

Комментарии:

1. Вы хотите интерполировать решение, прежде чем применять что-то к его значениям, потому что для фактического решения системы не требовалось очень много шагов.