我试图创建一个小函数来定义哈密尔顿流,如果输入哈密尔顿函数组成的函数。例如。我想定义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创建,这就是它... –