ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fminunc 制約なし最小化

次の式の解の集合 [x1, x2] を求める問題を考えてみましょう。

minxf(x)=ex1(4x12+2x22+4x1x2+2x2+1).(6-15)

この 2 次元問題を解くために、関数値を戻すファイルを記述します。そして制約なし最小化ルーチン fminunc を呼び出します。

手順 1: ファイル objfun.m を記述する

このコードはツールボックスと共にリリースされています。表示するには、type objfun と入力します。

function f = objfun(x)
f = exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);

手順 2: オプションを設定する

'quasi-newton' アルゴリズムを使用するためのオプションを設定します。オプションを設定するのは、'trust-region' アルゴリズムでは目的関数に勾配を含める必要があるためです。オプションを設定しないと、使用している MATLAB® のバージョンによっては fminunc が警告が発行されることがあります。

options = optimoptions(@fminunc,'Algorithm','quasi-newton');

手順 3: オプションを使用して fminunc を呼び出す

x0 = [-1,1]; % Starting guess
[x,fval,exitflag,output] = fminunc(@objfun,x0,options);

これは以下の出力を生成します。

Local minimum found.

Optimization completed because the size of the gradient is less
than the default value of the function tolerance.

結果を表示します。

x,fval,exitflag,output

x =
    0.5000   -1.0000

fval =
  3.6609e-15

exitflag =
     1

output = 
   iterations: 8
    funcCount: 66
     stepsize: 6.3361e-07
 lssteplength: 1
firstorderopt: 1.2284e-07
    algorithm: 'quasi-newton'
      message: 'Local minimum found.…'

exitflag はアルゴリズムが収束したかどうかを示します。exitflag = 1 は局所的最小値が求まったことを意味します。exitflag の意味は関数のリファレンス ページで与えられています。

構造体 output には、最適化に関する詳細が与えられています。これは fminunc に関しては iterations に反復回数、funcCount に関数評価回数、stepsize に最後のステップ サイズ、firstorderopt に 1 次最適性の尺度 (制約なしの場合、解での勾配の無限大ノルムになります)、algorithm に使用アルゴリズム タイプ、および終了メッセージ (アルゴリズムが停止した理由) を含んだものになります。

関連する例

詳細

この情報は役に立ちましたか?