fmincon
制約付き非線形多変数関数の最小値を求める
構文
説明
非線形計画法ソルバーです。
以下で指定された問題の最小値を見つけます。
b および beq はベクトル、A および Aeq は行列、c(x) および ceq(x) はベクトルを返す関数、f(x) はスカラーを返す関数です。f(x)、c(x)、ceq(x) を非線形関数にすることもできます。
x、lb および ub はベクトルまたは行列として渡すことができます。行列引数を参照してください。
は、解が常に x
= fmincon(fun
,x0
,A
,b
,Aeq
,beq
,lb
,ub
)lb
≤ x
≤ ub
の範囲に存在するように、設計変数 x
に上限と下限を定義します。等式が存在しない場合には Aeq = []
と beq = []
を設定してください。x(i)
の下に非有界の場合は lb(i) = -Inf
を設定してください。x(i)
の上に非有界の場合は ub(i) = Inf
を設定してください。
メモ
問題の指定された入力範囲が矛盾する場合、fmincon
はエラーをスローします。この場合、出力 x
は x0
で、fval
は []
です。
既定の 'interior-point'
アルゴリズムの場合、fmincon
は、範囲 lb ≤ x ≤ ub
に違反する、または範囲に等しい x0
の成分を範囲領域内に設定します。'trust-region-reflective'
アルゴリズムの場合、fmincon
は違反する成分を範囲領域内に設定します。他のアルゴリズムの場合、fmincon
は違反する成分を最も近い範囲に設定します。範囲内の要素は変更されません。詳細については、反復は制約に違反する可能性ありを参照してください。
例
線形不等式制約
線形不等式制約がある場合の Rosenbrock 関数の最小値を求めます。
目的関数 fun
が Rosenbrock 関数になるように設定します。Rosenbrock 関数は、最小化が難しいことがよく知られています。これは点 (1,1) で目的関数の最小値 0 になります。詳細については、[最適化] ライブ エディター タスクまたはソルバーを使用した制約付き非線形問題を参照してください。
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
点 [-1,2]
から開始して、 を満たすように制約された最小値を求めます。形式 Ax <= b
のこの制約を A = [1,2]
および b = 1
で表します。この制約は、解が制約なしの解 (1,1) にならないことを意味するので注意してください。この点では になるためです。
x0 = [-1,2]; A = [1,2]; b = 1; x = fmincon(fun,x0,A,b)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.5022 0.2489
線形不等式制約および線形等式制約
線形不等式制約と線形等式制約の両方がある場合の Rosenbrock 関数の最小値を求めます。
目的関数 fun
が Rosenbrock 関数になるように設定します。
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
点 [0.5,0]
から開始して、 および を満たすように制約された最小値を求めます。
形式
A*x <= b
の線形不等式制約をA = [1,2]
およびb = 1
で表します。形式
Aeq*x = beq
の線形等式制約をAeq = [2,1]
およびbeq = 1
で表します。
x0 = [0.5,0]; A = [1,2]; b = 1; Aeq = [2,1]; beq = 1; x = fmincon(fun,x0,A,b,Aeq,beq)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.4149 0.1701
範囲に制約のある最小化
範囲制約が存在する場合の目的関数の最小値を求めます。
目的関数は、2 変数の単純な代数関数です。
fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
が正の値 および である領域内を探索します。
lb = [0,0]; ub = [1,2];
この問題には線形制約がないため、これらの引数を []
に設定します。
A = []; b = []; Aeq = []; beq = [];
領域中央の初期点を試します。
x0 = (lb + ub)/2;
問題を解きます。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
1.0000 2.0000
初期点を変えると異なる解が見つかる場合があります。
x0 = x0/5; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
10-6 ×
0.4000 0.4000
どの解が優れているかを判断するには、目的関数値の取得を参照してください。
非線形制約
非線形制約付きの関数の最小値を求めます。
Rosenbrock 関数が円内で最小化される点を範囲制約付きで求めます。
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
領域 、 内を探索します。
lb = [0,0.2]; ub = [0.5,0.8];
[1/3,1/3] を中心とした半径 1/3 の円内も探索します。次のコードを MATLAB® パス上にある circlecon.m
という名前のファイルにコピーします。
% Copyright 2015 The MathWorks, Inc. function [c,ceq] = circlecon(x) c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; ceq = [];
線形制約がないため、これらの引数を []
に設定します。
A = []; b = []; Aeq = []; beq = [];
すべての制約を満たす初期点を選択します。
x0 = [1/4,1/4];
問題を解きます。
nonlcon = @circlecon; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.5000 0.2500
既定ではないオプション
反復の発生時に反復を表示し、異なるアルゴリズムを使用するようにオプションを設定します。
fmincon
解法プロセスを確認するには、Display
オプションを 'iter'
に設定します。また、'sqp'
アルゴリズムを試します。このアルゴリズムは、既定の 'interior-point'
アルゴリズムより速いか正確である場合があります。
options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
単位円板 上の Rosenbrock 関数の最小値を求めます。まず、非線形制約を表す関数を作成します。これを unitdisk.m
という名前のファイルとして MATLAB® パス上に保存します。
type unitdisk.m
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];
残りの問題の仕様を作成します。その後、fmincon
を実行します。
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = @unitdisk; x0 = [0,0]; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Iter Func-count Fval Feasibility Step Length Norm of First-order step optimality 0 3 1.000000e+00 0.000e+00 1.000e+00 0.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 3 28 4.197517e-01 0.000e+00 3.430e-01 1.217e-01 6.172e+00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 7.498e-02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 40 1.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 8 43 1.161753e-01 0.000e+00 1.000e+00 1.754e-01 7.383e+00 9 46 5.901602e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.393e-02 1.252e-01 11 52 4.567454e-02 2.225e-06 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.386e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.193e-12 1.406e-05 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.7864 0.6177
反復表示の詳細については、反復表示を参照してください。
勾配を含める
目的関数に勾配評価を含めて計算の速度や信頼性を高めます。
目的関数ファイルに条件付きの出力として勾配評価を含めます。詳細については、勾配とヘッシアンを含めるを参照してください。この目的関数は Rosenbrock 関数になります。
ここで勾配は
function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end
このコードを rosenbrockwithgrad.m
という名前のファイルとして MATLAB® パス上に保存します。
目的関数の勾配を使用するオプションを作成します。
options = optimoptions('fmincon','SpecifyObjectiveGradient',true);
問題のその他の入力を作成します。その後、fmincon
を呼び出します。
fun = @rosenbrockwithgrad; x0 = [-1,2]; A = []; b = []; Aeq = []; beq = []; lb = [-2,-2]; ub = [2,2]; nonlcon = []; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 1.0000 1.0000
問題の構造体を使用する
個別の引数の代わりに問題構造体を使用して既定ではないオプション と同じ問題を解きます。
オプションおよび問題構造体を作成します。フィールド名および必要なフィールドについては、problemを参照してください。
options = optimoptions('fmincon','Display','iter','Algorithm','sqp'); problem.options = options; problem.solver = 'fmincon'; problem.objective = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; problem.x0 = [0,0];
非線形制約関数 unitdisk
は、この例の終わりに掲載しています。非線形制約関数を problem
に含めます。
problem.nonlcon = @unitdisk;
問題を解きます。
x = fmincon(problem)
Iter Func-count Fval Feasibility Step Length Norm of First-order step optimality 0 3 1.000000e+00 0.000e+00 1.000e+00 0.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 3 28 4.197517e-01 0.000e+00 3.430e-01 1.217e-01 6.172e+00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 7.498e-02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 40 1.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 8 43 1.161753e-01 0.000e+00 1.000e+00 1.754e-01 7.383e+00 9 46 5.901602e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.393e-02 1.252e-01 11 52 4.567454e-02 2.225e-06 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.386e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.193e-12 1.406e-05 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.7864 0.6177
反復表示および解は、既定ではないオプション と同じになります。
次のコードは関数 unitdisk
を作成します。
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = []; end
目的関数値の取得
fval
出力を指定して fmincon
を呼び出し、解での目的関数の値を取得します。
範囲に制約のある最小化 の例では 2 つの解が示されます。どちらの解がより適切でしょうか。fval
出力と解を要求する例を実行します。
fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1)); lb = [0,0]; ub = [1,2]; A = []; b = []; Aeq = []; beq = []; x0 = (lb + ub)/2; [x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
1.0000 2.0000
fval = -0.6667
別の初期点 x0
を使用して問題を実行します。
x0 = x0/5; [x2,fval2] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x2 = 1×2
10-6 ×
0.4000 0.4000
fval2 = 1.0000
この解は、目的関数値 fval2
= 1 をもちます。この値は、最初の値である fval
= –0.6667 より大きくなります。最初の解 x
では、目的関数の局所的最小値はより小さくなります。
追加出力を使用した解の検証
解の質を簡単に検証するには、exitflag
出力および output
出力を要求します。
Rosenbrock 関数を単位円板 上で最小化する問題を設定します。まず、非線形制約を表す関数を作成します。これを unitdisk.m
という名前のファイルとして MATLAB® パス上に保存します。
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
残りの問題の仕様を作成します。
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0];
fval
出力、exitflag
出力、および output
出力を使用して、fmincon
を呼び出します。
[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: 'interior-point' firstorderopt: 2.4373e-08 cgiterations: 4 message: 'Local minimum found that satisfies the constraints....' bestfeasible: [1x1 struct]
exitflag
値1
は、解が局所的最小値であることを示します。output
構造体は、解法プロセスに関する各種の統計を報告します。具体的には、output.iterations
は反復回数、output.funcCount
は関数評価の回数、output.constrviolation
は実行可能性を示します。
すべての出力の取得
fmincon
は、オプションで、報告された解の解析に使用できるいくつかの出力を返します。
Rosenbrock 関数を単位円板上で最小化する問題を設定します。まず、非線形制約を表す関数を作成します。これを unitdisk.m
という名前のファイルとして MATLAB® パス上に保存します。
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
残りの問題の仕様を作成します。
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0];
fmincon
の出力をすべて要求します。
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: 'interior-point' firstorderopt: 2.4373e-08 cgiterations: 4 message: 'Local minimum found that satisfies the constraints....' bestfeasible: [1x1 struct] lambda = struct with fields: eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: [0x1 double] lower: [2x1 double] upper: [2x1 double] ineqnonlin: 0.1215 grad = -0.1911 -0.1501 hessian = 497.2903 -314.5589 -314.5589 200.2392
lambda.ineqnonlin
出力は、解で非線形制約がアクティブになっていることを表し、関連付けられたラグランジュ乗数の値を示します。grad
出力は、解x
での目的関数の勾配値を示します。hessian
出力については、fmincon ヘッシアン で説明します。
入力引数
fun
— 最小化する関数
関数ハンドル | 関数名
最小化する関数。関数ハンドルまたは関数名として指定されます。fun
は、ベクトルまたは配列 x
を受け、x
で評価される目的関数の実数スカラー f
を返す関数です。
fmincon
は、目的関数および任意の非線形制約関数に x0
引数の形式で x
を渡します。たとえば、x0
が 5 行 3 列の配列の場合、fmincon
は 5 行 3 列の配列として x
を fun
に渡します。ただし、fmincon
は、x
を列ベクトル x(:)
に変換してから、線形制約行列 A
または Aeq
を x
と乗算します。
fun
をファイルの関数ハンドルとして指定します。
x = fmincon(@myfun,x0,A,b)
ここで myfun
は次のような MATLAB® 関数です。
function f = myfun(x) f = ... % Compute function value at x
fun
は、無名関数の関数ハンドルとして指定することもできます。
x = fmincon(@(x)norm(x)^2,x0,A,b);
fun
の勾配を計算することができ、"さらに" 次のように SpecifyObjectiveGradient
オプションが true
に設定されている場合、
options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
fun
は 2 番目の出力引数に勾配ベクトル g(x)
を出力しなければなりません。
ヘッセ行列を計算することもでき、"さらに" HessianFcn
オプションが optimoptions
によって 'objective'
に設定されており、"かつ" Algorithm
オプションが 'trust-region-reflective'
である場合、fun
は、3 番目の出力引数に対称行列であるヘッセ値 H(x)
を返さなければなりません。fun
はスパース ヘッシアンを返すことができます。詳細については、fminunc の信頼領域法アルゴリズムまたは fmincon の信頼領域 Reflective 法アルゴリズムのヘッシアンを参照してください。
ヘッセ行列を計算することもでき、Algorithm
オプションが 'interior-point'
に設定されている場合は、別の方法でヘッシアンを fmincon
に渡すことができます。詳細については、fmincon の内点法アルゴリズムのヘッシアンを参照してください。Symbolic Math Toolbox™ を使用して勾配およびヘッシアンを計算する例は、Symbolic Math Toolbox を使用した勾配とヘッシアンの計算 を参照してください。
interior-point
アルゴリズムと trust-region-reflective
アルゴリズムではヘッセ乗算関数を指定できます。この関数はヘッシアンを直接計算せずに、ベクトルとヘッシアンの積を返します。これによってメモリを節約できます。詳細については、ヘッセ乗算関数を参照してください。
例: fun = @(x)sin(x(1))*cos(x(2))
データ型: char
| function_handle
| string
x0
— 初期点
実数ベクトル | 実数配列
初期点。実数ベクトルまたは実数配列として指定されます。ソルバーは、x0
の要素数およびサイズを使用して、fun
が受け入れる変数の数およびサイズを決定します。
例: x0 = [1,2,3,4]
データ型: double
A
— 線形不等式制約
実数行列
実数行列として指定される線形不等式制約です。A
は M
行 N
列の行列で、M
は不等式の数、N
は変数の数 (x0
の要素数) です。大規模な問題の場合は、A
をスパース行列として渡します。
A
は M
個の線形不等式を符号化します。
A*x <= b
,
ここで、x
は N
個の変数 x(:)
の列ベクトル、b
は M
個の要素をもつ列ベクトルです。
たとえば、次の不等式を考えてみましょう。
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
次の制約を入力することによって、不等式を指定します。
A = [1,2;3,4;5,6]; b = [10;20;30];
例: x の成分の和が 1 以下であることを指定するには、A = ones(1,N)
と b = 1
を使用します。
データ型: double
b
— 線形不等式制約
実数ベクトル
実数ベクトルで指定される線形不等式制約です。b
は、行列 A
に関連する M
要素ベクトルです。b
を行ベクトルとして渡す場合、ソルバーは b
を列ベクトル b(:)
に内部的に変換します。大規模な問題の場合は、b
をスパース ベクトルとして渡します。
b
は M
個の線形不等式を符号化します。
A*x <= b
,
ここで、x
は N
個の変数 x(:)
の列ベクトル、A
は M
行 N
列の行列です。
たとえば、次の不等式を考えてみましょう。
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.
次の制約を入力することによって、不等式を指定します。
A = [1,2;3,4;5,6]; b = [10;20;30];
例: x の成分の和が 1 以下であることを指定するには、A = ones(1,N)
と b = 1
を使用します。
データ型: double
Aeq
— 線形等式制約
実数行列
実数行列として指定される線形等式制約です。Aeq
は Me
行 N
列の行列で、Me
は等式の数、N
は変数の数 (x0
の要素数) です。大規模な問題の場合は、Aeq
をスパース行列として渡します。
Aeq
は Me
個の線形等式を符号化します。
Aeq*x = beq
,
ここで、x
は N
個の変数 x(:)
の列ベクトル、beq
は Me
個の要素をもつ列ベクトルです。
たとえば、次の不等式を考えてみましょう。
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
次の制約を入力することによって、不等式を指定します。
Aeq = [1,2,3;2,4,1]; beq = [10;20];
例: x の成分の和が 1 であることを指定するには、Aeq = ones(1,N)
と beq = 1
を使用します。
データ型: double
beq
— 線形等式制約
実数ベクトル
実数ベクトルで指定される線形等式制約です。beq
は、行列 Aeq
に関連する Me
要素ベクトルです。beq
を行ベクトルとして渡す場合、ソルバーは beq
を列ベクトル beq(:)
に内部的に変換します。大規模な問題の場合は、beq
をスパース ベクトルとして渡します。
beq
は Me
個の線形等式を符号化します。
Aeq*x = beq
,
ここで、x
は N
個の変数 x(:)
の列ベクトル、Aeq
は Me
行 N
列の行列です。
たとえば、次の等式を考えてみましょう。
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.
次の制約を入力することによって、等式を指定します。
Aeq = [1,2,3;2,4,1]; beq = [10;20];
例: x の成分の和が 1 であることを指定するには、Aeq = ones(1,N)
と beq = 1
を使用します。
データ型: double
lb
— 下限
実数ベクトル | 実数配列
下限。実数ベクトルまたは実数配列として指定されます。x0
の要素数と lb
の要素数が等しい場合、lb
は次を指定します。
x(i) >= lb(i)
(すべての i
について)
numel(lb) < numel(x0)
の場合、lb
は次を指定します。
x(i) >= lb(i)
(1 <= i <= numel(lb)
)
lb
の要素数が x0
より少ない場合、ソルバーは警告を生成します。
例: x のすべての成分が正であることを指定するには、lb = zeros(size(x0))
を使用します。
データ型: double
ub
— 上限
実数ベクトル | 実数配列
実数ベクトルまたは実数配列として指定される上限です。x0
の要素数と ub
の要素数が等しい場合、ub
は次を指定します。
x(i) <= ub(i)
(すべての i
について)
numel(ub) < numel(x0)
の場合、ub
は次を指定します。
x(i) <= ub(i)
(1 <= i <= numel(ub)
)
ub
の要素数が x0
より少ない場合、ソルバーは警告を生成します。
例: x のすべての成分が 1 未満であることを指定するには、ub = ones(size(x0))
を使用します。
データ型: double
nonlcon
— 非線形制約
関数ハンドル | 関数名
非線形制約。関数ハンドルまたは関数名として指定されます。nonlcon
は、ベクトルまたは配列 x
を受け、2 つの配列 c(x)
および ceq(x)
を返す関数です。
c(x)
は、x
での非線形不等式制約の配列です。fmincon
は次の条件を満たそうとします。c
のすべてのエントリに対してc(x) <= 0
。ceq(x)
は、x
での非線形等式制約の配列です。fmincon
は次の条件を満たそうとします。ceq
のすべてのエントリに対してceq(x) = 0
。
たとえば、
x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
ここで mycon
は次のような MATLAB 関数です。
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
SpecifyConstraintGradient
オプションが true
である場合、options = optimoptions('fmincon','SpecifyConstraintGradient',true)
nonlcon
は 3 番目および 4 番目の出力引数に c(x)
の勾配 GC
および ceq(x)
の勾配 GCeq
を返さなければなりません。GC
と GCeq
はスパースか密である可能性があります。GC
か GCeq
が大きく、比較的非零の項目が少ない場合は、それらをスパース行列として使用して、interior-point
アルゴリズム内の実行時間とメモリを節約します。詳細については、非線形制約を参照してください。
データ型: char
| function_handle
| string
options
— 最適化オプション
optimoptions
の出力 | optimset
などによって返される構造体
最適化オプション。optimoptions
の出力、または optimset
などによって返される構造体として指定されます。
いくつかのオプションはすべてのアルゴリズムに適用することができ、その他のオプションは特定のアルゴリズムに関連します。詳細については、最適化オプション リファレンスを参照してください。
一部のオプションは、optimoptions
に表示されません。このようなオプションは、次の表ではイタリックで示されています。詳細については、最適化オプションの表示を参照してください。
すべてのアルゴリズム | |||||
Algorithm | 最適化アルゴリズムを選択します。
アルゴリズムの選択の詳細については、アルゴリズムの選択を参照してください。
| ||||
CheckGradients | ユーザー設定の導関数 (目的関数または制約の勾配) と有限差分による導関数とを比較します。選択肢は、
| ||||
ConstraintTolerance | 制約違反に関する許容誤差 (非負のスカラー)。既定値は
| ||||
Diagnostics | 最小化または計算する関数に関する情報を表示します。選択肢は、 | ||||
DiffMaxChange | 有限差分勾配を計算する場合に変数内で生じる最大変化量です (正のスカラー)。既定値は | ||||
DiffMinChange | 有限差分勾配を計算する場合に変数内で生じる最小変化量です (正のスカラー)。既定値は | ||||
Display | 表示レベル (反復表示を参照):
| ||||
FiniteDifferenceStepSize | 有限差分のスカラーまたはベクトルのステップ サイズ ファクター。
sign′(0) = 1 を除き sign′(x) = sign(x) です。中心有限差分法では
FiniteDifferenceStepSize はベクトルに拡張します。既定値は、前進有限差分法では sqrt(eps) 、中心有限差分法では eps^(1/3) です。
| ||||
FiniteDifferenceType | 勾配推定に使用される有限差分は
| ||||
FunValCheck | 目的関数値が正しいかどうかチェックします。既定の設定 | ||||
MaxFunctionEvaluations | 関数評価の最大許容回数 (非負の整数)。
| ||||
MaxIterations | 反復の最大許容回数 (非負の整数)。
| ||||
OptimalityTolerance | 1 次の最適性に関する終了許容誤差 (非負のスカラー)。既定値は
| ||||
OutputFcn | 各反復で最適化関数が呼び出すユーザー定義の関数を 1 つ以上指定します。関数ハンドルか、関数ハンドルの cell 配列を渡します。既定の設定はなし ( | ||||
PlotFcn | アルゴリズムが実行中のさまざまな進行状況の測定値をプロットします。事前定義されたプロットから選択するか、独自のコードを記述してください。組み込みプロット関数名、関数ハンドル、または組み込みプロット関数名か関数ハンドルの cell 配列を渡します。カスタム プロット関数の場合は、関数ハンドルを渡します。既定の設定はなし (
カスタムのプロット関数は、出力関数と同じ構文を使用します。詳細については、Optimization Toolbox の出力関数と出力関数とプロット関数の構文を参照してください。
| ||||
SpecifyConstraintGradient | ユーザーにより定義される非線形制約関数に対する勾配。既定の
| ||||
SpecifyObjectiveGradient | ユーザーが定義する目的関数の勾配。
| ||||
StepTolerance |
| ||||
TypicalX | 典型的な
| ||||
UseParallel |
| ||||
信頼領域 Reflective 法アルゴリズム | |||||
FunctionTolerance | 関数値に関する終了許容誤差 (非負のスカラー)。既定値は
| ||||
HessianFcn |
| ||||
HessianMultiplyFcn | ヘッセ乗算関数。関数ハンドルとして指定されます。大規模構造問題に対して、この関数は実際に W = hmfun(Hinfo,Y) ここで 最初の引数は目的関数 [f,g,Hinfo] = fun(x)
メモ:
詳細については、ヘッセ乗算関数を参照してください。例については、密に構造化されたヘッシアンと線形等式を使用した最小化 を参照してください。
| ||||
HessPattern | 有限差分に対するヘッシアンのスパース パターン。∂2
構造が不明であれば、 | ||||
MaxPCGIter | 前処理付き共役勾配法 (PCG) の反復の最大回数 (正のスカラー)。既定は、範囲制約付き問題の場合は | ||||
PrecondBandWidth | PCG に対する前提条件子の帯域幅の上限 (非負の整数)。既定では、対角型の前提条件を使用します (帯域幅の上限 0)。一部の問題では、帯域幅を上げることで、PCG 法の反復回数を減らします。 | ||||
SubproblemAlgorithm | 反復ステップの計算方法を定義します。既定の設定である
| ||||
TolPCG | PCG 反復に関する終了許容誤差 (正のスカラー)。既定値は | ||||
有効制約法アルゴリズム | |||||
FunctionTolerance | 関数値に関する終了許容誤差 (非負のスカラー)。既定値は
| ||||
MaxSQPIter | SQP 反復の最大数 (正の整数)。既定値は | ||||
RelLineSrchBnd | 直線探索ステップ長の相対範囲 (非負の実数スカラー値)。x の合計変位は、|Δx(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|) を満たします。このオプションはソルバーが大きすぎるステップをとった場合に、x の変位の大きさをコントロールします。既定の設定は範囲なし | ||||
RelLineSrchBndDuration |
| ||||
TolConSQP | 内部反復 SQP 制約違反に関する終了許容誤差 (正のスカラー)。既定値は | ||||
内点法アルゴリズム | |||||
BarrierParamUpdate |
このオプションは、ソルバーの速度と収束性に影響が及びますが、その影響の予測は困難です。 | ||||
EnableFeasibilityMode |
実行可能性モードは通常、 | ||||
HessianApproximation | どのように
メモ
| ||||
HessianFcn |
| ||||
HessianMultiplyFcn | ヘッシアンとベクトルの積を計算するためにユーザーが提供した関数 (ヘッセ乗算関数を参照)。関数ハンドルを渡します。 メモ:
| ||||
HonorBounds | 既定の
| ||||
InitBarrierParam | 初期境界値 (正のスカラー)。既定の | ||||
InitTrustRegionRadius | 信頼領域の初期半径です (正のスカラー)。適切にスケール化されていない問題では既定の より小さな値を選択すると役立つ場合があります。ここで n は変数の数です。 | ||||
MaxProjCGIter | 計画された共役勾配の反復回数の許容誤差 (停止条件) です。これは内部反復であり、アルゴリズムの反復数ではありません。この正の整数は | ||||
ObjectiveLimit | スカラーの許容誤差 (停止条件) です。目的関数値が | ||||
ScaleProblem |
| ||||
SubproblemAlgorithm | 反復ステップの計算方法を定義します。
| ||||
TolProjCG | 計画された共役勾配アルゴリズムの相対許容誤差 (停止条件) です。これは内部の反復に対してであり、アルゴリズムの反復に対してではありません。この正のスカラーは | ||||
TolProjCGAbs | 計画された共役勾配アルゴリズムの絶対許容誤差 (停止条件) です。これは内部の反復に対してであり、アルゴリズムの反復に対してではありません。この正のスカラーは | ||||
SQP および SQP レガシ アルゴリズム | |||||
ObjectiveLimit | スカラーの許容誤差 (停止条件) です。目的関数値が | ||||
ScaleProblem |
| ||||
単精度コード生成 | |||||
Algorithm |
| ||||
ConstraintTolerance | 制約違反に関する許容誤差 (非負のスカラー)。既定値は | ||||
FiniteDifferenceStepSize | 有限差分のスカラーまたはベクトルのステップ サイズ ファクター。
sign′(0) = 1 を除き sign′(x) = sign(x) です。中心有限差分は次のようになります。
FiniteDifferenceStepSize はベクトルに展開されます。既定値は、前進有限差分では sqrt(eps('single')) 、中心有限差分では eps('single')^(1/3) です。 | ||||
FiniteDifferenceType | 勾配推定に使用される有限差分は
| ||||
MaxFunctionEvaluations | 関数評価の最大許容回数 (非負の整数)。既定値は | ||||
MaxIterations | 反復の最大許容回数 (非負の整数)。既定値は | ||||
ObjectiveLimit | スカラーの許容誤差 (停止条件) です。目的関数値が | ||||
OptimalityTolerance | 1 次の最適性に関する終了許容誤差 (非負のスカラー)。既定値は | ||||
ScaleProblem |
| ||||
SpecifyConstraintGradient | ユーザーにより定義される非線形制約関数に対する勾配。既定の | ||||
SpecifyObjectiveGradient | ユーザーが定義する目的関数の勾配。 | ||||
StepTolerance |
| ||||
TypicalX | 典型的な |
例: options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)
problem
— 問題構造体
構造体
次のフィールドをもつ構造体として指定される問題構造体です。
フィールド名 | エントリ |
---|---|
| 目的関数 |
| x の初期点 |
| 線形不等式制約の行列 |
| 線形不等式制約のベクトル |
| 線形等式制約の行列 |
| 線形等式制約のベクトル |
lb | 下限のベクトル |
ub | 上限のベクトル |
| 非線形制約関数 |
| 'fmincon' |
| optimoptions で作成されたオプション |
problem
構造体では、少なくとも objective
、x0
、solver
、および options
フィールドを指定しなければなりません。
データ型: struct
出力引数
x
— 解
実数ベクトル | 実数配列
実数ベクトルまたは実数配列として返される解です。x
のサイズは、x0
のサイズと同じです。通常、exitflag
が正の場合、x
は問題に対する局所的な解になります。解の質の詳細については、ソルバーが成功する場合を参照してください。
fval
— 解での目的関数値
実数
解での目的関数値。実数として返されます。一般的に、fval
= fun(x)
になります。
exitflag
— fmincon
の停止理由
整数
fmincon
の停止理由。整数として返されます。
すべてのアルゴリズム: | |
| 1 次の最適性の尺度が |
| 反復回数が |
| 出力関数またはプロット関数によって停止したことを示します。 |
| 実行可能な点が見つかりません。 |
| |
|
|
| |
| 目的関数の値の変更が |
| |
| 探索方向の大きさが 2* |
| 方向導関数の大きさが 2* |
| |
| 現在の反復の目的関数が |
output
— 最適化プロセスに関する情報
構造体
最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。
iterations | 実行した反復回数 |
funcCount | 関数評価の回数 |
lssteplength | 探索方向に対する直線探索ステップ サイズ ( |
constrviolation | 制約関数の最大値 |
stepsize |
|
algorithm | 使用される最適化アルゴリズム |
cgiterations | PCG 法での合計反復回数 ( |
firstorderopt | 1 次の最適性の尺度 |
bestfeasible | 検出された最適 (最小目的関数) 実行可能点。次のフィールドで構成される構造体:
実行可能点が見つからなかった場合は、
|
message | 終了メッセージ |
grad
— 解での勾配
実数ベクトル
解での勾配。実数ベクトルとして返されます。grad
は、点 x(:)
における fun
の勾配を返します。
hessian
— ヘッシアンの近似
実数行列
ヘッシアンの近似。実数行列として返されます。hessian
の意味については、ヘッシアン出力 を参照してください。
制限
fmincon
は勾配ベースの方法です。この方法は目的関数と制約関数が両方とも連続で、1 次導関数をもつ問題に対して動作するように設計されています。'trust-region-reflective'
アルゴリズムの場合、fun
に勾配を与え、'SpecifyObjectiveGradient'
オプションをtrue
に設定しなければなりません。'trust-region-reflective'
アルゴリズムは上限と下限を同じ値に設定できません。たとえば、lb(2)==ub(2)
の場合、fmincon
はエラーを出力します。Equal upper and lower bounds not permitted in trust-region-reflective algorithm. Use either interior-point or SQP algorithms instead.
ヘッシアンを渡す構文には 2 種類あります。また、関数
HessianMultiplyFcn
を渡す構文も 2 種類あります。一方はtrust-region-reflective
であり、他方はinterior-point
に対するものです。詳細については、ヘッシアンを含めるを参照してください。trust-region-reflective
の場合、ラグランジュ関数のヘッシアンは目的関数のヘッシアンと同じです。ヘッシアンは目的関数の 3 番目の出力として渡すことができます。interior-point
の場合、ラグランジュ関数のヘッシアンはラグランジュ乗数と非線形制約関数のヘッシアンを伴うものとなります。現在の点x
とラグランジュ乗数構造体lambda
の両方を考慮に入れた別の関数としてヘッシアンを渡すことができます。
問題が実行不可能である場合、
fmincon
は最大制約値を最小化にしようと試みます。
詳細
入力としてのヘッシアン
fmincon
はオプションの入力としてヘッシアンを使用します。このヘッシアンは、次のようなラグランジュ関数の 2 次導関数の行列です (式 1 を参照)。
(3) |
ヘッシアンを trust-region-reflective
アルゴリズムまたは interior-point
アルゴリズムに指定する方法の詳細については、ヘッシアンを含めるを参照してください。
active-set
アルゴリズムと sqp
アルゴリズムは入力ヘッシアンを受け入れません。これらのアルゴリズムは、ラグランジュ関数のヘッシアンに対して準ニュートン近似を計算します。
interior-point
アルゴリズムには、'HessianApproximation'
オプションの選択肢がいくつかあります。内点法 fmincon に対する入力ヘッセ近似の選択を参照してください。
'bfgs'
—fmincon
が密な準ニュートン近似によってヘッシアンを計算します。これは既定のヘッセ近似です。'lbfgs'
—fmincon
が制限されたメモリの大規模の準ニュートン近似によってヘッシアンを計算します。既定のメモリでは 10 回の反復が使用されます。{'lbfgs',positive integer}
—fmincon
が制限されたメモリの大規模の準ニュートン近似によってヘッシアンを計算します。正の整数は前回の反復がいくつまで記憶されているかを指定します。'finite-difference'
—fmincon
は勾配の有限差分によるヘッシアンとベクトルとの乗算を計算します。目的関数の勾配を与える必要があります。また非線形制約関数がある場合は、その勾配も与えなければなりません。'SpecifyObjectiveGradient'
オプションをtrue
に設定し、可能な場合は'SpecifyConstraintGradient'
オプションをtrue
に設定します。'SubproblemAlgorithm'
は'cg'
に設定しなければなりません。
ヘッセ乗算関数
interior-point
アルゴリズムと trust-region-reflective
アルゴリズムではヘッセ乗算関数を指定できます。この関数はヘッシアンを直接計算せずに、ヘッシアンとベクトルとの乗算結果を与えます。これによってメモリを節約できます。詳細については、ヘッセ乗算関数を参照してください。
アルゴリズム
アルゴリズムの選択
アルゴリズムの選択に関するヘルプについては、fmincon アルゴリズムを参照してください。アルゴリズムを設定するには、optimoptions
を使用して options
を作成し、名前と値のペア 'Algorithm'
を使用します。
このセクションの後半では、各アルゴリズムの概要を説明するか、詳細へのポインターを示します。
内点法の最適化
このアルゴリズムは、fmincon の内点法アルゴリズム で説明します。この方法は [1]、[41]、および、[9] で詳しく説明します。
SQP および SQP レガシ最適化
fmincon
'sqp'
および 'sqp-legacy'
アルゴリズムは、有効制約法の最適化に記述されている 'active-set'
アルゴリズムと同様です。fmincon SQP アルゴリズムに主な相違点が示されています。相違点の概要は以下のとおりです。
有効制約法の最適化
fmincon
は逐次二次計画法 (SQP) 法を使用します。この方法では、関数は各反復で二次計画法 (QP) の部分問題を解きます。fmincon
は BFGS 式を使用して、ラグランジュ関数のヘッシアンの推定を反復ごとに更新します (fminunc
および参考文献 [7]、[8] を参照)。
fmincon
は、[6]、[7]、[8] で推奨されるものと同様なメリット関数を使用して直線探索を実行します。QP 部分問題を解くには、[5]での説明と同様の有効制約法を使用します。アルゴリズムの詳細については、fmincon アクティブ セット アルゴリズムを参照してください。
使用されるアルゴリズムの詳細については、SQP 法の実装を参照してください。
信頼領域 Reflective 法の最適化
'trust-region-reflective'
アルゴリズムは部分空間の信頼領域法であり、[3] と [4] で説明する interior-reflective ニュートン法に基づいています。各反復は、前処理付き共役勾配 (PCG) 法を使用する大型線形システムの近似解を伴います。fmincon の信頼領域 Reflective 法アルゴリズム にある信頼領域法および前処理付き共役勾配法の説明を参照してください。
代替機能
アプリ
[最適化] ライブ エディター タスクが fmincon
にビジュアル インターフェイスを提供します。
参照
[1] Byrd, R. H., J. C. Gilbert, and J. Nocedal. “A Trust Region Method Based on Interior Point Techniques for Nonlinear Programming.” Mathematical Programming, Vol 89, No. 1, 2000, pp. 149–185.
[2] Byrd, R. H., Mary E. Hribar, and Jorge Nocedal. “An Interior Point Algorithm for Large-Scale Nonlinear Programming.” SIAM Journal on Optimization, Vol 9, No. 4, 1999, pp. 877–900.
[3] Coleman, T. F. and Y. Li. “An Interior, Trust Region Approach for Nonlinear Minimization Subject to Bounds.” SIAM Journal on Optimization, Vol. 6, 1996, pp. 418–445.
[4] Coleman, T. F. and Y. Li. “On the Convergence of Reflective Newton Methods for Large-Scale Nonlinear Minimization Subject to Bounds.” Mathematical Programming, Vol. 67, Number 2, 1994, pp. 189–224.
[5] Gill, P. E., W. Murray, and M. H. Wright. Practical Optimization, London, Academic Press, 1981.
[6] Han, S. P. “A Globally Convergent Method for Nonlinear Programming.” Journal of Optimization Theory and Applications, Vol. 22, 1977, pp. 297.
[7] Powell, M. J. D. “A Fast Algorithm for Nonlinearly Constrained Optimization Calculations.” Numerical Analysis, ed. G. A. Watson, Lecture Notes in Mathematics, Springer-Verlag, Vol. 630, 1978.
[8] Powell, M. J. D. “The Convergence of Variable Metric Methods For Nonlinearly Constrained Optimization Calculations.” Nonlinear Programming 3 (O. L. Mangasarian, R. R. Meyer, and S. M. Robinson, eds.), Academic Press, 1978.
[9] Waltz, R. A., J. L. Morales, J. Nocedal, and D. Orban. “An interior algorithm for nonlinear optimization that combines line search and trust region steps.” Mathematical Programming, Vol 107, No. 3, 2006, pp. 391–408.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限
fmincon
は、関数codegen
(MATLAB Coder) または MATLAB Coder™ アプリを使用したコード生成をサポートしています。コードを生成するには MATLAB Coder ライセンスが必要です。ターゲット ハードウェアは、標準的な倍精度浮動小数点計算または標準的な単精度浮動小数点計算をサポートしていなければなりません。
コード生成ターゲットは、MATLAB ソルバーと同じ数学カーネル ライブラリを使用しません。そのため、コード生成解法は、特に、条件付けが不十分な問題の場合に、ソルバー解法と異なる可能性があります。
生成用のコードはすべて、MATLAB コードでなければなりません。特に、カスタム ブラックボックス関数を
fmincon
の目的関数として使用することはできません。coder.ceval
を使用して、C または C++ でコード化されたカスタム関数を評価することはできます。ただし、そのカスタム関数は MATLAB 関数内で呼び出さなければなりません。コード生成の場合、
fmincon
はproblem
引数をサポートしていません。[x,fval] = fmincon(problem) % Not supported
string や文字名ではなく、関数ハンドルを使用して、目的関数と非線形制約関数を指定しなければなりません。
x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon) % Supported % Not supported: fmincon('fun',...) or fmincon("fun",...)
fmincon
の入力行列 (A
、Aeq
、lb
、ub
など) はすべてフル (非スパース) でなければなりません。関数full
を使用することで、スパース行列を非スパースに変換できます。lb
引数とub
引数は、x0
引数と同じ数のエントリを持つか、空の[]
でなければなりません。ターゲット ハードウェアが無限境界をサポートしていない場合は、
optim.coder.infbound
を使用します。組み込みプロセッサを使用する高度なコード最適化には、Embedded Coder® ライセンスも必要です。
fmincon
のオプションを含め、関数optimoptions
を使用して指定しなければなりません。オプションにはAlgorithm
オプションを含め、'sqp'
または'sqp-legacy'
に設定しなければなりません。options = optimoptions('fmincon','Algorithm','sqp'); [x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
コード生成では次のオプションをサポートしています。
Algorithm
—'sqp'
または'sqp-legacy'
でなければなりませんConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
TypicalX
生成コードでは、オプションに対して限られたエラー チェックしか行われません。オプションの更新方法として、ドット表記ではなく、
optimoptions
を使用することを推奨します。opts = optimoptions('fmincon','Algorithm','sqp'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
オプションはファイルから読み込まないでください。そうした場合、コード生成に失敗することがあります。代わりに、コード内でオプションを作成してください。
通常、サポートされていないオプションを指定すると、コード生成の際にそのオプションは暗黙的に無視されます。ただし、ドット表記を使用してプロット関数や出力関数を指定すると、コード生成でエラーが発生することがあります。信頼性を確保するために、サポートされているオプションのみを指定してください。
出力関数とプロット関数はサポートされていないため、
fmincon
は終了フラグ –1 を返しません。fmincon
から生成されたコードでは、返されたoutput
構造体内にbestfeasible
フィールドがありません。
例については、最適化のためのコード生成の基本を参照してください。
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、'UseParallel'
オプションを true
に設定します。
options = optimoptions('
solvername
','UseParallel',true)
詳細については、Optimization Toolbox での並列計算の使用を参照してください。
バージョン履歴
R2006a より前に導入R2024a: 単精度コード生成
単精度浮動小数点ハードウェアに対する fmincon
のコードを生成できます。手順については、単精度コード生成を参照してください。
R2023b: CheckGradients
オプションは削除予定
CheckGradients
オプションは将来のリリースで削除される予定です。目的関数または非線形制約関数の 1 次導関数を確認するには、関数 checkGradients
を使用します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)