Я хотел бы реализовать общую функцию шага Runge-Kutta на языке Julia. В Python я могу просто передать функцию как один из аргументов, которые эта функция RK4 получает в качестве входных данных. Есть ли штраф за исполнение, если я так делаю это в Джулии?Эффективное использование функций в качестве аргументов
Моя функция выглядит следующим образом:
function uv_rk4_step(rhs,Vs,Ps)
Vs_k1 = rhs(Vs,Ps)
Vs_k1 = Ps.dt*Vs_k1
Vs_k2 = rhs((Vs+(1/2)*Vs_k1),Ps)
Vs_k2 = Ps.dt*Vs_k2
Vs_k3 = rhs((Vs+(1/2)*Vs_k2),Ps)
Vs_k3 = Ps.dt*Vs_k3
Vs_k4 = rhs((Vs+(1/2)*Vs_k3),Ps)
Vs_k4 = Ps.dt*Vs_k4
Vs_next = Vs+(1/6)*Vs_k1+(1/3)*Vs_k2+(1/3)*Vs_k3+(1/6)*Vs_k4
end
Где Ps тип Julia, который имеет параметры модели, Vs является многомерный массив переменных ОДУ, а правая часть является правая рука (частичные производные по времени) ОДУ.
Вы можете передать функцию в качестве аргумента в Джулию. В чем проблема? –
Просто добавьте комментарий @FengyangWang; функции, поскольку аргументы несколько медленнее в v0.4, поэтому некоторые люди избегают их, но это исправлено в v0.5. Релевантный запрос на github pull [здесь] (https://github.com/JuliaLang/julia/pull/13412) –
Да, я должен был добавить в свой вопрос, является ли передача такой функции «правильным» способом в Julia, или это приводит к более медленному коду. – Ohm