数値計算精度の引き上げ
既定の設定では、MATLAB® は 16 桁の精度を使用しています。より高い精度の場合は、Symbolic Math Toolbox™ の関数 vpa
を使用します。vpa
は、精度を無制限に上げることができる可変精度を備えています。
可変精度演算を選択すると、vpa
は既定で、有効小数桁数 32 桁の精度を使用します。詳細は、数値演算またはシンボリック演算の選択を参照してください。関数 digits
を使用すると、より高い精度を設定できます。
既定の 32 桁の精度で和を近似します。少なくとも 1 つの入力が vpa
でラップされている場合、他のすべての入力は自動的に可変精度に変換されます。
vpa(1/3) + 1/2
ans = 0.83333333333333333333333333333333
exp(vpa(200))
のように、すべての内部入力は vpa
でラップしなければなりません。そうでない場合、MATLAB は自動的に入力を double に変換します。
digits
を使用して、精度を 50
桁に引き上げ、digits
の古い値を digitsOld
に保存します。和を繰り返します。
digitsOld = digits(50); sum50 = vpa(1/3) + 1/2
sum50 = 0.83333333333333333333333333333333333333333333333333
計算を続けるため、digits の古い値に戻します。
digits(digitsOld)
メモ
vpa
の出力はシンボリックです。シンボリック値を受け取らない MATLAB 関数でシンボリック出力を使用するには、double
を使用してシンボリック値を倍精度に変換します。
digits
を呼び出して、現在の digits
の設定を確認します。
digits
Digits = 32
精度を vpa
の 2 番目の入力に指定して、vpa
の 1 回の呼び出しに対する精度を変更します。このような呼び出しは digits
には影響しません。たとえば、100
桁で pi
の近似値を求めます。
vpa(pi,100)
ans = 3.14159265358979323846264338327950288419716939937510582097494 4592307816406286208998628034825342117068
digits % digits remains 32
Digits = 32
可変精度は任意に引き上げることができます。pi
を 500
桁まで求めます。
digitsOld = digits(500); vpa(pi) digits(digitsOld)
ans = 3.1415926535897932384626433832795028841971693993751058209749 445923078164062862089986280348253421170679821480865132823066 470938446095505822317253594081284811174502841027019385211055 596446229489549303819644288109756659334461284756482337867831 652712019091456485669234603486104543266482133936072602491412 737245870066063155881748815209209628292540917153643678925903 600113305305488204665213841469519415116094330572703657595919 530921861173819326117931051185480744623799627495673518857527 248912279381830119491
digits
および vpa
は、"有効" 小数桁数をコントロールします。たとえば、1/111
の値を 4 桁の精度で近似すると、小数点以下は、最初の 2 桁が 0 のため、6 桁で返されます。
vpa(1/111,4)
ans = 0.009009
メモ
精度を "下げて" パフォーマンスを向上させたい場合は、精度の引き下げによる速度の向上を参照してください。