Main Content

仮定の消去とシンボリック エンジンのリセット

MATLAB® ワークスペースに対応するシンボリック エンジン ワークスペースは、通常空です。MATLAB ワークスペースは、シンボリック変数の値を追跡し、必要に応じて評価対象としてシンボリック エンジンに渡します。ただし、シンボリック エンジンのワークスペースには、変数が実数か、正の数か、整数か、特定の値より大きいか小さいかなど、シンボリック変数について設定したすべての仮定が保存されています。これらの仮定は、計算に与える仮定の影響で説明しているように、方程式の解、単純化および変換に影響する場合があります。

たとえば、シンボリック変数 x を作成し、正であると仮定します。

syms x
assume(x > 0)

コマンド clear x を使用して MATLAB ワークスペースから変数 x を消去しても、シンボリック エンジンのワークスペースからは仮定は消去されません。

clear x
assumptions
ans =
0 < x

変数 x の仮定を消去するには、コマンド assume(x,'clear') を使用します。

syms x
assume(x > 0)
assume(x,'clear')
assumptions
ans =
Empty sym: 1-by-0

あるいは、syms を使用して仮定せずに、新しいシンボリック変数を作成できます。

syms x

シンボリック変数を消去し、シンボリック エンジンもリセットするには、コマンド clear all を使用します。

syms x positive
clear all
whos
assumptions
ans =
Empty sym: 1-by-0

以下に、一連のコマンドに対する MATLAB ワークスペースとシンボリック エンジンのワークスペースが応答でどのように異なるかを示します。

ステップコマンドMATLAB ワークスペースシンボリック エンジンのワークスペース
1syms x positive
または
syms x;
assume(x > 0)
xx > 0
2clear xx > 0
3syms xx
4clear all

変数に設定された仮定の確認

x などの変数の仮定が MATLAB ワークスペースに関連付けられたシンボリック エンジンのワークスペースに保存されているかどうかを確認するには、MATLAB ライブ エディターで関数 assumptions を使用します。

assumptions(x)

関数が空のシンボリック オブジェクトを返す場合は、変数に対する追加の仮定はありません 既定の仮定では、x は任意の複素数を表しています。それ以外の場合は、変数が表す値に対する追加の仮定があります。

たとえば、シンボリック変数 x を宣言する際に、この変数の値は実数であるという仮定を設定します。

syms x real
assumptions(x)
ans =
in(x, 'real')

仮定を設定する別の方法として、関数 assume を使用します。

syms z
assume(z ~= 0);
assumptions(z)
ans = 
z ~= 0

MATLAB ワークスペースのすべての変数で設定されている仮定を確認するには、入力引数を指定せずに、assumptions を使用します。

assumptions
ans =
[ in(x, 'real'), z ~= 0]

xz に設定されている仮定を消去します。

assume([x z],'clear')
assumptions
ans =
Empty sym: 1-by-0

同様に、次のコマンドを使用しても、xz から仮定は消去されます。

syms x z

計算に与える仮定の影響

仮定は、関数 solve と関数 simplify が返す結果を含めて、多くの計算に影響を与えます。たとえば、変数に追加の仮定を使用せずにこの方程式を解きます。

syms x
solve(x^4 == 1, x)
ans =
 -1
  1
 -1i
  1i

今度は、x が実数であると仮定して、この同じ方程式を解きます。

syms x real
solve(x^4 == 1, x)	
ans =
 -1
  1

関数 assumeAlso を使用して、x も正であるという仮定を追加します。

assumeAlso(x > 0)
solve(x^4 == 1, x)
ans =
  1

x を消去しても、x が正の実数であるという基本的な仮定は変わりません。

clear x
x = sym('x');
assumptions(x)
solve(x^4 == 1, x)
ans =
[ in(x, 'real'), 0 < x]
ans =
1

assume(x,'clear') または syms xx を消去すると、仮定が消去されます。

syms x
assumptions(x)
ans =
Empty sym: 1-by-0