ドキュメンテーション

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

fminbnd

固定区間における 1 変数関数の最小値を求める

説明

fminbnd は以下で指定される問題の最小値を見つける 1 次元の最小化関数です。

minxf(x) such that x1<x<x2.

x、x1、x2 は有限スカラーです。f(x) はスカラーを返す関数です。

x = fminbnd(fun,x1,x2) は、区間 x1 < x < x2 において、fun に記述されたスカラー値関数の局所的最小値 x を返します。

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

x = fminbnd(problem) は、problem の最小値を求めます。problem は構造体です。

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

[x,fval] = fminbnd(___) は、すべての入力引数に対して、解 x で計算された目的関数 fun の値を返します。

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

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

すべて折りたたむ

関数 sin(x) が範囲 0<x<2π で最小値を取る点を求めます。

fun = @sin;
x1 = 0;
x2 = 2*pi;
x = fminbnd(fun,x1,x2)
x = 4.7124

精度を表示する場合、これは正しい値 x=3π/2 と同一です。

3*pi/2
ans = 4.7124

別の関数ファイルで指定した関数を最小化します。関数は点 x を受け入れて、x で目的関数の値を表す実数スカラーを返します。

次の関数をファイルとして記述し、MATLAB® パス上の scalarobjective.m としてファイルを保存します。

function f = scalarobjective(x)
f = 0;
for k = -10:10
    f = f + (k+1)^2*cos(k*x)*exp(-k^2/2);
end

区間 1 <= x <= 3 で scalarobjective を最小化する x を求めます。

x = fminbnd(@scalarobjective,1,3)
x =

    2.0061

追加のパラメーターがある場合、関数を最小化します。関数 sin(x-a) は、パラメーター a の値に依存する最小点をもちます。パラメーター a の値が含まれる x の無名関数を作成します。この関数を区間 0<x<2π で最小化します。

a = 9/7;
fun = @(x)sin(x-a);
x = fminbnd(fun,1,2*pi)
x = 5.9981

これは正解です。理論値は次のとおりです。

3*pi/2 + 9/7
ans = 5.9981

追加のパラメーターを含める場合の詳細については、関数のパラメーター化 (MATLAB)を参照してください。

fminbnd が、0<x<2π の関数 sin(x) の最小化に使用するステップを監視します。

fun = @sin;
x1 = 0;
x2 = 2*pi;
options = optimset('Display','iter');
x = fminbnd(fun,x1,x2,options)
 
 Func-count     x          f(x)         Procedure
    1        2.39996      0.67549        initial
    2        3.88322     -0.67549        golden
    3        4.79993    -0.996171        golden
    4        5.08984    -0.929607        parabolic
    5        4.70582    -0.999978        parabolic
    6         4.7118           -1        parabolic
    7        4.71239           -1        parabolic
    8        4.71236           -1        parabolic
    9        4.71242           -1        parabolic
 
Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 
x = 4.7124

sin(x) の最小値の位置と 0<x<2π の最小値を求めます。

fun = @sin;
[x,fval] = fminbnd(fun,1,2*pi)
x = 4.7124
fval = -1.0000

すべての出力を要求し、fminbnd 解法プロセスに関するすべての情報を返します。また、プロット関数を使用して解法プロセスを監視します。

fun = @sin;
x1 = 0;
x2 = 2*pi;
options = optimset('PlotFcns',@optimplotfval);
[x,fval,exitflag,output] = fminbnd(fun,x1,x2,options)

x = 4.7124
fval = -1.0000
exitflag = 1
output = struct with fields:
    iterations: 8
     funcCount: 9
     algorithm: 'golden section search, parabolic interpolation'
       message: 'Optimization terminated:...'

入力引数

すべて折りたたむ

最小化する関数。関数ハンドルまたは関数名として指定されます。fun は、実数スカラー x を受け、実数スカラー f (x で評価される目的関数) を返す関数です。

fun をファイルの関数ハンドルとして指定します。

x = fminbnd(@myfun,x1,x2)

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

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

fun は、無名関数の関数ハンドルとして指定することもできます。

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

例: fun = @(x)-x*exp(-3*x)

データ型: char | function_handle | string

下限。有限実数スカラーとして指定します。

例: x1 = -3

データ型: double

上限。有限実数スカラーとして指定します。

例: x2 = 5

データ型: double

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

Display

表示レベル (反復表示を参照):

  • 'notify' (既定の設定) — 関数が収束しない場合にのみ出力を表示する。

  • 'off' または 'none' — 出力を表示しない。

  • 'iter' — 各反復の出力を表示する。

  • 'final' — 最終出力のみを表示する。

FunValCheck

目的関数値が正しいかどうかチェックします。既定値 'off' により、目的関数が complex または NaN の値を返す場合に fminbnd は継続できます。'on' に設定すると、目的関数が complex または NaN の値を返すとエラーがスローされます。

MaxFunEvals

可能な関数評価の最大回数 (正の整数)。既定値は 500 です。詳細は、許容誤差と停止条件反復と関数計算回数を参照してください。

MaxIter

可能な反復の最大数 (正の整数)。既定値は 500 です。詳細は、許容誤差と停止条件反復と関数計算回数を参照してください。

OutputFcn

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

PlotFcns

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

  • @optimplotx — 現在の点をプロット

  • @optimplotfunccount — 関数計算をプロット

  • @optimplotfval — 関数値をプロット

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

TolX

x に関する許容誤差 (正のスカラー)。既定値は 1e-4 です。詳細は、許容誤差と停止条件を参照してください。

例: options = optimset('Display','iter')

データ型: struct

次のフィールドをもつ構造体として指定される問題構造体です。

フィールド名エントリ

objective

目的関数

x1

左の端点

x2

右の端点

solver

'fminbnd'

options

optimset などによって返されるオプション構造体

problem 構造体を取得する最も簡単な方法は、最適化アプリから問題をエクスポートすることです。

データ型: struct

出力引数

すべて折りたたむ

解。実数スカラー値として返されます。通常、exitflag が正の場合、x は問題に対する局所的な解になります。解の質に関する詳細は、ソルバーが成功する場合 を参照してください。

解での目的関数値。実数として返されます。一般的に、fval = fun(x) になります。

fminbnd の停止理由。整数として返されます。

1

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

0

反復回数が options.MaxIter を超過、または関数評価の回数が options.MaxFunEvals を超過しています。

-1

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

-2

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

最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。

iterations

実行した反復回数

funcCount

関数評価の回数

algorithm

'golden section search, parabolic interpolation'

message

終了メッセージ

制限

  • 最小化される関数は連続でなければなりません。

  • fminbnd は局所解のみを出力する可能性があります。

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

アルゴリズム

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. Englewood Cliffs, NJ: Prentice Hall, 1976.

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

拡張機能

R2006a より前に導入