ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

fminunc 制約なし最小化

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

(6-16)

この 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: 制約なし最適化ルーチンの 1 つを呼び出します。

x0 = [-1,1];    % Starting guess
options = optimoptions(@fminunc,'Algorithm','quasi-newton');
[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: 1
firstorderopt: 1.2284e-007
    algorithm: 'medium-scale: Quasi-Newton line search'
      message: [1x436 char]

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

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

変数 optionsfminunc に渡して、最適化アルゴリズムの特性を変更することができます。たとえば、以下のようにします。

x = fminunc(@objfun,x0,options);

options には終了許容誤差やアルゴリズムの選択に関する値が含まれます。関数 optimoptions を使用して options を作成します。

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

最適化アプリケーションからエクスポートして options を作成することもできます。

この例では、quasi-newton アルゴリズムを使用しました。他のオプションとしては、最適化反復段階での途中経過のコマンド ラインに表示する頻度、終了条件に対する許容量、ユーザー設定の勾配またはヤコビ行列のどちらを使用するか、最大反復回数または関数評価が含まれます。他のオプションや詳細は、optimoptions、個々の最適化関数、最適化オプション リファレンス を参照してください。

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