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

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

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

fminbnd

固定区間上で 1 変数からなる関数の最小値を探索します。

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

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

構文

x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
x = fminbnd(problem)
[x,fval] = fminbnd(...)
[x,fval,exitflag] = fminbnd(...)
[x,fval,exitflag,output] = fminbnd(...)

説明

fminbnd は固定区間内で 1 変数からなる関数の最小値を見つけます。

x = fminbnd(fun,x1,x2) は、区間 x1 < x < x2 において、fun に記述されているスカラー値関数の局所的最小値である値 x を返します。fun はファイルへの関数ハンドルか、無名関数のいずれかです。

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

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

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

[x,fval] = fminbnd(...) は、解 x において、fun で計算された目的関数の値を返します。

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

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

入力引数

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

fun

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

x = fminbnd(@myfun,x1,x2)

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

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

fun は無名関数の関数ハンドルにもなります。

x = fminbnd(@(x)sin(x^2),x1,x2);

options

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

problem

f

目的関数

x1

左の端点

x2

右の端点

solver

'fminbnd'

options

optimsetで作成される options 構造体

出力引数

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

exitflag

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

1

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

0

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

-1

出力関数またはプロット関数によって停止したことを示します。

-2

範囲に整合性がないことを示します。つまり、x1 > x2 です。

output

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

iterations

実行した反復回数

funcCount

関数評価の回数

algorithm

使用される最適化アルゴリズム

message

終了メッセージ

オプション

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

Display

表示のレベル。'off' または 'none' は出力を表示しません。'iter' は反復ごとに出力を表示します。'final' は、最終出力のみを表示します。'notify' (既定の設定) は関数が収束しなかったときのみ出力を表示します。

FunValCheck

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

MaxFunEvals

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

MaxIter

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

OutputFcn

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

PlotFcns

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

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

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

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

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

TolX

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

次の場合 sin(x) の最小値が出力されます。

x = fminbnd(@sin,0,2*pi)
x = 
     4.7124

最小値での関数値は以下になります。

y = sin(x)
y = 
    -1.0000

関数の最小値を求めるには次のようにします。

f(x) = (x – 3)2 – 1,

(区間 (0,5)) で、まず関数ファイルを記述します。

function f = myfun(x)
f = (x-3)^2 - 1;

次に最適化ルーチンを呼び出します。

x = fminbnd(@myfun,0,5)

これにより、解を生成します。

x =
     3

最小値は以下になります。

y = myfun(x)

y =
    -1

fun がパラメタライズされる場合、問題に依存するパラメーターを得るために無名関数を使用することができます。たとえば、次の関数ファイルにより定義される目的関数 myfun を最小化したいとします。

function f = myfun(x,a)
f = (x - a)^2;

myfun が余分なパラメーター a をもつため、fminbind に直接渡すことができないことに注意してください。a = 1.5 のように a の特定の値に対して最適化するには以下のようにします。

  1. a に値を代入します。

    a = 1.5; % define parameter first
  2. a の値を得る、1 つの引数をもつ無名関数とともに fminbnd を呼び出し、2 つの引数をもつ myfun を呼び出します。

    x = fminbnd(@(x) myfun(x,a),0,1)
    
    x =
        0.9999

制限

最小化する関数は連続でなければなりません。そうでなければ、fminbnd が局所解のみを出力する可能性があります。

fminbnd は解が区間の境界上にあるとき、しばしば遅い収束を示します。そのような場合、fmincon はより高速でより正確な解を与える場合が多くあります。

fminbnd は実数変数のみ処理します。

詳細

すべて展開する

アルゴリズム

fminbnd は関数ファイルです。そのアルゴリズムは黄金分割探索と放物線内挿に基づいています。左の端点 x1 が右の端点 x2 ときわめて近接している場合を除き、fminbnd はこれらの端点での fun を計算しません。したがって、区間 x1 < x < x2 における x に対して fun を定義するだけでよいことになります。

最小値が実際に x1 または x2 で発生する場合、最小値の点に近い、区間 (x1,x2) の内部の点 xfminbnd によって返されます。この場合、最小点から x までの距離が 2*(TolX + 3*abs(x)*sqrt(eps)) を超えることはありません。アルゴリズムの詳細は [1] または [2] を参照してください。

参考文献

[1] Forsythe, G.E., M.A. Malcolm, and C.B. Moler, Computer Methods for Mathematical Computations, Prentice Hall, 1976.

[2] Brent, Richard. P., Algorithms for Minimization without Derivatives, Prentice-Hall, Englewood Cliffs, New Jersey, 1973.

参考

| | | |

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