数値計算精度の引き上げ
既定の設定では、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
メモ
精度を "下げて" パフォーマンスを向上させたい場合は、精度の引き下げによる速度の向上を参照してください。