Main Content

ReturnConditions モードによるパラメトリック方程式の求解

この例では、Symbolic Math Toolbox™ を使ってパラメーター化された代数方程式の解を求める方法を示します。

代数方程式をシンボリックに解くには関数 solve を使用します。関数 solve は、パラメーター化により方程式のすべての解 (たとえその数が膨大であっても) に関する完全な情報を提供することができます。また、どのような条件の下でこれらの解が有効であるかに関する情報も提供します。これらの情報を得るには、オプション ReturnConditions を true に設定してください。

方程式 sin(C*x) = 1 を解きます。求解に使用する変数として x を指定します。関数 solveC を定数として扱います。解とそれに含まれる新たに生成されたパラメーター、およびその解についての条件用に 3 つの出力変数を用意します。

syms C x
eq = sin(C*x) == 1;
[solx, params, conds] = solve(eq, x, 'ReturnConditions', true)
solx = 

π2+2πkC

params = k
conds = kZC0

解を検証するには、subs を使用して方程式に解を代入します。この例がこれ以降、conds にある仮定の下で処理されるように、assume を使用します。isAlways を使用して解をテストします。関数 isAlways は、解が与えられた仮定の下では常に正しいことを示す論理 1 (true) を返します。

SolutionCorrect = subs(eq, x, solx)
SolutionCorrect = 

sin(π2+2πk)=1

assume(conds)
isAlways(SolutionCorrect)
ans = logical
   1

無数にある解から 1 つの解を取得するには、パラメーターについての条件 conds を解き、パラメーター params の値を求めます。オプション ReturnConditions は指定しないでください。subs を使用して k のこの値を解に代入し、一連の解から解を求めます。

k0 = solve(conds, params)
k0 = 0
subs(solx, params, k0)
ans = 

π2C

特定の条件を満たすパラメーター値を求めるため、条件を solve の入力に追加します。99/4 よりも大きいパラメーターの値を求め、代入して解を求めます。

k1 = solve([conds, params > 99/4], params)
k1 = 26
subs(solx, params, k1)
ans = 

105π2C

指定区間内の解を求めるには、区間を指定する不等式を用いて元の方程式を解きます。

[solx1, params1, conds1] = solve([eq, x > 2, x < 7], x, 'ReturnConditions', true)
solx1 = 

π+4πk2C

params1 = k
conds1 = 0<C4C<π+4πkπ+4πk<14CC<0π+4πk<4C14C<π+4πk

あるいは、既存の解を使用して、追加の条件で制限することもできます。条件が変化しても解は変わらない点に留意してください。関数 solvesolxsolx1 を異なるパラメーターで表現しますが、それらは同等です。

[~, ~, conds2] = solve(x == solx, x < 7, x > 2, x, 'ReturnConditions', true)
conds2 = 

4π<4k+1C4k+1C<14π

定数 C の特定の値に対して、新しい条件を満たすパラメーター値を求めます。

conds3 = subs(conds2, C, 5)
conds3 = 

4π<4k5+154k5+15<14π

solve(conds3, params)
ans = 

(2345)