По умолчанию MATLAB® использует 16 цифр точности. Для более высокой точности используйте vpa
функция в Symbolic Math Toolbox™. vpa
обеспечивает переменную точность, которая может быть увеличена без предела.
Когда вы выбираете арифметику переменной точности, по умолчанию, vpa
использование 32 значительных десятичных цифры точности. Для получения дополнительной информации смотрите, Выбирают Numeric or Symbolic Arithmetic. Можно установить более высокую точность при помощи digits
функция.
Аппроксимируйте сумму с помощью точности по умолчанию 32 цифр. Если по крайней мере один вход перенесен с vpa
, все другие входные параметры преобразованы в переменную точность автоматически.
vpa(1/3) + 1/2
ans = 0.83333333333333333333333333333333
Необходимо перенести все внутренние входные параметры с vpa
, такой как exp(vpa(200))
. В противном случае входные параметры автоматически преобразованы, чтобы удвоиться MATLAB.
Увеличьте точность до 50
цифры при помощи digits
и сохраните старое значение digits
в digitsOld
. Повторите сумму.
digitsOld = digits(50); sum50 = vpa(1/3) + 1/2
sum50 = 0.83333333333333333333333333333333333333333333333333
Восстановите старое значение цифр для дальнейших вычислений.
digits(digitsOld)
Примечание
vpa
выход является символьным. Чтобы использовать символьный выход с функцией MATLAB, которая не принимает символьные значения, преобразуйте символьные значения в двойную точность при помощи double
.
Проверяйте ток digits
установка путем вызова digits
.
digits
Digits = 32
Измените точность для сингла vpa
вызов путем определения точности как второго входа к vpa
. Этот вызов не влияет digits
. Например, аппроксимированный pi
с 100
цифры.
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
с четырехразрядной точностью возвращает шесть цифр после десятичной точки, потому что первые две цифры являются нулями.
vpa(1/111,4)
ans = 0.009009
Примечание
Если вы хотите увеличить эффективность путем уменьшения точности, смотрите Скорость Увеличения путем Сокращения Точности.