ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

solve

方程式と方程式系のソルバー

文字ベクトル入力は削除されました。代わりに、syms を使用して変数を宣言し、solve('2*x == 1','x') などの入力を solve(2*x == 1,x) で置き換えます。

説明

S = solve(eqn,var) は、変数 var について方程式 eqn を解きます。var を指定しない場合、求める変数は関数 symvar によって決定されます。たとえば、solve(x + 1 == 2, x) は方程式 x + 1 = 2 を解いて x を求めます。

S = solve(eqn,var,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用します。

Y = solve(eqns,vars) は、変数 vars について方程式系 eqns を解き、その解を含む構造体を返します。vars を指定しない場合、solvesymvar を使用して求める変数を見つけます。この場合、symvar が求める変数の数は、方程式の数 eqns の数に等しくなります。

Y = solve(eqns,vars,Name,Value) は、1 つ以上の Name,Value の引数ペアによって指定された追加オプションを使用します。

[y1,...,yN] = solve(eqns,vars) は、変数 vars について方程式系 eqns を求めます。解は変数 y1,...,yN に代入されます。変数を指定しない場合、solvesymvar を使用して求める変数を見つけます。この場合、symvar が求める変数の数は、出力引数 N の数に等しくなります。

[y1,...,yN] = solve(eqns,vars,Name,Value) は、1 つ以上の Name,Value の引数ペアによって指定された追加オプションを使用します。

[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true) は、解のパラメーターと条件を指定する追加の引数 parameters および conditions を返します。

方程式の求解

演算子 == を使用して、方程式 sin(x) == 1 を指定して求解します。

syms x
eqn = sin(x) == 1;
solx = solve(eqn,x)
solx =
pi/2

オプション ReturnConditionstrue に設定して同じ方程式の完全解を求めます。解、解のパラメーターおよび解の条件のための出力変数を指定します。

[solx, params, conds] = solve(eqn, x, 'ReturnConditions', true)
solx =
pi/2 + 2*pi*k

params =
k

conds =
in(k, 'integer')

pi/2 + 2*pi*k にはパラメーター k が含まれ、in(k, 'integer') の条件下において有効です。これの条件は、パラメーター k が整数でなければならないことを意味します。

solve が空のオブジェクトを返した場合、解は存在しません。solve が空のオブジェクトを警告と共に返したときは、解が存在する可能性はありますが、solve で解が 1 つも求まらなかった場合です。

eqns = [3*x+2, 3*x+1];
solve(eqns, x)
ans =
Empty sym: 0-by-1

solve が返すパラメーターと条件を使用した解の改善

ReturnConditionstrue に指定して、解のパラメーターと条件を含む方程式の完全な解を返します。

方程式 sin(x) = 0 を解きます。出力引数 parametersconditions のための追加の出力変数を指定します。

syms x
eqn = sin(x) == 0;
[solx, param, cond] = solve(eqn, x, 'ReturnConditions', true)
solx =
pi*k
param =
k
cond =
in(k, 'integer')

pi*k にはパラメーター k が含まれ、in(k,'integer') の条件下において有効です。この条件は、パラメーター k が整数でなければならないことを意味します。k は MATLAB® ワークスペースには存在しないため、param を使用してアクセスする必要があります。

条件 cond を仮定し、solve を使用して k のこれらの条件を求めて、0 < x < 2*pi における k の有効な値を求めます。求められた k の値を x の解に代入します。

assume(cond)
interval = [solx > 0, solx < 2*pi];
solk = solve(interval, param)
valx = subs(solx, param, solk)
solk =
1
valx =
pi

0 < x < 2*pi における k の有効な値は 1 です。これにより、値 x = pi が求まります。

または、k の値を選択することによって x の解を求めます。isAlways を使用して、選択した値が k の条件を満たしているかチェックします。

k = 4k の条件を満たしているかチェックします。

condk4 = subs(cond, param, 4);
isAlways(condk4)
ans =
  logical
   1

isAlways は論理値 1 (true) を返し、4k の有効な値であることを示します。k4 に代入して x の解を求めます。vpa を使用して数値近似を求めます。

valx = subs(solx, param, 4)
vpa(valx)
valx =
4*pi
ans =
12.566370614359172953850573533118

多変数方程式の求解と変数の出力への代入

方程式の解を求める変数を指定して、シンボリック パラメーターを使用して方程式の解を求める際のあいまいさを防ぎます。変数を指定しない場合、solvesymvar を使用して変数を選択します。最初に、変数を指定せずに 2 次方程式を解きます。solve は、x を選択して通常の解を返します。次に a について 2 次方程式を解き、a の解を返します。

syms a b c x
eqn = a*x^2 + b*x + c == 0;
sol = solve(eqn)
sola = solve(eqn, a)
sol =
 -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
 -(b - (b^2 - 4*a*c)^(1/2))/(2*a)
sola =
-(c + b*x)/x^2

複数の変数を求解する場合、変数が指定される順序によって、ソルバーが解を返す順序が決まります。

変数を明示的に指定して、次の方程式系の解を求め、その解を変数 solv および solu に代入します。ソルバーは、それぞれの変数の解の配列を返します。

syms u v
eqns = [2*u^2 + v^2 == 0, u - v == 1];
vars = [v u];
[solv, solu] = solve(eqns, vars)
solv =
 - (2^(1/2)*1i)/3 - 2/3
   (2^(1/2)*1i)/3 - 2/3
solu =
 1/3 - (2^(1/2)*1i)/3
 (2^(1/2)*1i)/3 + 1/3

方程式系の解は、同じインデックス番号の要素として構成されます。

solutions = [solv solu]
solutions =
[ - (2^(1/2)*1i)/3 - 2/3, 1/3 - (2^(1/2)*1i)/3]
[   (2^(1/2)*1i)/3 - 2/3, (2^(1/2)*1i)/3 + 1/3]

この系の解は v = - (2^(1/2)*1i)/3 - 2/3 および u = 1/3 - (2^(1/2)*1i)/3 です。

多変数方程式の求解と出力の構造体への代入

複数の変数について解を求めるとき、その出力を個々の変数に保存するより、構造体配列に保存するほうがより便利な場合があります。1 つの出力引数を指定したときに複数の出力が存在すると、関数 solve は構造体を返します。

方程式系の解を求め、構造体配列として解を返します。

syms u v
eqns = [2*u + v == 0, u - v == 1];
S = solve(eqns, [u v])
S = 
  struct with fields:

    u: [1×1 sym]
    v: [1×1 sym]

構造体の要素を指定して解にアクセスします。

S.u
S.v
ans =
1/3
ans =
-2/3

構造体配列を使用することで、解の式への代入が簡単になります。関数 subs は、代入先の変数がいずれでも、正しい値を代入します。

構造体 S を使用して、解を式に代入します。

expr1 = u^2;
subs(expr1, S)
expr2 = 3*v+u;
subs(expr2, S)
ans =
1/9
ans =
-5/3

構造体を使用した方程式系の完全な解の返却

ReturnConditionstrue に指定して、解のパラメーターと条件を含む方程式系の完全な解を返します。

syms x y
eqns = [sin(x)^2 == cos(y), 2*x == y];
S = solve(eqns, [x y], 'ReturnConditions', true);
S.x
S.y
S.conditions
S.parameters
ans =
 pi*k - asin(3^(1/2)/3)
 asin(3^(1/2)/3) + pi*k
ans =
 2*pi*k - 2*asin(3^(1/2)/3)
 2*asin(3^(1/2)/3) + 2*pi*k
ans =
 in(k, 'integer')
 in(k, 'integer')
ans =
k

解は S.xS.y および S.conditions の同じインデックスの要素によって形成されます。S.parameters のどの要素もすべての解に表れる可能性があります。たとえば、ある解は x = pi*k - asin(3^(1/2)/3) および y = 2*pi*k - 2*asin(3^(1/2)/3) で、パラメーター k をもち、条件 in(k, 'integer') の下で有効です。この条件は、解が有効であるためにはパラメーター k が整数でなければならないことを意味します。k は MATLAB ワークスペースには存在しないため、S.parameters を使用してアクセスする必要があります。

1 番目の解を求めるために、条件 S.conditions(1) を仮定し、solve を使用して k のこれらの条件を求めて 0 < x < pi における k の有効な値を求めます。求められた k の値を x の解に代入します。

assume(S.conditions(1))
interval = [S.x(1)>0, S.x(1)<pi];
solk = solve(interval, S.parameters)
solx = subs(S.x(1), S.parameters, solk)
solk =
1
solx =
pi - asin(3^(1/2)/3)

0 < x < pi における k の有効な値は 1 です。これにより、値 x = pi - asin(3^(1/2)/3) が求まります。

または、k の値を選択することによって x の解を求めます。isAlways を使用して、選択した値が k の条件を満たしているかチェックします。

k = 4k の条件を満たしているかチェックします。

condk4 = subs(S.conditions(1), S.parameters, 4);
isAlways(condk4)
ans =
  logical
   1

isAlways は論理値 1 (true) を返し、4k の有効な値であることを示します。k4 に代入して x の解を求めます。vpa を使用して数値近似を求めます。

valx = subs(S.x(1), S.parameters, 4)
vpa(valx)
valx =
4*pi - asin(3^(1/2)/3)
ans =
11.950890905688785612783108943994

方程式の数値的な求解

solve が方程式をシンボリックに解くことができない場合、vpasolve を使用して数値解を求めようとします。関数 vpasolve は最初に求められた解を返します。

次の方程式を解いてみます。solve は、シンボリックな解を求めることができないため、数値解を返します。

syms x
eqn = sin(x) == x^2 - 1;
solve(eqn, x)
Warning: Unable to solve symbolically. Returning a numeric solution using vpasolve. 
> In solve (line 304) 
ans =
-0.63673265080528201088799090383828

方程式の左辺と右辺をプロットします。方程式が 1 つの正の解を持つことも確認します。

fplot([lhs(eqn) rhs(eqn)], [-2 2])

数値ソルバー vpasolve を直接呼び出して、区間を指定してこの解を求めます。

vpasolve(eqn, x, [0 2])
ans =
1.4096240040025962492355939705895

不等式の求解

solve は、不等式を解いて不等式を満たす解を求めることができます。

次の不等式を解きます。ReturnConditionstrue に設定し、解のすべてのパラメーターおよび条件を返すようにします。

x>0y>0x2+y2+xy<1

syms x y
cond1 = x^2 + y^2 + x*y < 1;
cond2 = x > 0;
cond3 = y > 0;
conds = [cond1 cond2 cond3];

sol = solve(conds, [x y], 'ReturnConditions', true);

sol.x
sol.y
sol.parameters
sol.conditions
ans =
(- 3*v^2 + u)^(1/2)/2 - v/2
ans =
v
ans =
[ u, v]
ans =
4*v^2 < u & u < 4 & 0 < v

パラメーター u および v は MATLAB ワークスペースには存在しないため、sol.parameters を使用してアクセスする必要があります。

subsisAlways を使用して、値 u = 7/2 および v = 1/2 が条件を満たすことをチェックします。

condWithValues = subs(sol.conditions, sol.parameters, [7/2,1/2]);
isAlways(condWithValues)
ans =
  logical
   1

isAlways は論理 1 (true) を返し、これらの値が条件を満たすことを示します。これらのパラメーター値を sol.x および sol.y に代入して、x および y の解を求めます。

xSol = subs(sol.x, sol.parameters, [7/2,1/2])
ySol = subs(sol.y, sol.parameters, [7/2,1/2])
xSol =
11^(1/2)/4 - 1/4

ySol =
1/2

vpa を使用して、解を数値形式に変換します。

vpa(xSol)
vpa(ySol)
ans =
0.57915619758884996227873318416767

ans =
0.5

実数解を返す

次の方程式を解きます。5 つの解があります。

syms x
eqn = x^5 == 3125;
solve(eqn, x)
ans =
                                                          5
 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*5i)/4 - (5*5^(1/2))/4 - 5/4
   (2^(1/2)*(5 - 5^(1/2))^(1/2)*5i)/4 - (5*5^(1/2))/4 - 5/4
   (5*5^(1/2))/4 - (2^(1/2)*(5^(1/2) + 5)^(1/2)*5i)/4 - 5/4
   (5*5^(1/2))/4 + (2^(1/2)*(5^(1/2) + 5)^(1/2)*5i)/4 - 5/4

引数 Realtrue に設定して実数解のみを返します。この方程式の唯一の実数解は 5 です。

solve(eqn, x, 'Real', true)
ans =
5

1 つの解を返す

次の方程式を解きます。周期解の無限集合を返す代わりに、ソルバーでは最も実用的と見なされる次の 3 つの解が選択されます。

syms x
eqn = sin(x) + cos(2*x) == 1;
solve(eqn, x)
ans =
        0
     pi/6
 (5*pi)/6

PrincipalValue を使用して 1 つの解だけを選択します。

eqn = sin(x) + cos(2*x) == 1;
solve(eqn, x, 'PrincipalValue', true)
ans =
0

単純化ルールによる結果の効率化

次の方程式を解いてみます。既定では、solve は数学的に正しくない可能性のある単純化を適用しません。そのため、solve はこの方程式をシンボリックに解くことができません。

syms x
eqn = exp(log(x)*log(3*x)) == 4;
solve(eqn, x)
Warning: Unable to solve symbolically. Returning a numeric solution using vpasolve. 
> In solve (line 304) 
ans =
- 14.009379055223370038369334703094 - 2.9255310052111119036668717988769i

IgnoreAnalyticConstraintstrue に設定して、solve で求解できる可能性のある単純化を適用します。詳細は、アルゴリズムを参照してください。

S = solve(eqn, x, 'IgnoreAnalyticConstraints', true)
S =
 (3^(1/2)*exp(-(log(256) + log(3)^2)^(1/2)/2))/3
  (3^(1/2)*exp((log(256) + log(3)^2)^(1/2)/2))/3

solve は、求解を可能にする単純化を適用します。適用される単純化が常に有効であるとは限りません。したがって、このモードにおける解は正しくなかったり完全ではなかったりする可能性があるため、検証する必要があります。

変数についての仮定の無視

関数 sym と関数 syms を使用して、シンボリック変数の仮定を設定できます。

変数 x は正の値のみをもつと仮定します。

syms x positive

仮定をもつ変数について方程式または方程式系を解く場合、ソルバーは仮定と矛盾のない解のみを返します。x について、次の方程式を解きます。

eqn = x^2 + 5*x - 6 == 0;
solve(eqn, x)
ans =
1

IgnorePropertiestrue に設定して、仮定を満たさない解を可とします。

solve(eqn, x, 'IgnoreProperties', true)
ans =
 -6
  1

計算を続けるため、変数 x に設定された仮定を syms を使用して再作成することで消去します。

syms x

root を含むシンボリック解の数値的近似

多項式を解く際、solveroot を含む解を返す場合があります。これらの解を数値的に近似するには vpa を使用します。次の方程式と解を考えます。

syms x
eqn = x^4 + x^3 + 1 == 0;
s = solve(eqn, x)
s =
 root(z^4 + z^3 + 1, z, 1)
 root(z^4 + z^3 + 1, z, 2)
 root(z^4 + z^3 + 1, z, 3)
 root(z^4 + z^3 + 1, z, 4)

この解にはパラメーターがないため、vpa を使用して数値的に近似します。

vpa(s)
ans =
     0.5189127943851558447865795886366 - 0.666609844932018579153758800733i
     0.5189127943851558447865795886366 + 0.666609844932018579153758800733i
 - 1.0189127943851558447865795886366 - 0.60256541999859902604398442197193i
 - 1.0189127943851558447865795886366 + 0.60256541999859902604398442197193i

高階数多項方程式の求解

より高階数の多項方程式を解く場合、結果を返すためにソルバーでrootが使用される場合があります。3 次の方程式の解を求めます。

syms x a
eqn = x^3 + x^2 + a == 0;
solve(eqn, x)
ans = 

(root(z3+z2+a,z,1)root(z3+z2+a,z,2)root(z3+z2+a,z,3))

MaxDegree をもつソルバーを呼び出して、このような方程式の陽的な解を求めてみます。このオプションでは、ソルバーで陽的な解が返されるように、多項式の最大次数が指定されます。既定値は、2 です。この値を増やすと、より高階数の多項式の陽的な解を得ることができます。

MaxDegree の値を 3 に増やすことで、同じ方程式を陽的解について解きます。

S = solve(eqn, x, 'MaxDegree', 3)
S = 

(19σ1+σ1-13-118σ1-σ12-13-319σ1-σ1i2-118σ1-σ12-13+319σ1-σ1i2)ここで  σ1=a2+1272-1729-a2-1271/3

入力引数

すべて折りたたむ

求解する方程式。シンボリック式またはシンボリック方程式として指定します。関係演算子 == によって、シンボリック方程式を定義します。eqn がシンボリック式 (右辺なし) の場合、ソルバーは右辺が 0 であると仮定し、方程式 eqn == 0 の解を求めます。

方程式で求解される変数。シンボリック変数として指定します。既定では、solvesymvar によって決定された変数を使用します。

方程式系。シンボリック式またはシンボリック方程式として指定します。eqns の要素が 1 つでもシンボリック式 (右辺をもたない) であれば、solve は要素を 0 に等しいとします。

方程式または方程式系で求解される変数。シンボリック変数として指定します。既定では、solvesymvar によって決定された変数を使用します。

これらの変数が指定される順序によって、ソルバーが解を返す順序が決まります。

名前と値のペアの引数

例: 'Real',true を指定するとソルバーは実数解を返します。

解のパラメーターおよび解が成立するために必要な条件を返す際のフラグ。'ReturnConditions' とこれらの値のいずれかから成るコンマ区切りのペアとして指定します。

falseパラメーター化された解を返しません。解の成立条件を返しません。関数 solve は適切な値でパラメーターを置き換えます。
true解のパラメーターと解の成立条件を返します。単一の出力変数をもつ呼び出しに対して、solveparameters および conditions のフィールドをもつ構造体を返します。複数出力の変数に対しては、solve はパラメーターおよび条件を最後の 2 つの出力変数に割り当てます。これは、出力変数の数は求める変数の数に 2 を足したものと等しくなければならないことを意味します。

例: [v1, v2, params, conditions] = solve(sin(x) +y == 0,y^2 == 3,'ReturnConditions',true) はパラメーターを params に、条件を conditions に返します。

式および方程式に適用される単純化ルール。'IgnoreAnalyticConstraints' およびこれらの値のいずれかにより成るコンマ区切りペアとして指定します。

false厳格な単純化ルールを使用します。
true純粋に代数的な単純化を式および方程式に適用します。IgnoreAnalyticConstraintstrue に設定すると、ソルバーを直接使用する場合に複雑な結果が返されるような方程式に対して、単純な解が得られます。場合によっては、他の方法では解けない方程式や方程式系の解を solve で求められるようにもなります。IgnoreAnalyticConstraintstrue に設定すると、結果が誤りがあったり、不完全になることがあります。

変数のプロパティと不整合な解を返すためのフラグ。'IgnoreProperties' およびこれらの値のいずれかから成るコンマ区切りのペアで指定します。

false変数のプロパティと不整合な解を除外しません。
true変数のプロパティと不整合な解を除外します。

ソルバーが陽的な式を使用する多項方程式の最大次数。5 より小さい正の整数で指定します。ソルバーは、指定値より高次の多項方程式の解を求める場合は、べき乗根を含む陽的な式を使用しません。

1 つの解を返すフラグ。'PrincipalValue' およびこれらの値のいずれかから成るコンマ区切りのペアとして指定します。

falseすべての解を返します。
true1 つの解のみを返します。方程式または方程式系に解がない場合は、ソルバーによって空のシンボリック オブジェクトが返されます。

このフラグは 'Real' および以下の値のいずれかで構成され、コンマ区切りペアとして指定すると、実数解のみを返します。

falseすべての解を返します。
true元の方程式の部分式がすべて実数を表すような解のみを返します。また、方程式のシンボリック パラメーターはすべて実数を表すことが仮定されます。

出力引数

すべて折りたたむ

シンボリック配列として返される方程式の解。シンボリックな配列のサイズは、解の数と一致します。

構造体として返される方程式系の解。構造体のフィールド数は、方程式系の独立変数の数と一致します。ReturnConditionstrue に設定されている場合、関数 solve は解のパラメーターおよび解の成立条件を含む、2 つの追加フィールドを返します。

シンボリック変数として返される方程式系の解。出力変数またはシンボリックな配列の数は、方程式系の独立変数の数と等しくなければなりません。複数の独立変数 vars を陽的に指定すると、ソルバーは同じ順序で解を返します。vars を指定しない場合、ツールボックスは独立変数をアルファベット順に並べ替えてから、それらの変数の解を出力変数に代入します。

生成されたパラメーターのベクトルとして返される解のパラメーター。この出力引数は、ReturnConditionstrue の場合にのみ返されます。与えられた出力引数が 1 つの場合、parameters は構造体のフィールドとして返されます。複数の出力引数が与えられた場合、parameters は最後から 2 番目の出力引数として返されます。生成されたパラメーターは MATLAB ワークスペースに表示されません。parameters を使用してアクセスする必要があります。

例: [solx, params, conditions] = solve(sin(x) == 0, 'ReturnConditions', true) は、パラメーター k を引数 params に返します。

解の成立条件。シンボリック式のベクトルとして返されます。この出力引数は、ReturnConditionstrue の場合にのみ返されます。与えられた出力引数が 1 つの場合、conditions は構造体のフィールドとして返されます。複数の出力引数が与えられた場合、conditions は最後の出力引数として返されます。

例: [solx, params, conditions] = solve(sin(x) == 0, 'ReturnConditions', true) は条件 in(k, 'integer')conditions に返します。solx の解はこの条件下でのみ有効です。

ヒント

  • solve で解を求められず ReturnConditionsfalse である場合、関数 solve は内部で数値ソルバー vpasolve を呼び出して数値解を求めようとします。solve で解を求められず ReturnConditionstrue である場合、solve は警告と共に空の解を返します。解が存在しない場合、solve は警告なしで空の解を返します。シンボリック パラメーターを使用しない多項方程式や多項方程式系では、数値ソルバーによってすべての解が返されます。シンボリック パラメーターを使用しない非多項方程式や非多項方程式系の場合、数値ソルバーによって 1 つの解だけが返されます (解が存在する場合)。

  • 解にパラメーターが含まれており ReturnConditionstrue である場合、solve は解のパラメーターと解の成立条件を返します。ReturnConditionsfalse の場合、関数 solve はパラメーターの値を選択して対応する値を返すか、特定の値を選択せずにパラメーター化された解を返すかします。後者の場合、solve は警告を表示すると共に、返された解に含まれるパラメーターの値も示します。

  • いずれの条件にもパラメーターが含まれない場合、パラメーターは任意の複素値を取り得ることを意味します。

  • solve の出力には、solve によって生成されたパラメーターに加えて、入力方程式からのパラメーターが含まれる場合があります。

  • solve によって導入されたパラメーターは MATLAB ワークスペースに表示されません。パラメーターを含む出力引数を使用してアクセスする必要があります。または、MATLAB ワークスペースでパラメーターを使用するため、syms を使用してパラメーターを初期化します。たとえば、パラメーターが k の場合は、syms k を使用します。

  • 変数名 parameters および conditionssolve の入力として許可されていません。

  • 構文 S = solve(eqn,var,'ReturnConditions',true)S をシンボリック配列ではなく構造体として返します。

  • 微分方程式の解を求めるには、dsolve 関数を使用します。

  • 方程式系の解を求めるときには、常に結果は出力引数に代入されます。出力引数を使用すれば、方程式系の解の値にアクセスできます。

  • MaxDegree では 5 より小さい正の整数のみを受け入れます。これは、一般的に、次数が 4 を超える多項式の根には陽的表現が存在しないからです。

  • 出力変数 y1,...,yN は、solve で方程式または方程式系を解く対象となる変数を指定しません。y1,...,yNeqns に含まれる変数であっても、solve(eqns) が正しい順序で y1,...,yN に解を代入する保証はありません。したがって、[b,a] = solve(eqns) を実行する際、a の解が b に代入されたり、その逆になる可能性もあります。

    返される解の順序を確定するには、変数 vars を指定します。たとえば、呼び出し [b,a] = solve(eqns,b,a) は、a の解を a に、b の解を b に代入します。

アルゴリズム

IgnoreAnalyticConstraints を使用する際は、ソルバーによって以下のルールが方程式の両辺に適用されます。

  • 任意の a および b について、log(a) + log(b) = log(a·b) が成り立つ。特に、a、b、c のすべての値に対して、次の等式が有効である。

      (a·b)c = ac·bc.

  • 任意の a および b について、log(ab) = b·log(a) が成り立つ。特に、a、b、c のすべての値に対して、次の等式が有効である。

      (ab)c = ab·c.

  • f および g が標準的な数学関数、かつ任意の微小な正数について f(g(x)) = x である場合、すべての複素数 x に対して f(g(x)) = x が有効であるものとする。以下に例を示します。

    • log(ex) = x

    • asin(sin(x)) = x, acos(cos(x)) = x, atan(tan(x)) = x

    • asinh(sinh(x)) = x, acosh(cosh(x)) = x, atanh(tanh(x)) = x

    • 任意の k の値について Wk(x·ex) = x

  • ソルバーは、0 を除く任意の式で方程式の両辺を乗算できる。

  • 多項方程式の解は完全でなければならない。

R2006a より前に導入