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

メモ

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