double
シンボリック値を MATLAB の倍精度に変換
説明
double(
は、シンボリック値 s
)s
を倍精度に変換します。シンボリック値の倍精度への変換は、MATLAB® 関数でシンボリック値を受け取らない場合に役立ちます。シンボリック数と倍精度数の違いについては、数値演算またはシンボリック演算の選択を参照してください。
例
シンボリック数を倍精度に変換
double
を使用してシンボリック数を倍精度に変換します。シンボリック数は厳密ですが、倍精度数には丸め誤差があります。
pi
と 1/3
をシンボリック型から倍精度に変換します。
symN = sym([pi 1/3])
symN = [ pi, 1/3]
doubleN = double(symN)
doubleN = 3.1416 0.3333
丸め誤差については、丸め誤差の認識と回避を参照してください。
可変精度の倍精度への変換
vpa
で作成される可変精度の数値はシンボリック値です。MATLAB 関数でシンボリック値を受け取らない場合、double
を使用して可変精度を倍精度に変換します。
pi
と 1/3
を可変精度から倍精度に変換します。
vpaN = vpa([pi 1/3])
vpaN = [ 3.1415926535897932384626433832795, 0.33333333333333333333333333333333]
doubleN = double(vpaN)
doubleN = 3.1416 0.3333
シンボリック行列の倍精度行列への変換
行列 symM
のシンボリック数を、double
を使用して倍精度数に変換します。
a = sym(sqrt(2)); b = sym(2/3); symM = [a b; a*b b/a]
symM = [ 2^(1/2), 2/3] [ (2*2^(1/2))/3, 2^(1/2)/3]
doubleM = double(symM)
doubleM = 1.4142 0.6667 0.9428 0.4714
高精度な変換
内部桁落ちや丸め誤差の影響を受けるシンボリック式を変換する場合、数値変換の前に、digits
を使用して作業精度を引き上げます。
数値的に不安定な式 Y
を double
を使用して変換します。次に、digits
を使用して、精度を 100
桁に引き上げ、再度 Y
を変換します。低い精度の変換が正確ではないのに対し、こうした高い精度の変換は正確です。
Y = ((exp(sym(200)) + 1)/(exp(sym(200)) - 1)) - 1; lowPrecisionY = double(Y)
lowPrecisionY = 0
digitsOld = digits(100); highPrecisionY = double(Y)
highPrecisionY = 2.7678e-87
digits
で使用していた古い精度に戻して、計算を続けます。
digits(digitsOld)