我試圖創建一個小函數來定義哈密爾頓流,如果輸入哈密爾頓函數組成的函數。例如。我想定義Julia - 定義輸出函數的函數
function makeThedH(f::Function,g::Function)
dH1(s,u) = cos(u[3]).*f(u[1],u[2]);
dH2(s,u) = sin(u[3]).*f(u[1],u[2]);
dH3(s,u) = dot([1,2] , g(u[1],u[2])).*f(u[1],u[2]).^0.5 ;
dH4(s,u) = dot([1,2] , g(u[1],u[2]));
dH(s,u) = [dH1(s,u), dH2(s,u), dH3(s,u),dH4(s,u)];
return dH;
end
給出一個函數dH,我可以在ODE求解器中使用。 (忘記該系統是否定義良好或任何其他)。
似乎無法找到任何輸出其他功能的功能文檔。謝謝你的任何幫助〜
編輯:它確實返回一個dH,但我似乎無法使用它像一個正常的功能,例如, dH(1,[1,2,3,4])只是返回對象(我認爲?)dH,但不計算任何東西。
編輯:感謝幫助我意識到我應該把輸入類型,我想f,g是功能句柄。
你的代碼中包含邏輯錯誤,似乎並沒有在其定義在所有使用's'參數,但在其他方面有效的代碼它輸出一個「函數」(一個閉包,確切地說,這是一個lambda,可以正常調用)。例如。你可以把它叫做'dh = makeThedH(1,2)'然後'dh(1,[1,2,3,4])',如果你的定義中沒有錯誤'dh',那麼這個將按預期工作。你爲什麼認爲這是不正確的語法? –
感謝您輸入Tasos。它需要$ s $參數,因爲ode求解器需要它具有該輸入(即使它不依賴於它)。至於調用函數,原諒我,因爲我認爲我應該給予輸入類型。 f和g應該讀爲f :: Function,而不是g :: Function。當我呼叫dH(1,[1,2,3,4])時,它不輸出任何數字,它只是說有一個dH創建,這就是它... –