Увеличение точности числовых вычислений

По умолчанию MATLAB® использует 16 цифр точности. Для более высокой точности используйте vpa функция в Symbolic Math Toolbox™. vpa обеспечивает переменную точность, которая может быть увеличена без предела.

Когда вы выбираете арифметику переменной точности, по умолчанию, vpa использует 32 значимых десятичных цифры точности. Для получения дополнительной информации смотрите Выбрать числовую или символьную арифметику. Вы можете задать более высокую точность при помощи digits функция.

Аппроксимируйте сумму, используя точность по умолчанию 32 цифры. Если хотя бы один вход обернут с vpaвсе другие входы преобразуются в переменную точность автоматически.

vpa(1/3) + 1/2
ans =
0.83333333333333333333333333333333

Вы должны обернуть все внутренние входы vpa, таких как exp(vpa(200)). В противном случае MATLAB автоматически преобразует входы в double.

Увеличьте точность до 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

Примечание

Если вы хотите увеличить эффективность путем снижения точности, см. «Увеличение скорости путем снижения точности».