Этот пример показывает, как использовать арифметику переменной точности для получения высокоточных расчетов с помощью Symbolic Math Toolbox™.
Поиск формул, которые представляют околоцелые числа. Классический пример следующий: вычислите до 30 цифр. Результатом является целое число, которое отображается с ошибкой округления.
digits(30); f = exp(sqrt(sym(163))*sym(pi)); vpa(f)
ans =
Вычислите то же значение до 40 цифр. Оказывается, это не целое число.
digits(40); vpa(f)
ans =
Исследуйте это явление дальше. Ниже цифры до происходит, и исследованию нужны некоторые правильные цифры после десятичной точки. Вычислите необходимую рабочую точность:
d = log10(exp(vpa(1000)))
d =
Установите необходимую точность перед первым вызовом функции, которая от нее зависит. Среди прочих round
, vpa
, и double
являются такими функциями.
digits(ceil(d) + 50);
Ищите похожие примеры формы . Конечно, можно получить больше таких чисел n путем умножения 163 на квадрат. Но кроме этого, гораздо больше чисел этой формы близки к некоторому целому числу. Вы можете увидеть это из гистограммы графика их дробных частей:
A = exp(pi*sqrt(vpa(1:1000))); B = A-round(A); histogram(double(B), 50)
Вычислите, есть ли околоцелые числа в форме .
A = exp(vpa(1:1000)); B = A-round(A); find(abs(B) < 1/1000)
ans = 1x0 empty double row vector
Оказывается, на этот раз дробные части элементов A
довольно равномерно распределены.
histogram(double(B), 50)