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

sym

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

有効な変数名でなく、数値を定義しない文字ベクトルのサポートは削除されました。シンボリック式を作成するには、シンボリック変数を作成してから、それらに演算を使用します。たとえば、sym('x + 1') の代わりに syms x; x + 1 を、sym('exp(pi)') の代わりに exp(sym(pi)) を、f(var1,...varN) = sym('f(var1,...varN)') の代わりに syms f(var1,...varN) を使用します。

説明

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

A = sym('a',[n1 ... nM]) は、自動的に生成された要素が設定される n1 x ... x 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 を作成します。

すべて折りたたむ

シンボリック変数 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]
 

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

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

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

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

自動的に生成される要素をもつ 3 行 4 列のシンボリック行列を作成します。これらの要素は Ai_j の形式になり、要素 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 = (xRzQ1t0<ytZ)

計算を続けるため、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

入力引数

すべて折りたたむ

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

例: x, y123, z_1

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

例: h = @(x)sin(x); symexpr = sym(h)

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

例: a, b, a_bc

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

例: [2 3], [2,3], [2;3]

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

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

例: 'integer'

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

例: 10, pi, hilb(3)

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

'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 桁以上の桁は保証されない可能性があります。たとえば、10 桁の精度では sym(4/3,'d')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''pi'

出力引数

すべて折りたたむ

シンボリック変数として返される変数。

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

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

ヒント

  • pi = sym('pi')delta = sym('1/10') のようなステートメントは、pi1/10 の値を継承するように、浮動小数点近似を行わずにシンボリック数を作成します。この方法で作られた 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 より前に導入