Ich möchte eine generische Runge-Kutta-Step-Funktion in Julia-Sprache implementieren. In Python kann ich einfach eine Funktion als eines der Argumente übergeben, die diese RK4-Funktion als Eingabe erhält. Gibt es eine Leistungseinbuße, wenn ich das in Julia mache?Effiziente Verwendung von Funktionen als Argumente
sieht Meine Funktion wie folgt aus:
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
Wo Ps ist ein Typ Julia, die die Parameter des Modells hat, ist Vs die mehrdimensionalen Matrix der Variablen der DGL und rhs ist die rechte Seite (partielle Zeitableitungen) der ODE.
Sie eine Funktion als Argument in Julia passieren können. Was ist das Problem? –
Nur zum Kommentar von @FengyangWang hinzufügen; Funktionen als Argumente sind in v0.4 etwas langsamer, weshalb einige Leute sie vermieden haben, aber dies ist in v0.5 behoben. Relevante Github-Pull-Anforderung ist [hier] (https://github.com/JuliaLang/julia/pull/13412) –
Ja, ich hätte in meiner Frage hinzugefügt werden sollen, ob das Übergeben einer Funktion wie dieser der "richtige" Weg ist, es zu tun in Julia oder führt es zu einem langsameren Code .. – Ohm