2

Juliaでコールバック関数または関数ハンドルを定義する標準的な方法は何ですか?

定義するとします

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

私の目標は、b = 1、c = 2、d = 3 を修正し、myFun を a の関数として渡すことです。何かのようなもの:

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

1 に答える 1

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だけでなく、目的関数の値を返す必要があります。myFun()grad

于 2015-04-30T03:35:10.317 に答える