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

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

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

非線形の等式制約と不等式制約

等式制約の可能なルーチンでは、非線形等式制約を非線形不等式制約で計算しなければなりません。線形等式では等式に関する係数として、左辺側を行列 Aeq に、右辺側をベクトル beq に渡します。

たとえば、非線形等式制約 および非線形不等式制約 x1x2 ≥ –10 がある場合、これを以下のように書き換えてください。

そして以下のように問題を解きます。

手順 1: ファイル objfun.m を記述します。

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: 非線形制約のファイル confuneq.m を記述します。

function [c, ceq] = confuneq(x)
% Nonlinear inequality constraints
c = -x(1)*x(2) - 10;
% Nonlinear equality constraints
ceq = x(1)^2 + x(2) - 1;

手順 3: 制約付き最適化ルーチンの呼び出し

x0 = [-1,1];            % Make a starting guess at the solution
options = optimoptions(@fmincon,'Algorithm','sqp');
[x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],... 
   @confuneq,options);

21 回の関数評価の後、出力される解は、次のとおりです。

x,fval
x =
   -0.7529    0.4332
fval =
    1.5093

[c,ceq] = confuneq(x) % Check the constraint values at x

c =
    -9.6739
ceq =
   5.3291e-15

ceq は制約の既定許容誤差 1.0e-006 内に収まっているため 0 とみなされ、c は目的どおりゼロ以下になっていることに注目してください。

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