exponenta event banner

цифры

Изменение используемой точности переменной

Описание

пример

digits(d) устанавливает точность, используемую vpa кому d значащие десятичные цифры. По умолчанию используется 32 цифры.

пример

d1 = digits возвращает текущую точность, используемую vpa.

пример

d1 = digits(d) устанавливает новую точность d и возвращает старую точность в d1.

Примеры

Повышение точности результатов

По умолчанию MATLAB ® использует 16 цифр точности. Для более высокой точности используйтеvpa. Точность по умолчанию для vpa 32 цифры. Увеличьте точность до 32 цифр с помощью digits.

Найти pi использование vpa, которая использует 32 цифры точности по умолчанию. Подтвердите, что текущая точность равна 32 с помощью digits.

pi32 = vpa(pi)
pi32 =
3.1415926535897932384626433832795
currentPrecision = digits
currentPrecision =
    32

Сохранить текущее значение digits в digitsOld и задайте для новой точности значение 100 цифры. Найти pi использование vpa. Результат содержит 100 цифр.

digitsOld = digits(100);
pi100 = vpa(pi)
pi100 =
3.1415926535897932384626433832795028841971693993751058209...
74944592307816406286208998628034825342117068

Примечание

vpa вывод символичен. Чтобы использовать символьный вывод с функцией MATLAB, которая не принимает символьные значения, преобразуйте символьные значения в двойную точность с помощью double.

Наконец, восстановить старое значение digits для дальнейших расчетов.

digits(digitsOld)

Дополнительные сведения см. в разделе Повышение точности числовых вычислений.

Увеличение скорости за счет уменьшения точности

Увеличение скорости вычислений MATLAB с помощью vpa с меньшей точностью. Установка более низкой точности с помощью digits.

Сначала найдите время, необходимое для выполнения операции на большом входе.

input = 1:0.01:500;
tic
zeta(input);
toc
Elapsed time is 48.968983 seconds.

Теперь повторите операцию с меньшей точностью, используя vpa. Понизить точность до 10 цифры с помощью digits. Затем используйте vpa для снижения точности input и выполните ту же операцию. Затраченное время значительно уменьшается.

digitsOld = digits(10);
vpaInput = vpa(input);
tic
zeta(vpaInput);
toc
Elapsed time is 31.450342 seconds.

Примечание

vpa вывод символичен. Чтобы использовать символьный вывод с функцией MATLAB, которая не принимает символьные значения, преобразуйте символьные значения в двойную точность с помощью double.

Наконец, восстановить старое значение digits для дальнейших расчетов.

digits(digitsOld)

Дополнительные сведения см. в разделе Увеличение скорости путем уменьшения точности.

Защитные цифры

Количество цифр, указанное с помощью vpa функции или digits функция - гарантированное количество цифр. Внутри панели инструментов может использоваться несколько больше цифр, чем указано. Эти дополнительные цифры называются защитными. Например, установите число цифр равным 4, а затем отобразите аппроксимацию с плавающей запятой 1/3, используя четыре цифры:

old = digits(4);
a = vpa(1/3)
a =
0.3333

Теперь отображение a используя 20 цифр. Результат показывает, что панель инструментов использовала более четырех цифр при вычислении a. Последние цифры в следующем результате неверны из-за ошибки округления:

digits(20)
vpa(a)
digits(old)
ans =
0.33333333333303016843

Скрытые ошибки скругления

Скрытые ошибки округления могут привести к неожиданным результатам. Например, вычислите число 1/10 с 32-значной точностью по умолчанию и с 10-значной точностью:

a = vpa(1/10)
old = digits(10);
b = vpa(1/10)
digits(old)
a =
0.1
 
b =
0.1

Теперь вычислите разницу a - b. Результат не равен 0:

a - b
ans =
0.000000000000000000086736173798840354720600815844403

Различие a - b не равно нулю, поскольку панель инструментов внутренне увеличивает 10-значное число b = 0.1 до 32-значной точности. Этот процесс подразумевает ошибки округления. Панель инструментов фактически вычисляет разницу a - b следующим образом:

b = vpa(b)
a - b
b =
0.09999999999999999991326382620116
 
ans =
0.000000000000000000086736173798840354720600815844403

Методы, используемые для преобразования чисел с плавающей запятой в символьные объекты

Предположим, что вы преобразуете двойное число в символический объект, а затем выполняете операции VPA над этим объектом. Результаты могут зависеть от метода преобразования, который использовался для преобразования числа с плавающей запятой в символический объект. sym функция позволяет выбрать метод преобразования путем указания дополнительного второго аргумента, который может быть 'r', 'f', 'd', или 'e'. Значение по умолчанию: 'r'. Например, преобразуйте константу δ = 3.141592653589793... к символическому объекту:

r = sym(pi)
f = sym(pi,'f')
d = sym(pi,'d')
e = sym(pi,'e')
r =
pi
 
f =
884279719003555/281474976710656
 
d =
3.1415926535897931159979634685442
 
e =
pi - (198*eps)/359

Хотя панель инструментов отображает эти числа по-разному на экране, они являются рациональными приближениями pi. Использовать vpa для преобразования этих рациональных аппроксимаций pi вернитесь к значениям с плавающей запятой.

Установите число цифр равным 4. Три из четырёх приближений дают одинаковый результат.

digits(4)
vpa(r)
vpa(f)
vpa(d)
vpa(e)
ans =
3.142
 
ans =
3.142
 
ans =
3.142
 
ans =
3.142 - 0.5515*eps

Теперь установите число цифр равным 40. Различия между символическими приближениями pi становятся более заметными.

digits(40)
vpa(r)
vpa(f)
vpa(d)
vpa(e)
ans =
3.141592653589793238462643383279502884197
 
ans =
3.141592653589793115997963468544185161591
 
ans =
3.1415926535897931159979634685442
 
ans =
3.141592653589793238462643383279502884197 -...
0.5515320334261838440111420612813370473538*eps

Входные аргументы

свернуть все

Новая настройка точности, заданная как число или символическое число. Параметр определяет количество значащих десятичных цифр, используемых для вычислений с переменной точностью. Если значение d не является целым числом, digits округляет его до ближайшего целого числа.

Выходные аргументы

свернуть все

Текущая настройка точности, возвращаемая как число с двойной точностью. Параметр определяет количество значащих десятичных цифр, используемых в настоящее время для вычислений с переменной точностью.

Представлен до R2006a