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

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

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

fminsearch

導関数を使用しない方法を使って制約なし多変数関数の最小値を探索する

以下で指定された問題の最小値を見つけます。

ここで、f(x) はスカラーを返す関数です。

x はベクトルまたは行列です。「行列引数」を参照してください。

構文

x = fminsearch(fun,x0)
x = fminsearch(fun,x0,options)
x = fminsearch(problem)
[x,fval] = fminsearch(...)
[x,fval,exitflag] = fminsearch(...)
[x,fval,exitflag,output] = fminsearch(...)

説明

fminsearch は複数変数のスカラー関数の最小値を初期推定値を使って探索します。通常、これを制約なし非線形最適化と呼びます。

x = fminsearch(fun,x0) は、x0 を開始値として fun に記述する関数の局所的最小値 x を返します。fun はファイルへの関数ハンドルまたは無名関数のいずれかです。x0 はスカラー、ベクトル、行列のいずれかです。

x = fminsearch(fun,x0,options) は、options 構造体に指定する最適化オプションを使って最小化します。optimset を使用してこれらのオプションを設定してください。

x = fminsearch(problem) は、problem の最小値を求めます。ここで、problem は「入力引数」に説明されている構造体です。

作業のエクスポート」で説明されているように、最適化アプリケーションから問題をエクスポートして problem 構造体を作成します。

[x,fval] = fminsearch(...) は、解 x における、目的関数 fun の値を fval に返します。

[x,fval,exitflag] = fminsearch(...) は、fminsearch の終了条件を記述する値 exitflag を返します。

[x,fval,exitflag,output] = fminsearch(...) は最適化の情報を含む構造体 output を返します。

入力引数

fminsearch に渡す引数の一般的な説明は 関数の引数 にあります。この節では、funoptionsproblem の各関数に固有な詳細を示します。

fun

最小化される関数です。fun はベクトル x を受け入れる関数ハンドルであり、x で計算した目的関数のスカラー f を返します。関数 fun はファイルの関数ハンドルとして指定することができます。

x = fminsearch(@myfun,x0)

ここで myfun は次のような MATLAB® 関数です。

function f = myfun(x)
f = ...            % Compute function value at x

fun は、以下のように無名関数の関数ハンドルにもなります。

x = fminsearch(@(x)norm(x)^2,x0,A,b);

options

オプションoptions の値の関数固有の詳細を示します。

problem

objective

目的関数

x0

x の初期点

solver

'fminsearch'

options

optimsetで作成される options 構造体

出力引数

fminsearch が返す引数の一般的な説明は 関数の引数 にあります。この節では、exitflagoutput の各関数に固有な詳細を示します。

exitflag

アルゴリズムが停止した理由を示す整数。以下の表は exitflag の値とそれに対応したアルゴリズムが終了した理由を示します。

1

関数が解 x に収束したことを示します。

0

反復回数が options.MaxIter を超えた、または関数評価の回数が options.MaxFunEvals を超えたことを示します。

-1

アルゴリズムが出力関数により停止したことを示します。

output

最適化に関する情報を含む構造体。構造体のフィールドは以下のようになります。

iterations

反復回数

funcCount

関数評価の回数

algorithm

'Nelder-Mead simplex direct search'

message

終了メッセージ

オプション

fminsearch により使用される最適化オプションです。options 構造体 options のこれらのフィールドの値を設定または変更するために、optimset が使用できます。詳細は 最適化オプション リファレンス を参照してください。

Display

表示レベル:

  • 'off' または 'none' は出力を表示しません。

  • 'iter' は各反復の出力を表示します。

  • 'notify' が収束しない場合に出力を表示します。

  • 'final' (既定の設定) は、最終出力のみ表示します。

FunValCheck

目的関数値が有効かどうかをチェックします。'on' は、目的関数が complexInf、または NaN である値を返すと、エラーを表示します。既定の 'off' ではエラーを表示しません。

MaxFunEvals

可能な関数評価の最大回数 (正の整数)。既定値は 200*numberOfVariables です。

MaxIter

可能な反復の最大数 (正の整数)。既定値は 200*numberOfVariables です。

OutputFcn

各反復で最適化関数が呼び出すユーザー定義の関数を 1 つか複数指定します (関数ハンドルか関数ハンドルのセル配列として)。既定の設定はなし ([]) です。「出力関数」を参照してください。

PlotFcns

アルゴリズムが実行中のさまざまな進行状況の測定値をプロットします。事前定義されたプロットから選択するか、独自のコードを記述してください。関数ハンドルか、関数ハンドルのセル配列を渡します。既定の設定はなし ([]) です。

  • @optimplotx は現在の点をプロットします。

  • @optimplotfunccount は関数計算をプロットします。

  • @optimplotfval は関数値をプロットします。

カスタム プロット関数の記述については、「プロット関数」を参照してください。

TolFun

関数値に関する終了許容誤差 (正のスカラー)。既定値は 1e-4 です。

TolX

x に関する許容誤差 (正のスカラー)。既定値は 1e-4 です。

例 1:Rosenbrock 関数を fminsearch で最小化

多次元最小化の古典的なテスト例は Rosenbrock 関数 banana です。

最小値は (1,1) で値 0 をもちます。従来の初期点は (-1.2,1) です。以下に示す無名関数は関数を定義し、banana という名前の関数ハンドルを出力します。

banana = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;

fminsearch に関数ハンドルを渡します。

[x,fval,exitflag] = fminsearch(banana,[-1.2, 1])

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

x =
    1.0000    1.0000

fval =
    8.1777e-010

exitflag =
     1

これはゼロの近くにある最小値が [1 1] で見つかったことを示します。

例 2

パラメーター a をバナナ関数の第 2 項に追加することで、例 1 を変更することができます。

これにより最小値の位置が点 [a,a^2] に変化します。a の特定の値 (たとえば、a = sqrt(2)) に対してこの関数を最小化するには、a の値をとる 1 入力の無名関数を作成します。

a = sqrt(2);
banana = @(x)100*(x(2)-x(1)^2)^2+(a-x(1))^2;

ステートメント

[x,fval,exitflag] = fminsearch(banana, [-1.2, 1], ...
   optimset('TolX',1e-8))

は、既定の x より精度が良い最小値 [sqrt(2), 2] を求めます。結果は、次のようになります。

x =
    1.4142    2.0000

fval =
  4.2065e-018

exitflag =
     1

制限

fminsearch は微分不可能な問題を解いたり、不連続を扱ったりすることもできます。特に解析の傍で不連続が生じない場合です。fminsearch は局所的な解のみを出力する可能性があります。

fminsearch は実数上でのみ最小化します。すなわち、x は実数のみで構成され、f(x) は実数のみを返さなければなりません。 x に複素数変数があるときには、これらを実数部と虚数部に分ける必要があります。

メモ:

二乗和すなわち次の形式の問題を解くために fminsearch は選択しないでください。

の形式である問題を解く場合に推奨される選択肢ではありません。代わりに、lsqnonlin を使用してください。この関数はこの形式の問題の最適化を行う関数です。

詳細

すべて展開する

アルゴリズム

fminsearch は、[1] のシンプレックス探索法を使用します。これは fminunc のように数値的または解析的な勾配を使用しない直接探索法です。このアルゴリズムは、fminsearch アルゴリズム で詳しく説明します。

fminsearch は一般的に 2 次を超える問題に対して効率が fminunc より劣ります。しかし問題の不連続性が強い場合、fminsearch はよりロバストになります。

参考文献

[1] Lagarias, J. C., J. A. Reeds, M. H. Wright, and P. E. Wright, “Convergence Properties of the Nelder-Mead Simplex Method in Low Dimensions,” SIAM Journal of Optimization, Vol. 9, Number 1, pp. 112–147, 1998.

参考

| | |

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