2015-04-28 70 views
2

在Julia中定义回调函数或函数句柄的标准方法是什么?Julia中的函数句柄

假设我定义

function myFun(a, b, c, d) 
a - 3* b - c * d # The return value 
end 

我的目标是解决B = 1,C = 2,d = 3,并通过作为myFun的一个函数。 喜欢的东西:

newFun2(x) = myFun(x, 1 ,2, 3) 
myReceiver(myFun2) 
+2

...应该工作得很好。有什么问题? –

+0

问题是,当我通过定义上述方式的目标的函数句柄到解算器(NLOpt)以最小化目标时,我收到像myFun2这样的错误没有匹配我的用法的方法.. – user25004

+0

您是否拼写错'newFun2' ? –

回答

4

按照documentation,为NLOpt目标函数应该是这样的形式:

function f(x::Vector, grad::Vector): 
    if length(grad) > 0: 
     ...set grad to gradient, in-place... 
    return ...value of f(x)... 
end 

因此,该代码将需要看起来像:

function myFun(a, b, c, d, grad) 
    a - 3* b - c * d # The return value 
end 

newFun2(x, grad) = myFun(x, 1 , 2, 3, grad) 

myFun()将不得不计算grad矢量的值以及返回e目标函数值,如果它是成功地使用myFun()需要写入grad的派生信息的优化算法。