prob2struct
最適化問題または方程式問題のソルバー形式への変換
説明
prob2struct
を使用して、最適化問題または方程式問題をソルバー形式に変換します。
ヒント
完全なワークフローについては、問題ベースの最適化ワークフローまたは方程式を解くための問題ベースのワークフローを参照してください。
は、すべての入力引数に対して、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば非線形最適化問題の場合、problem
= prob2struct(___,Name,Value
)problem = prob2struct(prob,'ObjectiveFunctionName','objfun1')
は、prob2struct
が現在のフォルダーに objfun1.m
という名前の目的関数ファイルを作成することを指定します。
例
問題の構造体への変換
最適化問題オブジェクトを問題構造体に変換します。
混合整数線形計画法の基礎: 問題ベースから基本的な MILP 問題を入力します。
ingots = optimvar('ingots',4,1,'Type','integer','LowerBound',0,'UpperBound',1); alloys = optimvar('alloys',4,1,'LowerBound',0); weightIngots = [5,3,4,6]; costIngots = weightIngots.*[350,330,310,280]; costAlloys = [500,450,400,100]; cost = costIngots*ingots + costAlloys*alloys; steelprob = optimproblem; steelprob.Objective = cost; totalweight = weightIngots*ingots + sum(alloys); carbonIngots = [5,4,5,3]/100; molybIngots = [3,3,4,4,]/100; carbonAlloys = [8,7,6,3]/100; molybAlloys = [6,7,8,9]/100; totalCarbon = (weightIngots.*carbonIngots)*ingots + carbonAlloys*alloys; totalMolyb = (weightIngots.*molybIngots)*ingots + molybAlloys*alloys; steelprob.Constraints.conswt = totalweight == 25; steelprob.Constraints.conscarb = totalCarbon == 1.25; steelprob.Constraints.consmolyb = totalMolyb == 1.25;
問題を intlinprog
問題構造体に変換します。
problem = prob2struct(steelprob);
結果として得られる線形等式制約の行列とベクトルを検証します。
Aeq = problem.Aeq
Aeq = 3x8 sparse double matrix (24 nonzeros)
(1,1) 1.0000
(2,1) 0.0800
(3,1) 0.0600
(1,2) 1.0000
(2,2) 0.0700
(3,2) 0.0700
(1,3) 1.0000
(2,3) 0.0600
(3,3) 0.0800
(1,4) 1.0000
(2,4) 0.0300
(3,4) 0.0900
(1,5) 5.0000
(2,5) 0.2500
(3,5) 0.1500
(1,6) 3.0000
(2,6) 0.1200
(3,6) 0.0900
(1,7) 4.0000
(2,7) 0.2000
(3,7) 0.1600
(1,8) 6.0000
(2,8) 0.1800
(3,8) 0.2400
beq = problem.beq
beq = 3×1
25.0000
1.2500
1.2500
範囲を検証します。
problem.lb
ans = 8×1
0
0
0
0
0
0
0
0
problem.ub
ans = 8×1
Inf
Inf
Inf
Inf
1
1
1
1
intlinprog
を呼び出して問題を解きます。
x = intlinprog(problem)
Running HiGHS 1.7.0: Copyright (c) 2024 HiGHS under MIT licence terms Coefficient ranges: Matrix [3e-02, 6e+00] Cost [1e+02, 2e+03] Bound [1e+00, 1e+00] RHS [1e+00, 2e+01] Presolving model 3 rows, 8 cols, 24 nonzeros 0s 3 rows, 8 cols, 18 nonzeros 0s Solving MIP model with: 3 rows 8 cols (4 binary, 0 integer, 0 implied int., 4 continuous) 18 nonzeros Nodes | B&B Tree | Objective Bounds | Dynamic Constraints | Work Proc. InQueue | Leaves Expl. | BestBound BestSol Gap | Cuts InLp Confl. | LpIters Time 0 0 0 0.00% 0 inf inf 0 0 0 0 0.0s 0 0 0 0.00% 8125.6 inf inf 0 0 0 4 0.0s R 0 0 0 0.00% 8495 8495 0.00% 5 0 0 5 0.0s Solving report Status Optimal Primal bound 8495 Dual bound 8495 Gap 0% (tolerance: 0.01%) Solution status feasible 8495 (objective) 0 (bound viol.) 0 (int. viol.) 0 (row viol.) Timing 0.01 (total) 0.00 (presolve) 0.00 (postsolve) Nodes 1 LP iterations 5 (total) 0 (strong br.) 1 (separation) 0 (heuristics) Optimal solution found. Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 1e-06. The intcon variables are integer within tolerance, options.ConstraintTolerance = 1e-06.
x = 8×1
7.2500
0
0.2500
3.5000
1.0000
1.0000
0
1.0000
非線形問題の構造体への変換
問題ベース フレームワークで非線形問題を作成します。
x = optimvar('x',2); fun = log(1 + 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2); prob = optimproblem('Objective',fun); mycon = dot(x,x) <= 4; prob.Constraints.mycon = mycon; x0.x = [-1;1.5];
prob
を最適化問題構造体に変換します。生成された目的関数ファイルに 'logrosenbrock'
、制約関数ファイルに 'circle2'
という名前を付けます。
problem = prob2struct(prob,x0,'ObjectiveFunctionName','logrosenbrock',... 'ConstraintFunctionName','circle2');
prob2struct
は、現在のフォルダーに非線形目的関数ファイルと非線形制約関数ファイルを作成します。これらのファイルを別のフォルダーに作成するには、名前と値のペア 'FileLocation'
を使用します。
問題を解きます。
[x,fval] = fmincon(problem)
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 = 2×1
1.0000
1.0000
fval = 4.7244e-11
入力引数
prob
— 最適化問題または方程式問題
OptimizationProblem
オブジェクト | EquationProblem
オブジェクト
最適化問題または方程式問題。OptimizationProblem
オブジェクトまたは EquationProblem
オブジェクトとして指定します。最適化問題は optimproblem
を使用して作成し、方程式問題は eqnproblem
を使用して作成します。
警告
問題ベースのアプローチでは、目的関数、非線形等式、および非線形不等式における複素数値はサポートされていません。関数の計算に複素数値が含まれていると、それが中間値としてであっても、最終結果が不正確になる場合があります。
例: prob = optimproblem; prob.Objective = obj; prob.Constraints.cons1 = cons1;
例: prob = eqnproblem; prob.Equations = eqs;
x0
— 初期点
構造体 | OptimizationValues
オブジェクトのベクトル
初期点。prob
の変数名に等しいフィールド名をもつ構造体として指定します。
一部の Global Optimization Toolbox ソルバーでは、x0
を複数の初期点を表す OptimizationValues
オブジェクトのベクトルにすることができます。関数 optimvalues
を使用して、点を作成します。これらのソルバーには次のものがあります。
ga
(Global Optimization Toolbox)、gamultiobj
(Global Optimization Toolbox)、paretosearch
(Global Optimization Toolbox)、およびparticleswarm
(Global Optimization Toolbox)。これらのソルバーは、初期母集団のメンバーとして複数の開始点を受け入れます。MultiStart
(Global Optimization Toolbox).このソルバーは、fmincon
などのローカル ソルバーの複数の初期点を受け入れます。surrogateopt
(Global Optimization Toolbox).このソルバーは、初期代理の生成に有効な複数の初期点を受け入れます。
名前付きインデックス変数と共に x0
を使用する例については、名前付きインデックス変数による最適化の初期点の作成を参照してください。
例: prob
に変数 x
と y
がある場合: x0.x = [3,2,17]; x0.y = [pi/3,2*pi/3]
データ型: struct
名前と値の引数
引数の任意のペアを Name1=Value1,...,NameN=ValueN
のように指定します。Name
は引数名、Value
は対応する値です。名前と値の引数は、他の引数より後に指定されている必要があります。ただし、各ペアの順序は任意です。
R2021a 以前では、それぞれの名前と値をコンマで区切り、Name
を引用符で囲みます。
例: problem = prob2struct(prob,'FileLocation','C:\Documents\myproblem')
ConstraintDerivative
— 制約関数に自動微分を使用するための指示
'auto'
(既定値) | 'auto-forward'
| 'auto-reverse'
| 'finite-differences'
非線形制約関数に対して自動微分 (AD) を使用するための指示。'ConstraintDerivative'
と 'auto'
(可能な場合に AD を使用)、'auto-forward'
(可能な場合にフォワード モードの AD を使用)、'auto-reverse'
(可能な場合にリバース モードの AD を使用)、または 'finite-differences'
(AD を使用しない) のいずれかで構成されたコンマ区切りのペアとして指定します。最適化変数および式でサポートされる演算で説明されているように、制約関数がサポートされている場合は、auto
などを選択すると、生成される制約関数ファイルが問題の求解時に勾配情報を使用するようになります。例については、問題ベースのワークフローへの導関数の供給を参照してください。
メモ
prob2struct
によって変換された問題内で自動導関数を使用するには、これらの導関数を指定するオプションを渡します。
options = optimoptions('fmincon','SpecifyObjectiveGradient',true,... 'SpecifyConstraintGradient',true); problem.options = options;
例: 'finite-differences'
データ型: char
| string
ConstraintFunctionName
— 非線形制約関数ファイルの名前
'generatedConstraints'
(既定値) | ファイル名
最適化問題のために prob2struct
によって作成された非線形制約関数ファイルの名前。'ConstraintFunctionName'
とファイル名で構成されるコンマ区切りのペアとして指定します。この引数は、fmincon
または fminunc
問題に適用されます。problem
を参照してください。ファイル拡張子 .m
をファイル名に含めないでください。prob2struct
はファイルの作成時にファイル拡張子を追加します。
ConstraintFunctionName
を指定しない場合、prob2struct
は 'generatedConstraints.m'
を上書きします。FileLocation
を指定しない場合、prob2struct
は現在のフォルダーにファイルを作成します。
返される problem
構造体はこの関数ファイルを参照します。
例: "mynlcons"
データ型: char
| string
EquationFunctionName
— 方程式関数ファイルの名前
'generatedEquation'
(既定値) | ファイル名
方程式問題のために prob2struct
によって作成された非線形方程式関数ファイルの名前。'EquationFunctionName'
とファイル名で構成されるコンマ区切りのペアとして指定します。この引数は、fsolve
、fzero
、または lsqnonlin
の方程式に適用されます。problem
を参照してください。ファイル拡張子 .m
をファイル名に含めないでください。prob2struct
はファイルの作成時にファイル拡張子を追加します。
EquationFunctionName
を指定しない場合、prob2struct
は 'generatedEquation.m'
を上書きします。FileLocation
を指定しない場合、prob2struct
は現在のフォルダーにファイルを作成します。
返される problem
構造体はこの関数ファイルを参照します。
例: "myequation"
データ型: char
| string
FileLocation
— 生成されたファイルの場所
現在のフォルダー (既定値) | 書き込み可能なフォルダーへのパス
生成されたファイル (目的関数ファイル、制約関数ファイル、その他のサブ関数ファイル) の場所。'FileLocation'
と書き込み可能なフォルダーへのパスで構成されるコンマ区切りのペアとして指定します。生成されたすべてのファイルはこのフォルダーに保存されます。複数のフォルダーはサポートされていません。
例: 'C:Documents\MATLAB\myproject'
データ型: char
| string
ObjectiveDerivative
— 目的関数に自動微分を使用するための指示
'auto'
(既定値) | 'auto-forward'
| 'auto-reverse'
| 'finite-differences'
非線形目的関数に対して自動微分 (AD) を使用するための指示。'ObjectiveDerivative'
と 'auto'
(可能な場合に AD を使用)、'auto-forward'
(可能な場合にフォワード モードの AD を使用)、'auto-reverse'
(可能な場合にリバース モードの AD を使用)、または 'finite-differences'
(AD を使用しない) のいずれかで構成されたコンマ区切りのペアとして指定します。最適化変数および式でサポートされる演算で説明されているように、目的関数がサポートされている場合は、auto
などを選択すると、生成される目的関数ファイルが問題の求階時に導関数情報を含めるようになります。例については、問題ベースのワークフローへの導関数の供給を参照してください。
メモ
prob2struct
によって変換された問題内で自動導関数を使用するには、これらの導関数を指定するオプションを渡します。
options = optimoptions('fmincon','SpecifyObjectiveGradient',true,... 'SpecifyConstraintGradient',true); problem.options = options;
例: 'finite-differences'
データ型: char
| string
ObjectiveFunctionName
— 目的関数ファイルの名前
'generatedObjective'
(既定値) | ファイル名
最適化問題のために prob2struct
によって作成された目的関数ファイルの名前。'ObjectiveFunctionName'
とファイル名で構成されるコンマ区切りのペアとして指定します。この引数は、fmincon
または fminunc
問題に適用されます。problem
を参照してください。ファイル拡張子 .m
をファイル名に含めないでください。prob2struct
はファイルの作成時にファイル拡張子を追加します。
ObjectiveFunctionName
を指定しない場合、prob2struct
は 'generatedObjective.m'
を上書きします。FileLocation
を指定しない場合、prob2struct
は現在のフォルダーにファイルを作成します。
返される problem
構造体はこの関数ファイルを参照します。
例: "myobj"
データ型: char
| string
Solver
— 最適化ソルバー
'intlinprog'
| 'linprog'
| 'lsqlin'
| 'lsqcurvefit'
| 'lsqnonlin'
| 'lsqnonneg'
| 'quadprog'
| 'fminbnd'
| 'fminunc'
| 'fmincon'
| 'fminsearch'
| 'fzero'
| 'fsolve'
| 'coneprog'
| 'ga'
| 'gamultiobj'
| 'paretosearch'
| 'patternsearch'
| 'particleswarm'
| 'surrogateopt'
| 'simulannealbnd'
最適化ソルバー。リストされているソルバーの名前として指定します。以下の表には、最適化問題について、Global Optimization Toolbox のソルバーを含め、問題のタイプごとに使用可能なソルバーが示されています。方程式問題の詳細については、最適化ソルバーの詳細の後に示しています。
整数制約をもつ非線形問題を prob2struct
で変換する場合、結果として得られる問題構造体は選択したソルバーに依存します。Global Optimization Toolbox ライセンスをお持ちでない場合は、このソルバーを指定する必要があります。詳細については、非線形問題ベースの最適化における整数制約を参照してください。
最適化問題のタイプごとに、既定のソルバーを以下の表に示します。
問題のタイプ | 既定のソルバー |
---|---|
線形計画法 (LP) | linprog |
混合整数線形計画法 (MILP) | intlinprog |
二次計画法 (QP) | quadprog |
2 次錐計画法 (SOCP) | coneprog |
線形最小二乗法 | lsqlin |
非線形最小二乗法 | lsqnonlin |
非線形計画法 (NLP) | |
混合整数非線形計画法 (MINLP) | ga (Global Optimization Toolbox) |
多目的 | gamultiobj (Global Optimization Toolbox) |
次の表で、 はその問題のタイプにソルバーを使用できることを表し、"x" はソルバーを使用できないことを表しています。
問題のタイプ | LP | MILP | QP | SOCP | 線形最小二乗法 | 非線形最小二乗法 | NLP | MINLP |
---|---|---|---|---|---|---|---|---|
ソルバー | ||||||||
linprog | | x | x | x | x | x | x | x |
intlinprog | | | x | x | x | x | x | x |
quadprog | | x | | | | x | x | x |
coneprog | | x | x | | x | x | x | x |
lsqlin | x | x | x | x | | x | x | x |
lsqnonneg | x | x | x | x | | x | x | x |
lsqnonlin | x | x | x | x | | | x | x |
fminunc | | x | | x | | | | x |
fmincon | | x | | | | | | x |
fminbnd | x | x | x | x | | | | x |
fminsearch | x | x | x | x | | | | x |
patternsearch (Global Optimization Toolbox) | | x | | | | | | x |
ga (Global Optimization Toolbox) | | | | | | | | |
particleswarm (Global Optimization Toolbox) | | x | | x | | | | x |
simulannealbnd (Global Optimization Toolbox) | | x | | x | | | | x |
surrogateopt (Global Optimization Toolbox) | | | | | | | | |
gamultiobj (Global Optimization Toolbox) | | | | | | | | |
paretosearch (Global Optimization Toolbox) | | x | | | | | | x |
メモ
最小二乗問題のソルバーとして lsqcurvefit
を選択した場合、solve
は lsqnonlin
を使用します。solve
に関して lsqcurvefit
ソルバーと lsqnonlin
ソルバーは同一です。
注意
最大化問題 (prob.ObjectiveSense
が "max"
または "maximize"
) の場合は、最小二乗ソルバー (名前が lsq
で始まるソルバー) を指定しないでください。これらのソルバーは最大化を実行できないので、指定すると solve
でエラーが発生します。
以下の表には、方程式の求解について、問題のタイプごとに使用可能なソルバーが示されています。以下の表では、
* は、その問題のタイプの既定のソルバーを示します。
Y は、使用可能なソルバーを示します。
N は、使用できないソルバーを示します。
方程式でサポートされているソルバー
方程式のタイプ | lsqlin | lsqnonneg | fzero | fsolve | lsqnonlin |
---|---|---|---|---|---|
線形 | * | N | Y (スカラーのみ) | Y | Y |
範囲付き線形 | * | Y | N | N | Y |
スカラー非線形 | N | N | * | Y | Y |
非線形方程式系 | N | N | N | * | Y |
範囲付き非線形方程式系 | N | N | N | N | * |
例: 'intlinprog'
データ型: char
| string
出力引数
problem
— 問題構造体
fmincon
問題構造体 | fminunc
問題構造体 | fsolve
問題構造体 | intlinprog
問題構造体 | linprog
問題構造体 | lsqlin
問題構造体 | lsqnonlin
問題構造体 | quadprog
問題構造体 | ga
問題構造体
問題構造体。fmincon
problem
構造体、fminunc
problem
構造体、fsolve
problem
構造体、intlinprog
problem
構造体、linprog
problem
構造体、lsqlin
problem
構造体、lsqnonlin
problem
構造体、quadprog
problem
構造体、または ga
problem
(Global Optimization Toolbox) 構造体として返されます。
次の表は、最適化問題について、結果として得られる既定の問題のタイプを示しています。既定ではない問題のタイプを取得することも可能です。たとえば、非線形範囲制約付き問題の場合は、solver
引数を使用して、ほとんどの Global Optimization Toolbox ソルバーを選択できます。
最適化目的関数と制約のタイプ (範囲を含む線形制約) | 結果として得られる問題のタイプ |
---|---|
線形目的関数と線形制約関数。 少なくとも 1 つの問題変数が | intlinprog |
線形目的関数と線形制約関数。
| linprog |
線形制約関数。 目的関数が線形式の二乗和と定数の和。 | lsqlin |
範囲制約。 目的関数が一般的な非線形式の二乗和と定数の和。 | lsqnonlin |
線形制約関数。 一般的な二次目的関数。 | quadprog |
一般的な非線形目的関数。 制約なし。 | fminunc |
一般的な非線形目的関数で、少なくとも 1 つの任意のタイプの制約がある。 または、少なくとも 1 つの一般的な非線形制約関数がある。 | fmincon |
非線形目的関数または非線形制約関数で、少なくとも 1 つの整数変数がある。 | ga |
次の表は、方程式を解く問題について、結果として得られる問題のタイプを示しています。
方程式のタイプ | 結果として得られる問題のタイプ |
---|---|
線形方程式系 (範囲の有無を問わない) | lsqlin |
スカラー (single) 非線形方程式 | fzero |
制約のない非線形方程式系 | fsolve |
範囲のある非線形方程式系 | lsqnonlin |
メモ
非線形問題の場合、prob2struct
は、目的関数用の関数ファイルと、非線形制約関数用の関数ファイルを作成します。サポート関数を呼び出す目的関数と制約関数の場合、prob2struct
はサポート関数ファイルも作成し、FileLocation
フォルダーに保存します。生成された関数内の追加のパラメーターにアクセスするには、生成された関数詳細の取得を参照してください。
線形最適化問題および二次最適化問題の場合、問題構造体には、目的関数の加法定数を表す追加フィールド f0
が含まれます。指定したソルバーを使用して問題構造体を解く場合、返される目的関数値に f0
の値は含まれません。関数 solve
を使用してprob
を解く場合、返される目的関数値には f0
値が含まれます。
prob
の ObjectiveSense が 'max'
または 'maximize'
である場合、ソルバーが最小化を行うため、problem
では prob
の目的関数の負の値が使用されます。最大化を行うため、ソルバーは元の目的関数の負の値を最小化します。この場合、ソルバーから報告される最適な関数値は、元の問題に対する負の値です。詳細については、目的関数の最大化を参照してください。最大化問題では lsqlin
を使用できません。
ヒント
非線形問題に対して同じ MATLAB® セッションで
prob2struct
を複数回呼び出す場合、引数ObjectiveFunctionName
またはEquationFunctionName
と、適切な場合は引数ConstraintFunctionName
を使用します。一意の名前を指定することによって、結果として得られる問題構造体が正しい目的関数と制約関数を参照するようになります。そうでない場合、これ以降prob2struct
を呼び出すと、生成される非線形関数ファイルによって既存のファイルが上書きされる可能性があります。無限再帰の発生を回避するには、目的関数または制約関数内で
prob2struct
を呼び出さないようにします。非線形問題に対して
prob2struct
を並列で呼び出す場合、結果として得られる目的関数ファイルと制約関数ファイルが一意の名前を持つようにします。そうすることで、ループの各パスで同じファイルへの書き込みが回避されます。
アルゴリズム
ソルバー形式への変換
問題構造体の基本は、単一ベクトルにおけるすべての問題変数の暗黙の順序付けです。問題変数の順序は、prob
の Variables
プロパティの順序と同じです。詳細については、OptimizationProblem
を参照してください。varindex
を使用して順序を確認することもできます。
たとえば、問題変数が次の順序であるとします。
x
— 3 x 2 x 4 の配列y
— 3 行 2 列の配列
この場合、暗黙の変数順序は、問題変数が vars = [x(:);y(:)]
である場合と同じになります。
vars
の合計 30 個の要素のうち、最初の 24 個の要素は x(:)
に相当し、次の 6 個の要素は y(:)
に相当します。下限と上限はこの変数順序に対応し、各線形制約行列には 30 の列があります。
一般的な非線形目的関数または制約関数を含む問題の場合、prob2struct
は、現在のフォルダー、または FileLocation
によって指定されたフォルダーに関数ファイルを作成します。返される problem
構造体はこれらの関数ファイルを参照します。
自動微分
自動微分 (AD) は、以下の条件の下で、solve
関数と prob2struct
関数に適用されます。
最適化変数および式でサポートされる演算で説明されているように、目的関数と制約関数がサポートされています。これらの関数は、
fcn2optimexpr
関数を使用する必要がありません。solve
に呼び出されるソルバーは、fmincon
、fminunc
、fsolve
、lsqnonlin
のいずれかです。最適化問題では、
solve
またはprob2struct
の'ObjectiveDerivative'
と'ConstraintDerivative'
の名前と値のペアの引数が'auto'
(既定)、'auto-forward'
、または'auto-reverse'
に設定されます。方程式問題の場合、
'EquationDerivative'
オプションは'auto'
(既定)、'auto-forward'
、または'auto-reverse'
に設定されます。
AD の適用時 | サポートされているすべての制約関数 | サポートされていない 1 つ以上の制約 |
---|---|---|
サポートされている目的関数 | 目的と制約に使用される AD | 目的のみに使用される AD |
サポートされていない目的関数 | 制約のみに使用される AD | 使用されない AD |
メモ
線形または二次の目的関数または制約関数では、適用可能なソルバーは常に関数の明示的な勾配を使用します。このような勾配は AD を使用して生成されません。詳細については、閉形式を参照してください。
これらの条件が満たされなかった場合は、solve
が有限差分によって勾配を推定し、prob2struct
が生成された関数ファイル内に勾配を作成しません。
ソルバーは既定で次のタイプの AD を選択します。
一般的な非線形目的関数の場合、
fmincon
は既定で目的関数用のリバース モードの AD になります。fmincon
は、非線形制約の数が変数の数よりも少ない場合に既定で非線形制約関数用のリバース モードの AD になります。それ以外の場合、fmincon
は既定で非線形制約関数用のフォワード モードの AD になります。一般的な非線形目的関数の場合、
fminunc
は既定でリバース モードの AD になります。最小二乗目的関数の場合、
fmincon
とfminunc
は既定で目的関数用のフォワード モードの AD になります。問題ベースの最小二乗目的関数の定義については、問題ベースの最小二乗法の目的関数の記述を参照してください。lsqnonlin
は、目的ベクトルに含まれる要素数が変数の数以上である場合に既定でフォワード モードの AD になります。それ以外の場合、lsqnonlin
は既定でリバース モードの AD になります。fsolve
は、方程式の数が変数の数以上の場合に既定でフォワード モードの AD になります。それ以外の場合、fsolve
は既定でリバース モードの AD になります。
メモ
prob2struct
によって変換された問題内で自動導関数を使用するには、これらの導関数を指定するオプションを渡します。
options = optimoptions('fmincon','SpecifyObjectiveGradient',true,... 'SpecifyConstraintGradient',true); problem.options = options;
現時点で、AD は、1 階微分に対してのみ機能します。2 階以上の微分には適用されません。そのため、たとえば、解析的ヘッシアンを使用して最適化を高速化するには、solve
を直接使用できず、代わりに、問題ベースのワークフローへの導関数の供給で説明されているアプローチを使用しなければなりません。
バージョン履歴
R2017b で導入R2021a: Options
の名前と値のペアの削除
Options
の名前と値のペアは削除されました。オプションを変更するには、生成された problem
構造体を編集します。以下に例を示します。
problem.options = optimoptions('fmincon',... 'Display','iter','MaxFunctionEvaluations',5e4); % Or, to set just one option: problem.options.MaxFunctionEvaluations = 5e4;
Options
の名前と値のペアは、自動微分が存在するとあいまいさを引き起こす可能性があるため、削除されました。
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)