このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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. <stopping criteria details>
sol = struct with fields:
x: [2×1 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. <stopping criteria details>
sol = struct with fields:
x: [2×2 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)
問題の方程式。OptimizationEquality
配列またはフィールドとして OptimizationEquality
配列をもつ構造体として指定します。
例: sum(x.^2,2) == 4
問題のラベル。string または文字ベクトルとして指定します。Description
はソフトウェアでは計算に使用されません。Description
は、あらゆる理由で自由に使用できるラベルです。たとえば、モデルまたは問題を共有、アーカイブ、または提示し、モデルまたは問題に関する説明情報を Description
に保存できます。
例: "An iterative approach to the Traveling Salesman problem"
データ型: char
| string
出力引数
方程式問題。EquationProblem
オブジェクトとして返されます。通常、問題の説明を完了するには、prob.Equations
を指定し、さらに非線形方程式の場合は初期点の構造体を指定します。solve
を呼び出して、完全な問題を解きます。
警告
問題ベースのアプローチでは、目的関数、非線形等式、および非線形不等式における複素数値はサポートされていません。関数の計算に複素数値が含まれていると、それが中間値としてであっても、最終結果が不正確になる場合があります。
バージョン履歴
R2019b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)