我正在尝试创建一个小函数,如果输入了构成哈密顿量的函数,则定义哈密顿流。例如,我想定义
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 Papastylianou