Main Content

シンボリック数、シンボリック変数およびシンボリック式の作成

この例では、シンボリック数、シンボリック変数、およびシンボリック式を作成する方法を説明します。シンボリック数学による処理の詳細については、シンボリック計算の実行を参照してください。

正確な表現を使用したシンボリック数の作成

シンボリック数はsymを使用して作成できます。シンボリック数は正確な表現であり、浮動小数点数とは異なります。

sym を使用してシンボリック数を作成し、浮動小数点による同じ数値と比較します。

a1Sym = sym(1/3)
a1Sym = 

13

a1 = 1/3
a1 = 0.3333
a2Sym = sym(pi)
a2Sym = π
a2 = pi
a2 = 3.1416

シンボリック数は、正確な有理型で表現されます。一方、浮動小数点数は小数近似です。

シンボリック数の計算は正確です。この正確性について、sin(pi) をシンボリック的および数値的に求めることで示します。シンボリックな結果は正確ですが、数値の結果は近似です。

bSym = sin(sym(pi))
bSym = 0
b = sin(pi)
b = 1.2246e-16

sym を数値入力に対して使用すると、まず数値式が倍精度 (MATLAB® の既定の精度) の数値として評価されますが、この精度はあまり高くない可能性があります。次に、sym がその倍精度の数値に適用されます。倍精度として評価せずに正確な数値を表すには、引用符を使用して文字ベクトルとして表します。たとえば、非常に大きな整数を正確に表すためのシンボリック数を作成します。

inaccurateNum = sym(123456789012345678)
inaccurateNum = 123456789012345680
accurateNum = sym('123456789012345678')
accurateNum = 123456789012345678

数の虚数部を 1i2i のように指定して、シンボリック複素数を作成することもできます。

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

数のシンボリック表現の詳細については、数値のシンボリックへの変換を参照してください。

可変精度のシンボリック数の作成

可変精度の浮動小数点演算を使用してシンボリック数を作成するには、vpaを使用します。既定では、vpa は有効桁数 32 桁まで値を計算します。

piVpa = vpa(pi)
piVpa = 3.1415926535897932384626433832795

vpalog(2) などの数値式に対して使用すると、まず有効桁数が 32 桁未満である倍精度 (MATLAB の既定の精度) の数値としてその式が評価されます。次に、vpa がその倍精度の数値に適用されますが、この精度はあまり高くない可能性があります。より正確な結果が必要な場合は、sym を使用して倍精度の値をシンボリック数の式に変換し、vpa を使用して可変精度で結果を評価します。たとえば、log(2) を 17 桁の精度と 20 桁の精度で求めます。

vpaOnDouble = vpa(log(2))
vpaOnDouble = 0.69314718055994528622676398299518
vpaOnSym_17 = vpa(log(sym(2)),17)
vpaOnSym_17 = 0.69314718055994531
vpaOnSym_20 = vpa(log(sym(2)),20)
vpaOnSym_20 = 0.69314718055994530942

大きい数値を変換する場合、引用符を使用してその数値を正確に表現します。

inaccurateNum = vpa(123456789012345678)
inaccurateNum = 123456789012345680.0
accurateNum = vpa('123456789012345678')
accurateNum = 123456789012345678.0

シンボリック変数の作成

シンボリック変数の作成には、symsまたはsymを使用できます。これらの関数の標準的な使用法を以下に示します。

  • sym – 番号付きシンボリック変数、MATLAB 関数のシンボリック変数、または値が MATLAB ワークスペース内の名前と異なっているシンボリック数を作成します。

  • syms – 対話型のシンボリック ワークフロー、つまり MATLAB コマンド ラインまたは MATLAB ライブ スクリプトでのシンボリック変数作成に対して、"新しい" シンボリック変数を作成します。"新しい" シンボリック変数には仮定がありません。

syms コマンドは sym 構文の省略表現ですが、2 つの関数による仮定の処理は異なります。syms は、変数を作成する際に仮定を消去します。しかし、sym を使用した変数の再作成ではその仮定は消去されません。

symssym をそれぞれ使用して、シンボリック変数 x と y を作成します。

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

最初のコマンドは、MATLAB ワークスペースでシンボリック変数 x を作成します。この変数 x には値 x が代入されます。2 番目のコマンドは、値 y を持つシンボリック変数 y を作成します。

syms では、1 つのコマンドで複数の変数を作成できます。変数 ab および c を作成します。

syms a b c

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

番号付きシンボリック変数から成る MATLAB 配列を作成する場合、syms 構文よりも sym 構文のほうが便利です。したがって、多数の番号付きシンボリック変数の配列を作成するには、sym を使用します。

ワークスペースをクリアします。シンボリック変数 a1,,a20 を含む行ベクトルを作成し、MATLAB 変数 A に割り当てます。MATLAB ワークスペースの変数を表示します。

clear
A = sym('a',[1 20])
A = (a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15a16a17a18a19a20)
whos
  Name      Size            Bytes  Class    Attributes

  A         1x20                8  sym                

A は 20 個のシンボリック変数から成る 120 列の配列です。

symsyms を組み合わせることにより、多くの新しいシンボリック変数を対応する変数名で MATLAB ワークスペースに作成できます。

ワークスペースをクリアします。新しいシンボリック変数 a1, ..., a10 を作成し、それらの変数に MATLAB 変数名 a1, ..., a10 をそれぞれ割り当てます。MATLAB ワークスペースの変数を表示します。

clear
syms(sym('a',[1 10]))
whos
  Name      Size            Bytes  Class    Attributes

  a1        1x1                 8  sym                
  a10       1x1                 8  sym                
  a2        1x1                 8  sym                
  a3        1x1                 8  sym                
  a4        1x1                 8  sym                
  a5        1x1                 8  sym                
  a6        1x1                 8  sym                
  a7        1x1                 8  sym                
  a8        1x1                 8  sym                
  a9        1x1                 8  sym                

MATLAB ワークスペースには、シンボリック変数である 10 個の MATLAB 変数が含まれます。

syms コマンドは sym 構文の手頃な省略表現です。一般的な使用法は、対話型のシンボリック ワークフローに対して新しいシンボリック変数を作成することです。sym 構文を使用して次を作成します。

  • MATLAB 関数のシンボリック変数

  • 多数の番号付きシンボリック変数

  • 値が MATLAB ワークスペース内の名前と異なっているシンボリック変数

  • シンボリック数 (sym(5) など)

  • 以前に使用した同名のシンボリック変数から仮定を継承しているシンボリック変数

シンボリック式の作成

黄金比 φ= 1+ 52 を表すためにシンボリック変数を使ってみましょう。

sym を使用して黄金比を作成します。

phi = (1 + sqrt(sym(5)))/2;

これで、phi についてのさまざまな数学演算が実行できます。以下に例を示します。

f = phi^2 - phi - 1
f = 

52+122-52-32

次に、2 次関数 f=ax2+bx+c を調べます。まず、シンボリック変数 abc、および x を作成します。

syms a b c x

次に、算術式 ax2+bx+c を表すシンボリック式 f を作成します。

f = a*x^2 + b*x + c
f = ax2+bx+c

solve を使用し、x について 2 次方程式 f=0 を解きます。

x_0 = solve(f == 0,x)
x_0 = 

(-b+b2-4ac2a-b-b2-4ac2a)

算術式に数学関数を適用することもできます。たとえば、第 1 種ベッセル関数 J0 を算術式 f に適用し、x に関する導関数を求めます。

J_0 = besselj(0,f)
J_0 = Jbesselj0(ax2+bx+c)
DJ_0 = diff(J_0,x)
DJ_0 = -Jbesselj1(ax2+bx+c)b+2ax

シンボリック式でシンボリック数を作成するには、sym を使用します。定数のシンボリック式の作成に syms は使用しないでください。たとえば、値が 5 の式を作成するには、f = sym(5) を入力します。コマンド f = 5 では、f がシンボリック式として定義されません。

式をテキスト ファイルから読み取るか数値を厳密に指定する場合、str2symを使用して文字列からシンボリック式を作成することもできます。

シンボリック オブジェクト名の再利用

変数をシンボリック式と等価に設定し、syms コマンドを変数に適用すると、MATLAB は前に定義した式を変数から除去します。

たとえば、シンボリック式 f を作成します。

syms a b
f = a + b
f = a+b

f を再作成すると、MATLAB は式 f から値 a+b を消去します。

syms f
f
f = f

変数から、MATLAB セッションで以前に割り当てていた定義を消去するには syms コマンドを使用できます。syms は変数の仮定を消去します。これらの仮定 (実数、整数、有理数、または正数) はシンボリック オブジェクトとは別に保存されます。しかし、sym を使用した変数の再作成ではその仮定は消去されません。詳細については、シンボリック オブジェクトおよびその仮定の削除を参照してください。

関連するトピック