数値のシンボリックへの変換
このトピックでは、Symbolic Math Toolbox™ における数値のシンボリック型への変換方法を説明します。シンボリック演算と数値演算の概要は、数値演算またはシンボリック演算の選択を参照してください。
数値入力をシンボリック型に変換するには、sym
コマンドを使用します。既定の設定では、sym
は数値式の有理近似を返します。
t = 0.1; sym(t)
ans = 1/10
sym
では、倍精度値 0.1
は厳密なシンボリック値 1/10
を近似すると判断します。一般的に、sym
では、厳密なシンボリック型を返すために浮動小数点入力の丸め誤差の訂正を試みます。具体的には、sym
では 、p/q、pπ/q、(p/q)1/2、2q および 10q という形式に一致する数値入力の丸め誤差を訂正します。ここで、p と q は適度なサイズの整数です。
これらの形式について、sym
が浮動小数点入力を厳密なシンボリック型に変換していることを示します。最初に、1/7、pi および を数値的に近似します。
N1 = 1/7 N2 = pi N3 = 1/sqrt(2)
N1 = 0.1429 N2 = 3.1416 N3 = 0.7071
数値近似を厳密なシンボリック型に変換します。sym
により丸め誤差が訂正されます。
S1 = sym(N1) S2 = sym(N2) S3 = sym(N3)
S1 = 1/7 S2 = pi S3 = 2^(1/2)/2
入力と推定される厳密な形式の間の誤差を返すには、構文 sym(num,'e')
を使用します。誤差項を使用した有理数シンボリック型への変換を参照してください。
入力を引用符で囲むことで、入力をそのまま受け取るよう sym
に強制できます。前の入力 0.142857142857143
でこの動作を示します。関数 sym
はこの入力を 1/7
に変換しません。
sym('0.142857142857143')
ans = 0.142857142857143
大きい数値を変換する場合、引用符を使用してその数値を正確に表現します。sym(133333333333333333333)
と sym('133333333333333333333')
を比較してこの動作を示します。
sym(1333333333333333333) sym('1333333333333333333')
ans = 1333333333333333248 ans = 1333333333333333333
sym
で浮動小数点数を変換するために使用する手法は 2 番目のオプション引数で指定できます。これは、'f'
、'r'
、'e'
、'd'
のいずれかになります。既定のフラグは 'r'
で、有理数型を示します。
有理シンボリック型への変換
'r'
フラグを指定して sym
を呼び出し、入力を厳密な有理数型に変換します。これは、フラグを指定せずに sym
を呼び出すときの既定の動作です。
sym(t, 'r')
ans = 1/10
浮動小数点展開を使用した変換
フラグ 'f'
を指定して sym
を呼び出すと、sym
によって倍精度浮動小数点数が N*2^e
を使用した数値に変換されます。ここで N
および e
はそれぞれ指数と仮数です。
浮動小数点展開を使用して t
を変換します。
sym(t, 'f')
ans = 3602879701896397/36028797018963968
誤差項を使用した有理数シンボリック型への変換
'e'
フラグを指定して sym
を呼び出すと、sym
は t
の有理数型と、推定される t
の厳密な値とその浮動小数点表現の間の誤差を返します。この誤差は eps
(浮動小数点相対精度) で表現されます。
t
をシンボリック型に変換します。推定されるシンボリック型とその浮動小数点値の間の誤差を返します。
sym(t, 'e')
ans = eps/40 + 1/10
誤差項 eps/40
は sym('0.1')
と sym(0.1)
の差です。
小数点形式への変更
フラグ 'd'
を指定して sym
を呼び出すと、sym
は入力の小数部を展開した形式で返します。関数 digits
は、使用する有効桁数を指定します。digits
の既定値は 32 です。
sym(t,'d')
ans = 0.10000000000000000555111512312578
digits
を使用して有効桁数を変更します。
digitsOld = digits(7); sym(t,'d')
ans = 0.1
計算を続けるため、digits
の古い値に戻します。
digits(digitsOld)