Main Content

関数 syms または sym の選択

Symbolic Math Toolbox™ では、syms または sym のいずれかを使用してシンボリック オブジェクトを宣言できます。これらの 2 つの関数は概念的に異なります。

  • 関数 syms は同じ名前で MATLAB® 変数に自動的に代入されるシンボリック オブジェクトを "作成" します。

  • 関数 sym は同じ名前または異なる名前で MATLAB 変数に代入できるシンボリック オブジェクトを "参照" します。

シンボリック変数の MATLAB 変数への代入

関数 syms は変数を動的に "作成" します。たとえば、コマンド syms x はシンボリック変数 x を作成し、それを自動的に同じ名前で MATLAB 変数に代入します。

syms x
x
x = x

関数 sym は異なる名前で MATLAB 変数に代入できるシンボリック変数を "参照" します。たとえば、コマンド f1 = sym('x') はシンボリック変数 x を参照し、それを MATLAB 変数 f1 に代入します。

f1 = sym('x')
f1 = x

シンボリック数の作成

関数 syms を使用してシンボリック変数 x を "作成" し、それを自動的に MATLAB 変数 x に代入します。数値を MATLAB 変数 x に代入すると、その数値は倍精度で表されます。シンボリック変数への前回の代入は、今回の代入で上書きされます。x のクラスは double になります。

syms x
x = 1/33
x = 0.0303
class(x)
ans = 
'double'

関数 sym を使用して、浮動小数点を近似せずに正確なシンボリック数を "参照" します。その後、この数値を MATLAB 変数 x に代入できます。x のクラスは sym です。

x = sym('1/33')
x = 

133

class(x)
ans = 
'sym'

仮定によるシンボリック変数の作成

仮定を使用してシンボリック変数を作成すると、MATLAB はシンボリック変数とその仮定を別々に格納します。

関数 syms を使用して MATLAB 変数に同じ名前で代入されるシンボリック変数を "作成" します。仮定なしで新しいシンボリック変数を取得します。syms を使用して変数を宣言する場合、既存の仮定が消去されます。

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

sym を使用して既存のシンボリック変数を "参照" します。このシンボリック変数が MATLAB セッションで前に使用された場合、sym はシンボリック変数とその現在の仮定を参照します。前に使用されなかった場合、sym は仮定なしでシンボリック変数を作成します。

syms x positive
x = sym('x');
assumptions
ans = 0<x

多数のシンボリック変数の作成

多数のシンボリック変数を同時に "作成" するには、関数 syms を使用する方が便利です。1 行のコードで複数の変数を作成できます。

syms a b c

sym を使用する場合、MATLAB 変数を 1 つずつ宣言し、対応するシンボリック変数をそれらに "参照" させなければなりません。

a = sym('a');
b = sym('b');
c = sym('c');

シンボリック変数の配列の作成

シンボリック変数をその要素として含むシンボリック配列を宣言する場合、syms または sym のいずれかを使用できます。

コマンド syms a [1 3] は、ワークスペースで 1 行 3 列のシンボリック配列 a と、シンボリック変数 a1a2 および a3 を "作成" します。シンボリック変数 a1a2 および a3 は自動的にシンボリック配列 a に代入されます。

clear
syms a [1 3]
a
a = (a1a2a3)
whos
  Name      Size            Bytes  Class    Attributes

  a         1x3                 8  sym                
  a1        1x1                 8  sym                
  a2        1x1                 8  sym                
  a3        1x1                 8  sym                

コマンド a = sym('a',[1 3]) は、ワークスペースでシンボリック配列 a に代入されるシンボリック変数 a1a2 および a3 を "参照" します。要素 a1a2、および a3 はワークスペースで作成されません。

clear
a = sym('a',[1 3])
a = (a1a2a3)
whos
  Name      Size            Bytes  Class    Attributes

  a         1x3                 8  sym                

入れ子関数内のシンボリック変数

入れ子関数内でシンボリック変数を宣言するには、sym を使用します。たとえば、親関数ワークスペースで MATLAB 変数 x を明示的に定義し、x に同じ名前のシンボリック変数を参照させることができます。

function primaryFx
    x = sym('x')
    function nestedFx
        ...
    end
end

入れ子関数ではワークスペースが静的になるため、syms を使用して動的に変数を追加することはできません。

関連するトピック