ドキュメンテーション

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

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')
A = sym('a', [n1 ... nM])
A = sym('a', n)
sym(___, set)
sym(___, 'clear')
sym(num)
sym(num,flag)
symexpr = sym(h)

説明

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

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

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

sym(___, set) はシンボリック変数またはシンボリック配列を作成し、変数または配列のすべての要素が set に属するという仮定を設定します。ここで、set が取りうる値は、'real''positive''integer' または 'rational' です。

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

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

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

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

シンボリック変数の作成

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

x = sym('x');
y = sym('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_1, a1_2_1]
[ a2_1_1, a2_2_1]
A(:,:,2) =
[ a1_1_2, a1_2_2]
[ a2_1_2, a2_2_2]

シンボリック数の作成

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

inaccurate1 = sym(1/1234567)
accurate1 = 1/sym(1234567)

inaccurate2 = sym(sqrt(1234567))
accurate2 = sqrt(sym(1234567))

inaccurate3 = sym(exp(pi))
accurate3 = exp(sym(pi))
inaccurate1 =
7650239286923505/9444732965739290427392
accurate1 =
1/1234567

inaccurate2 =
4886716562018589/4398046511104
accurate2 =
1234567^(1/2)

inaccurate3 =
6513525919879993/281474976710656
accurate3 =
exp(pi)

大きなシンボリック数の作成

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

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

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

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

関数ハンドルからシンボリック式を作成

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 =
[ x,   x,   x]
[ x, 2*x, 3*x]
[ x, 3*x, 6*x]

変数作成時に仮定を設定

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

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

assumptions を使用して、xy、および z に対する仮定をチェックします。

assumptions
ans =
[ in(z, 'integer'), in(t, 'rational'), in(x, 'real'), 0 < y]

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

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

行列要素についての仮定を設定

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

A = sym('A%d%d',[2 2],'positive')
A =
[ A11, A12]
[ A21, A22]

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

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

assumptions を使用して、A の要素に設定された仮定をチェックします。

assumptions(A)
ans =
[ 0 < A11, 0 < A12, 0 < A21, 0 < A22]

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

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

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

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

浮動小数点値の変換方法の選択

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

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

r = sym(pi)
f = sym(pi,'f')
d = sym(pi,'d')
e = sym(pi,'e')
r =
pi
 
f =
884279719003555/281474976710656
 
d =
3.1415926535897931159979634685442
 
e =
pi - (198*eps)/359

入力引数

すべて折りたたむ

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

例: xy123z_1

MATLAB 関数ハンドルで指定される無名関数

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

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

例: aba_bc

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

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

シンボリック変数またはシンボリック行列に設定された仮定。'real''positive''integer'、または 'rational' のいずれかの文字ベクトルとして指定します。

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

例: 10pihilb(3)

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

'r'sym"有理数" モードを使用するとき、適度なサイズの整数 pq について、p/qp*pi/qsqrt(p)2^q および 10^q の形式の式を評価して得られる浮動小数点数を、対応するシンボリック型に変換します。これは、本来の評価に含まれる丸め誤差を効率的に補正します。ただし、浮動小数点値を正確に表していない場合があります。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 を返します。返された有理数の値は、シンボリック数に変換した浮動小数点数の正確な値です。

出力引数

すべて折りたたむ

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

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') はエラーをスローします。

代替可能な機能

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

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

R2006a より前に導入