1

勾配ベクトルとヘッセ行列を提供することで、fmincon がより速く収束するのを助けようとしています。私は内点法アルゴリズムを使用していますが、そのような場合、OPTIOINS の HessFcn に割り当てられた別の関数への呼び出しを使用して Hessian を提供する必要があることに気付きました。また、ここで式 14-1 で説明されているように、fmincon のヘッセ行列はラグランジアンの 2 次導関数であることも認識しています。次の関数定義を使用して、ヘッシアンの計算中にフィッティングパラメーターとラムダにアクセスすることになっています

hessian = hessianfcn(x, lambda)

この時点から、手順を理解するのにいくつかの困難があります。私の問題には線形制約と上限と下限がありますが、ラムダ構造は空です。つまり、hessianfcn からアクセスしようとすると、次のように返されます。

lambda = 
        eqnonlin: [0x1 double]
      ineqnonlin: [0x1 double]

この問題を解決する方法はありますか?

PS私はここで与えられた指示に従っていますが、それは意図的に非線形制約をいくつかのランダムな線形制約に置き換えるまで機能し、その後再び同じ問題が発生します(空のラムダ構造)。

4

1 に答える 1

1

lambda は直接的な値ではなく、多くの情報にアクセスできる構造です。Matlab は、現在ラムダに 2 つの値があることを示しています。必要なものを選択してください

lambda.eqnonlin(1)
lambda.ineqnonlin(1)

ユーザー提供のヘシアンを使用する例を次に示します

于 2015-07-12T10:12:19.937 に答える