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

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

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

線形等式制約を使用した最小化

fmincon の信頼領域 Reflective 法は、他の制約が存在しない場合に線形等式制約を取り扱うことができます。次の式を解くとします。

目的関数がコード化されている関数 brownfgh.m では、n = 1000 になります。つまり、100 の方程式をもつ Aeq の場合、Aeq・x = beq となります (したがって、Aeq は 100 行 1000 列の行列です)。

手順 1: 目的関数、目的関数の勾配、およびスパース三重対角ヘッセ行列を計算するファイル brownfgh.m を記述します。

このファイルは長すぎるため、ここでは記述しません。次のコマンドによりコードを確認することができます。

type brownfgh

brownfgh が勾配およびヘッセ行列値を目的関数と同様に計算するため、optimoptions を使用して GradObj および Hessian オプションを使用する brownfgh でこの情報が使用可能であることを示す必要があります。

スパース行列 Aeq およびベクトル beq はファイル browneq.mat で使用可能です。

load browneq

線形制約システムは 1000 行 1000 列であり、構造化されていないスパース性をもっており、(スパース構造を確認するには spy(Aeq) を使用してください)、条件数はさほど悪くありません。

condest(Aeq*Aeq')
ans =
  2.9310e+006

手順 2: 開始点 xstart を使って非線形最小化ルーチンを呼び出します。

fun = @brownfgh;
load browneq          % Get Aeq and beq, the linear equalities
n = 1000;
xstart = -ones(n,1); xstart(2:2:n) = 1;
options = optimoptions('fmincon','GradObj','on','Hessian','user-supplied',...
    'Algorithm','trust-region-reflective');
[x,fval,exitflag,output] = ...
   fmincon(fun,xstart,[],[],Aeq,beq,[],[],[],options); 

fmincon は、以下の終了メッセージを表示します。

Local minimum possible.

fmincon stopped because the final change in function value relative to 
its initial value is less than the default value of the function tolerance.

また、exitflag の値 3 は、目的関数の値が許容誤差 TolFun より小さく変動したためアルゴリズムが停止したことを示します。最終関数値は fval によって与えられます。

exitflag,fval,output

exitflag =
     3

fval =
  205.9313

output = 
         iterations: 22
          funcCount: 23
       cgiterations: 30
      firstorderopt: 0.0027
          algorithm: 'trust-region-reflective'
            message: [1x471 char]
    constrviolation: 2.2249e-13

線形等式は x で満たされます。

norm(Aeq*x-beq)

ans =
    1.1938e-12
この情報は役に立ちましたか?