シンボリック変数の仮定の使用
既定の仮定
Symbolic Math Toolbox™ の既定の設定では、シンボリック変数は複素変数です。たとえば、z
を次のようにシンボリック変数として宣言する場合を考えます。
syms z
この場合、MATLAB® は z
が複素変数であると仮定します。シンボリック変数が複素数または実数のいずれとして仮定されているかを確認するには、assumptions
を随時使用できます。z
複素変数である場合、assumptions(z)
は次のように空のシンボリック オブジェクトを返します。
assumptions(z)
ans = Empty sym: 1-by-0
仮定の設定
シンボリック変数の仮定を設定するには、関数 assume
を使用します。たとえば、変数 x
は非負であると仮定します。
syms x assume(x >= 0)
assume
は変数に対するすべての以前の仮定を新しい仮定で置き換えます。新しい仮定を既存の仮定に追加する場合は、assumeAlso
を使用します。たとえば、x
は同時に整数であるという仮定を追加します。ここで、変数 x
は非負の整数です。
assumeAlso(x,'integer')
assume
と assumeAlso
を使用すると、変数または式が次のセットのいずれに属しているかを記述できます。整数、正の数値、有理数、実数。
sym
または syms
を使用してシンボリック変数を宣言する際に、仮定を設定することもできます。たとえば、実数のシンボリック変数 a
および b
ならびに正のシンボリック変数 c
を作成します。
a = sym('a', 'real'); b = sym('b', 'real'); c = sym('c', 'positive');
より効率的にはこうです。
syms a b real syms c positive
sym
または syms
コマンドを使用してシンボリック オブジェクトに代入可能な仮定には、実数、有理数、整数および正の数があります。
既存の仮定の確認
シンボリック変数に設定されているすべての仮定を確認するには、変数名を入力引数に指定して、関数 assumptions
を使用します。たとえば、次のコマンドは変数 x
で現在使用されている仮定を返します。
assumptions(x)
MATLAB ワークスペースのすべてのシンボリック変数で使用されている仮定をすべて確認するには、入力引数を指定せずに、assumptions
を使用します。
assumptions
詳細については、変数に設定された仮定の確認を参照してください。
シンボリック オブジェクトおよびその仮定の削除
シンボリック オブジェクトとその仮定は別々に保存されます。x
が実数であるという仮定を設定する場合を考えます。
syms x assume(x,'real')
これを使用すると、実際にはシンボリック オブジェクト x
と、それが実数であるという仮定が作成されます。オブジェクトは MATLAB ワークスペースに保存され、仮定はシンボリック エンジンに保存されます。MATLAB ワークスペースからシンボリック オブジェクトを消去する際に次を使用しても、
clear x
x
が実数であるという仮定は、シンボリック エンジン中に残ります。sym
を使用してシンボリック変数 x
をあらためて宣言すると、x
は既定の仮定でなく実数であるという仮定を継承します。後で方程式を解き、シンボリック変数 x
について式を単純化する場合、不完全な結果が得られることがあります。
メモ
syms
を使用して変数を宣言する場合、既存の仮定が消去されます。sym
を使用して変数を宣言する場合、既存の仮定は消去されません。
たとえば、x
が実数であるという仮定により、多項式 x
2 + 1 が根を持たなくなります。
syms x real clear x x = sym('x'); solve(x^2 + 1 == 0, x)
ans = Empty sym: 0-by-1
シンボリック エンジンには x
が実数であるという仮定が保存されており、この仮定がシンボリック変数 x
に継承されているため、この多項式の複素根は存在しなくなります。仮定を消去するには、次のように入力します。
syms x
仮定を消去した後も、シンボリック オブジェクトは MATLAB ワークスペースに残ります。シンボリック オブジェクトと仮定をいずれも削除する場合は、下記の 2 つのコマンドを使います。
仮定を消去するには、次のように入力します。
syms x
シンボリック オブジェクトを削除するには、次のように入力します。
clear x
シンボリック オブジェクトの消去の詳細は、仮定の消去とシンボリック エンジンのリセットを参照してください。