2013-02-19 5 views
3

Я понимаю, что это несколько неопределенный вопрос, поэтому я сделаю все возможное. Если у меня есть номер, например n = 0.783325849821429, есть ли способ отображения еще десятичных знаков? Это было сделано с длинным форматом. Проблема в том, что я делаю вычисления с оценкой ошибки с синусом, и наступает точка, где оценка настолько близка к фактическому значению синуса, что MATLAB вычисляет ошибку как 0, хотя невозможно, чтобы оценка была полностью точной. Всегда есть ошибка, она слишком мала для распознавания MATLAB. Есть ли способ сделать MATLAB более десятичным?Как увеличить количество цифр в MATLAB?

ответ

1

digits с vpa (Точность с переменной точностью). Подробнее об переменной арифметики с переменной точностью here ... Обратите внимание, что вам понадобится символическая математическая панель инструментов. Если вы не имеете его, то вы можете использовать John D'Errico-х Variable Precision Integer Arithmetic из файлового обмена ..

+1

На самом деле, VPI только для целых чисел. Тем не менее, я также разместил инструмент HPF, который будет вычислять с плавающей точкой любое количество цифр. Поэтому, если вы хотите 100 цифр точности, вы получите его. http://www.mathworks.com/matlabcentral/fileexchange/36534-hpf-a-big-decimal-class – 2013-02-19 11:16:21

3

Вы всегда можете попросить больше цифр с помощью formatted strings

fprintf(1, 'n = %.20f\n', n); % print with 20 digits after the decimal point 

Однако есть предел к точности сохраненных чисел в плавающей запятой.
Вы можете проверить точность машины с помощью eps

eps(n) 

Если ошибка оценки меньше eps, чем ваша оценка находится в пределах машинной точности и не может быть измерена.

0

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

например.

a=vpa(a,5) 
a = 

[ 1.25, 2.0276, 3.2108, 3.3695, 2.0589, 1.0] 

polyval(a,3) 

??? Undefined function or method 'isfinite' for input arguments of type 
'sym'. 

Error in ==> polyval at 54 
if isscalar(x) && (nargin < 3) && nc>0 && isfinite(x) && 
all(isfinite(p(:))) 
0

Например, чтобы получить ответ с 1000 цифр для уравнения 22/7

цифр (1000)

VPA (22/7)

Смежные вопросы