【发布时间】:2017-03-19 01:32:26
【问题描述】:
如果输入哈密顿量包含的函数,我正在尝试创建一个小函数来定义哈密顿流。例如。我想定义
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
给出可以在 ODE 求解器中使用的函数 dH。 (忘记该系统是否定义明确或其他)。
似乎找不到任何输出此类其他函数的函数的文档。谢谢大家帮忙~
编辑:它确实返回一个 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,就是这样......
标签: function closures output julia