#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. Вы хотите интерполировать решение, прежде чем применять что-то к его значениям, потому что для фактического решения системы не требовалось очень много шагов.