2016-06-26 7 views
1

줄리아 언어로 일반 Runge-Kutta 단계 함수를 구현하고 싶습니다. 파이썬에서는이 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 

가 대는 ODE의 변수의 다차원 배열이고, 우측은 우측 인 (부분 시간 도함수).

+7

예를 들어, 여기에 map 기능을위한 하나의 방법의 간단한 구현입니다. 문제가 무엇입니까? –

+1

그냥 @FengyangWang의 코멘트에 추가; v0.4에서는 인수로서의 기능이 다소 느려서 어떤 사람들은이를 피했지만, v0.5에서는이 기능이 수정되었습니다. 관련 github 끌어 오기 요청은 여기에 있습니다 (https://github.com/JuliaLang/julia/pull/13412) –

+2

네, 내 질문에이 기능을 전달하는지 여부를 "올바른"방법으로 추가해야합니다. 줄리아에서, 또는 더 느린 코드가 발생합니다 .. – Ohm

답변

6

표준적인 방법은 함수를 인수로 전달하는 것입니다. Julia 0.5부터 고차 함수를 사용하는 것이 빠릅니다.

함수를 인자로받는 많은 표준 라이브러리 함수 ("higher-order function")가 있기 때문에이 스타일은 Julia에서 관용적입니다. 당신은 줄리아의 인수로 함수를 전달할 수

julia> mymap(f, xs) = [f(x) for x in xs] 
mymap (generic function with 1 method) 

julia> mymap(sin, [0, π/2, 3π/2]) 
3-element Array{Float64,1}: 
    0.0 
    1.0 
-1.0  
관련 문제