eqnproblem
説明
eqnproblem
を使用して方程式問題を作成します。
ヒント
完全なワークフローについては、方程式を解くための問題ベースのワークフローを参照してください。
は、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、問題を作成する際に、prob
= eqnproblem(Name,Value
)Equations
の名前を使用することで、方程式を指定できます。
例
非線形方程式系の解法、問題ベース
次の非線形方程式系を解きます。
問題ベースのアプローチを使用する場合は、まず x
を 2 要素の最適化変数として定義します。
x = optimvar('x',2);
最初の方程式を最適化等式として作成します。
eq1 = exp(-exp(-(x(1) + x(2)))) == x(2)*(1 + x(1)^2);
同様に、2 番目の方程式も最適化等式として作成します。
eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) == 1/2;
方程式問題を作成し、方程式を問題に配置します。
prob = eqnproblem; prob.Equations.eq1 = eq1; prob.Equations.eq2 = eq2;
問題を確認します。
show(prob)
EquationProblem : Solve for: x eq1: exp((-exp((-(x(1) + x(2)))))) == (x(2) .* (1 + x(1).^2)) eq2: ((x(1) .* cos(x(2))) + (x(2) .* sin(x(1)))) == 0.5
点 [0,0]
から始めて問題を解きます。問題ベースのアプローチの場合、初期点を構造体として指定します。変数名は構造体のフィールドとします。この問題の変数は x
の 1 つしかありません。
x0.x = [0 0]; [sol,fval,exitflag] = solve(prob,x0)
Solving problem using fsolve. Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
sol = struct with fields:
x: [2x1 double]
fval = struct with fields:
eq1: -2.4070e-07
eq2: -3.8255e-08
exitflag = EquationSolved
解の点を表示します。
disp(sol.x)
0.3532 0.6061
fcn2optimexpr
を必要とするサポートされていない関数
方程式の関数が初等関数で構成されていない場合、fcn2optimexpr
を使用して、その関数を最適化式に変換しなければなりません。次に例を示します。
ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x); eq1 = ls1 == x(2)*(1 + x(1)^2); ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x); eq2 = ls2 == 1/2;
詳細については、最適化変数および式でサポートされる演算と非線形関数から最適化式への変換を参照してください。
非線形多項式系の解法、問題ベース
x
が 2 行 2 列の行列である場合、方程式
は多項方程式系です。ここで、 は、行列乗算を使用した を意味します。問題ベースのアプローチを使用して、この方程式系を容易に定式化し、解くことができます。
まず、変数 x
を 2 行 2 列の行列変数として定義します。
x = optimvar('x',2,2);
x
について解く方程式を定義します。
eqn = x^3 == [1 2;3 4];
この方程式を使用して、方程式問題を作成します。
prob = eqnproblem('Equations',eqn);
点 [1 1;1 1]
から始めて問題を解きます。
x0.x = ones(2); sol = solve(prob,x0)
Solving problem using fsolve. Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
sol = struct with fields:
x: [2x2 double]
解を検証します。
disp(sol.x)
-0.1291 0.8602 1.2903 1.1612
解の 3 乗を表示します。
sol.x^3
ans = 2×2
1.0000 2.0000
3.0000 4.0000
入力引数
名前と値の引数
引数の任意のペアを Name1=Value1,...,NameN=ValueN
のように指定します。Name
は引数名、Value
は対応する値です。名前と値の引数は、他の引数より後に指定されている必要があります。ただし、各ペアの順序は任意です。
R2021a 以前では、それぞれの名前と値をコンマで区切り、Name
を引用符で囲みます。
例: prob = eqnproblem('Equations',eqn)
Equations
— 問題の方程式
[]
(既定値) | OptimizationEquality
配列 | フィールドとして OptimizationEquality
配列をもつ構造体
問題の方程式。OptimizationEquality
配列またはフィールドとして OptimizationEquality
配列をもつ構造体として指定します。
例: sum(x.^2,2) == 4
Description
— 問題のラベル
''
(既定値) | string | 文字ベクトル
問題のラベル。string または文字ベクトルとして指定します。Description
はソフトウェアでは計算に使用されません。Description
は、あらゆる理由で自由に使用できるラベルです。たとえば、モデルまたは問題を共有、アーカイブ、または提示し、モデルまたは問題に関する説明情報を Description
に保存できます。
例: "An iterative approach to the Traveling Salesman problem"
データ型: char
| string
出力引数
prob
— 方程式問題
EquationProblem
オブジェクト
方程式問題。EquationProblem
オブジェクトとして返されます。通常、問題の説明を完了するには、prob.Equations
を指定し、さらに非線形方程式の場合は初期点の構造体を指定します。solve
を呼び出して、完全な問題を解きます。
警告
問題ベースのアプローチでは、目的関数、非線形等式、および非線形不等式における複素数値はサポートされていません。関数の計算に複素数値が含まれていると、それが中間値としてであっても、最終結果が不正確になる場合があります。
バージョン履歴
R2019b で導入
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)