Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

sym

シンボリック変数、シンボリック式、シンボリック関数、シンボリック行列を作成

説明

x = sym('x') は、シンボリック スカラー変数 x を作成します。

A = sym('a',[n1 ... nM]) は、自動的に生成された要素が設定される n1×...×nM のシンボリック配列を作成します。たとえば、A = sym('a',[1 3]) は行ベクトル A = [a1 a2 a3] を作成します。生成された要素 a1a2 および a3 は MATLAB® ワークスペースに表示されません。多次元配列では、これらの要素は接頭辞 a をもち、その後に a1_3_2 のように _ を区切り記号として使用した要素のインデックスが続きます。

A = sym('a',n) は、自動的に生成された要素が設定される nn 列のシンボリック行列を作成します。

sym(___,set) はシンボリック変数またはシンボリック配列を作成し、変数またはすべての配列要素が set に属するという仮定を設定します。ここで、set が取りうる値は、'real''positive''integer' または 'rational' です。文字ベクトルの string 配列または cell 配列を指定して、複数の仮定を結合することもできます。たとえば、set["positive" "rational"] または {'positive','rational'} として指定することで、正の有理数の値を仮定します。

sym(___,'clear') は、シンボリック変数またはシンボリック配列に設定された仮定を消去します。上記のいずれの構文でも、'clear'set を併用しないかぎり、入力引数の後に 'clear' を指定できます。sym の同一関数呼び出し内で、仮定を設定し、消去することはできません。

sym(num) は、num で指定される数値または数値行列をシンボリック数またはシンボリック行列に変換します。

sym(num,flag) は、浮動小数点数からシンボリック数への変換において、flag で指定された方法を使用します。

sym(strnum) は、strnum で指定される文字ベクトルまたは string を、近似をしない正確なシンボリック数に変換します。

symexpr = sym(h) は、関数ハンドル h に関連付けられている MATLAB 無名関数からシンボリック式または行列 symexpr を作成します。

symexpr = sym(M) は、symmatrix 型のシンボリック行列変数 Msym 型のシンボリック スカラー変数の配列 symexpr に変換します。

すべて折りたたむ

シンボリック変数 xy を作成します。

x = sym('x')
x = x
y = sym('y')
y = y

自動生成された要素 a1, ..., a4 から成る 1 行 4 列のシンボリック ベクトル a を作成します。

a = sym('a',[1 4])
 
a =
 
[a1, a2, a3, a4]
 

書式文字ベクトルを最初の引数として使用し、要素名の書式を指定できます。sym は、書式文字ベクトルの %d を要素のインデックスに置き換えて、要素名を生成します。

b = sym('x_%d',[1 4])
 
b =
 
[x_1, x_2, x_3, x_4]
 

この構文は、シンボリック変数 a1、...、a4x_1、...、x_4 を MATLAB® ワークスペースに作成しません。標準のインデックス方法を使用して a および b の要素にアクセスします。

a(1)
b(2:3)
 
ans =
 
a1
 
 
ans =
 
[x_2, x_3]
 

自動的に生成される要素をもつ 3 行 4 列のシンボリック行列を作成します。関数 sym は、Ai_j の形式の行列要素を生成します。ここで、sym は要素 A1_1、...、A3_4 を生成します。

A = sym('A',[3 4])
 
A =
 
[A1_1, A1_2, A1_3, A1_4]
[A2_1, A2_2, A2_3, A2_4]
[A3_1, A3_2, A3_3, A3_4]
 

書式文字ベクトルを最初の引数として使用して、要素名 x_1_1、...、x_4_4 を持つ 4 行 4 列の行列を作成します。sym は、書式文字ベクトルの %d を要素のインデックスに置き換えて、要素名を生成します。

B = sym('x_%d_%d',4)
 
B =
 
[x_1_1, x_1_2, x_1_3, x_1_4]
[x_2_1, x_2_2, x_2_3, x_2_4]
[x_3_1, x_3_2, x_3_3, x_3_4]
[x_4_1, x_4_2, x_4_3, x_4_4]
 

この構文は、シンボリック変数 A1_1、...、A3_4x_1_1、...、x_4_4 を MATLAB® ワークスペースに作成しません。行列の要素にアクセスするには、かっこを使用します。

A(2,3)
B(4,2)
 
ans =
 
A2_3
 
 
ans =
 
x_4_2
 

自動的に生成される要素 a1,1,1,,a2,2,2 をもつ 2 x 2 x 2 のシンボリック配列を作成します。

A = sym('a',[2 2 2])
A(:,:,1) = 

(a1,1,1a1,2,1a2,1,1a2,2,1)

A(:,:,2) = 

(a1,1,2a1,2,2a2,1,2a2,2,2)

数値をシンボリック数またはシンボリック式に変換します。精度を高めるには、式全体ではなく部分式に sym を使用します。MATLAB® ではまず式を浮動小数点数に変換しますが、これは精度の低下につながることから、式全体への sym の使用は不正確さを伴います。sym ではこの精度低下を必ずしも回復できません。

inaccurate1 = sym(1/1234567)
inaccurate1 = 

76502392869235059444732965739290427392

accurate1 = 1/sym(1234567)
accurate1 = 

11234567

inaccurate2 = sym(sqrt(1234567))
inaccurate2 = 

48867165620185894398046511104

accurate2 = sqrt(sym(1234567))
accurate2 = 1234567
inaccurate3 = sym(exp(pi))
inaccurate3 = 

6513525919879993281474976710656

accurate3 = exp(sym(pi))
accurate3 = eπ

15 桁以上でシンボリック数を作成するときは、引用符を使用して数値を正確に表現します。

inaccurateNum = sym(11111111111111111111)
inaccurateNum = 11111111111111110656
accurateNum = sym('11111111111111111111')
accurateNum = 11111111111111111111

一重引用符を使用してシンボリック複素数を作成するとき、数の虚数部を 1i2i などで指定します。

sym('1234567 + 1i')
ans = 1234567+i

MATLAB® ハンドルに関連付けられた無名関数をシンボリック式とシンボリック行列に変換します。

h_expr = @(x)(sin(x) + cos(x));
sym_expr = sym(h_expr)
sym_expr = cos(x)+sin(x)
h_matrix = @(x)(x*pascal(3));
sym_matrix = sym(h_matrix)
sym_matrix = 

(xxxx2x3xx3x6x)

シンボリック変数 xyz、および t を作成します。同時に、x は実数、y は正数、z は有理数、t は正の整数という仮定を設定します。

x = sym('x','real');
y = sym('y','positive');
z = sym('z','rational');
t = sym('t',{'positive','integer'});

assumptions を使用して、xyz および t における仮定をチェックします。

assumptions
ans = (tZxRzQ1t0<y)

計算を続けるため、assume を使用して仮定を消去します。

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

シンボリック行列を作成し、行列の各要素に対して仮定を設定します。

A = sym('A%d%d',[2 2],'positive')
A = 

(A11A12A21A22)

A の 1 番目の要素を含む方程式を解きます。MATLAB® は、この要素が正の値であると仮定します。

solve(A(1,1)^2-1, A(1,1))
ans = 1

assumptions を使用して、A の要素に関する仮定をチェックします。

assumptions(A)
ans = (0<A110<A120<A210<A22)

assume を使用して、シンボリック行列の要素に対して以前に設定された仮定をすべて消去します。

assume(A,'clear');
assumptions(A)
 
ans =
 
Empty sym: 1-by-0
 

同じ方程式を再度解きます。

solve(A(1,1)^2-1, A(1,1))
ans = 

(-11)

pi をシンボリック値に変換します。

オプションの第 2 引数を指定して、変換方法を選択します。これには 'r''f''d' または 'e' が指定できます。既定値は 'r' です。変換方法の詳細については、入力引数のセクションを参照してください。

r = sym(pi)
r = π
f = sym(pi,'f')
f = 

884279719003555281474976710656

d = sym(pi,'d')
d = 3.1415926535897931159979634685442
e = sym(pi,'e')
e = 

π-198eps359

3 行 3 列および 3 行 1 列のシンボリック行列変数を作成します。

syms A [3 3] matrix
syms X [3 1] matrix

XTAX のヘッセ行列を求めます。

f = X.'*A*X;
M = diff(f,X,X.')
M = AT+A

シンボリック行列変数からの結果をシンボリック スカラー変数の行列に変換します。

S = sym(M)
S = 

(2A1,1A1,2+A2,1A1,3+A3,1A1,2+A2,12A2,2A2,3+A3,2A1,3+A3,1A2,3+A3,22A3,3)

または、symmatrix2sym を使用して、シンボリック行列変数をシンボリック スカラー変数の配列に変換することもできます。

S = symmatrix2sym(M)
S = 

(2A1,1A1,2+A2,1A1,3+A3,1A1,2+A2,12A2,2A2,3+A3,2A1,3+A3,1A2,3+A3,22A3,3)

入力引数

すべて折りたたむ

変数名。文字ベクトルまたは string として指定します。引数 x は、有効な変数名でなければなりません。つまり、x の先頭は文字で、英数字とアンダースコアのみが使用されていなければなりません。変数名が有効であるかどうかを検証するには isvarname を使用します。

例: 'x', "y123", 'z_1'

自動生成される行列要素の接頭辞。文字ベクトルまたは string として指定します。引数 a は、有効な変数名でなければなりません。つまり、a の先頭は文字で、英数字とアンダースコアのみが使用されていなければなりません。変数名が有効であるかどうかを検証するには isvarname を使用します。

引数 a を指定し、そのベクトル、行列、または配列の次元を引数 [n1 ... nM] で指定する場合、a'a_%d_%d' のような形式文字ベクトルを含めることができます。例については、シンボリック ベクトルの作成およびシンボリック行列の作成を参照してください。

例: 'a', "b", 'a_bc'

ベクトル、行列または配列の次元。整数のベクトルとして指定します。ショートカットとして、整数を 1 つだけ指定して正方行列を作成することもできます。たとえば、A = sym('A',3) は 3 行 3 列の正方行列を作成します。

例: [2 3]

シンボリック変数またはシンボリック行列に設定された仮定。文字ベクトル、string 配列、または文字ベクトルから成る cell 配列として指定します。使用可能な仮定は 'integer''rational''real'、または 'positive' です。

文字ベクトルの string 配列または cell 配列を指定して、複数の仮定を結合することができます。たとえば、set["positive" "rational"] または {'positive','rational'} として指定することで、正の有理数の値を仮定します。

例: 'integer'

シンボリック数またはシンボリック行列に変換される数値。数値、シンボリック定数、または数値行列として指定します。

例: pi

変換方法。次の表のいずれかの文字に指定します。

'r'sym"有理数" モードを使用するとき、適度なサイズの整数 pq について、p/qp*pi/qsqrt(p)2^q、および 10^q の形式の式を評価して得られる浮動小数点数を、対応するシンボリック型に変換します。たとえば、sym(1/10,'r')1/10 を返します。このモードは、本来の評価に含まれる丸め誤差を効率的に補正します。ただし、浮動小数点値を正確に表していない場合があります。sym は、単純な有理近似を見つけられない場合、フラグ 'f' を指定して使用するのと同じ手法を使用します。
'd'sym"小数" モードを使用するとき、digits の現在の設定から桁数を得ます。16 桁より少ない変換では多少精度が低下します。一方、16 桁以上の桁は保証されない可能性があります。たとえば、sym(4/3,'d') は 10 桁の精度では 1.333333333 を返します。一方、20 桁の精度では 1.3333333333333332593 を返します。後者は 3 の連続で終了していませんが、4/3 に最も近い浮動小数点数の正確な小数表現です。
'e'sym"推定誤差" モードを使用するとき、有理数モードで得られた結果を変数 eps を含む項で補完します。この項は、理論上の有理式と実際の浮動小数点値との間の差を推定します。たとえば、sym(3*pi/4,'e')(3*pi)/4 - (103*eps)/249 を返します。
'f'sym"浮動小数点から有理数へ" のモードを使用するとき、N*2^e または -N*2^e の形式のすべての値についてシンボリック形式を返します。ここで、N >= 0 は非負の整数で、e は整数です。返されたシンボリック数は、浮動小数点の値に等しい正確な有理数です。たとえば、sym(1/10,'f')3602879701896397/36028797018963968 を返します。

シンボリック数を表す文字。文字ベクトルまたは string として指定します。

例: '1/10'

MATLAB 関数ハンドルで指定される無名関数。詳細は、無名関数を参照してください。

例: h = @(x)sin(x)

変換されるシンボリック行列変数。シンボリック行列変数として指定します。

または、symmatrix2sym を使用して、シンボリック行列変数をシンボリック スカラー変数の配列に変換することもできます。

例: syms A 2 matrix; M = A^2 + eye(2)

データ型: symmatrix

出力引数

すべて折りたたむ

変数。シンボリック スカラー変数として返されます。

自動生成される要素をもつベクトルまたは行列。シンボリック スカラー変数から成るシンボリック ベクトルまたはシンボリック行列として返されます。このベクトルまたは行列の要素は MATLAB ワークスペースに表示されません。

MATLAB 無名関数またはシンボリック行列変数から変換される式または行列。シンボリック スカラー変数から成るシンボリック式またはシンボリック行列として返されます。

データ型: sym

ヒント

  • pi = sym(pi)delta = sym('1/10') のようなステートメントは、pi1/10 の値を継承するように、浮動小数点近似を行わずにシンボリック数を作成します。この方法で作成された pi は、pi という名前のワークスペース変数にシンボリック数を格納します。このワークスペース変数は、組み込みの数値関数を一時的に同じ名前で置き換えます。pi の浮動小数点表現を元に戻すには clear pi を使用します。

  • sym は、文字ベクトル入力中の i を常に識別子として扱います。虚数 i を入力するには、代わりに 1i を使用します。

  • clear x は、実数、正の数値または assumesym、または syms によって設定された何らかの仮定のような、仮定のシンボリック オブジェクトは消去しません。仮定を削除するには、次のいずれかのオプションを使用します。

    • assume(x,'clear')x に影響を与えるすべての仮定を削除します。

    • clear all は MATLAB ワークスペースのすべてのオブジェクトを消去して、シンボリック エンジンをリセットします。

    • assumeassumeAlso では、変数に対して仮定をさらに柔軟に設定できます。

  • 数値ベクトルまたは数値行列の 1 つ以上の要素をシンボリック数で置き換えるとき、MATLAB は、その数値を倍精度数に変換します。

    A = eye(3);
    A(1,1) = sym(pi)
    A =
        3.1416         0         0
             0    1.0000         0
             0         0    1.0000

    数値ベクトルまたは数値行列の要素を、シンボリック変数、シンボリック式またはシンボリック関数で置き換えることはできません。これらの要素は倍精度数に変換できないからです。たとえば、A(1,1) = sym('a') はエラーをスローします。

  • 構文 A = sym('a',[n1 ... nM]) を使用する場合、関数 sym はシンボリック配列 A のみを MATLAB ワークスペースに割り当てます。A の自動的に生成された要素も割り当てるには、代わりに関数 syms を使用します。たとえば、syms a [1 3] は、MATLAB ワークスペースで行ベクトル a = [a1 a2 a3] およびシンボリック変数 a1a2 および a3 を作成します。

代替可能な機能

その他のシンボリック変数作成方法

複数のシンボリック変数を 1 回の関数呼び出しで作成するには、syms を使用します。syms を使用すると、名前付き変数から仮定も消去されます。

バージョン履歴

R2006a より前に導入

すべて展開する