Main Content

数値計算精度の引き上げ

既定の設定では、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

可変精度は任意に引き上げることができます。pi500桁まで求めます。

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

メモ

精度を "下げて" パフォーマンスを向上させたい場合は、精度の引き下げによる速度の向上を参照してください。