Почему MATLAB удалил мои десятичные дроби?
предположим, я создаю некоторое число A
, приказа 10^4
:
A = 81472.368639;
disp(A)
8.1472e+04
это не то, что я хотел. Где мои десятичные дроби? Должно быть еще шесть десятичных знаков. Проверка редактора переменных показывает мне следующее:
опять я потерял десятичные дроби. Как сохранить их для дальнейших расчетов?
1 ответов
научная нотация, или почему вы не потеряли десятичные дроби
вы не потеряли десятичных знаков, это просто способ отображения больших чисел MATLAB. MATLAB округляет отображение чисел как в командном окне, так и в Редакторе переменных до одной цифры перед точкой и до четырех после нее, используя научную нотацию. Научная нотация-это Xe+y
нотации, где X
- некоторое число, а y
целое число. Это значит X
времени 10
к власти y
, который можно визуализировать как " сдвиньте точку вправо для y
места" (или влево, если y
отрицательный).
заставить MATLAB показать вам все ваши десятичные дроби
теперь, когда мы знаем, что делает MATLAB, можем ли мы заставить его показать нам наш номер? Конечно, есть несколько вариантов для этого, самый простой-установить более длинный format
. Наиболее часто для отображения длинных чисел используются format long
и format longG
, чья разница очевидна, когда мы их использовать:
format long
A
A =
8.1472368639e+04
format longG
A
A =
81472.368639
format long
отображает все десятичные дроби (до 16 всего) с использованием научной нотации,format longG
пытается отобразить числа без научной нотации, но с большинством доступных десятичных знаков, снова: столько, сколько есть или до 16 цифр, как до, так и после точки, в общей сложности.
более причудливое решение использует disp(sprintf())
или fprintf
если вы хотите точное количество десятичных знаков перед точкой, после точки или оба:
fprintf('A = %5.3f\n',A) % \n is just to force a line break
A = 81472.369
disp(sprintf('A = %5.2f\n',A))
A = 81472.37
наконец, помните редактор переменных? Как сделать так, чтобы переменная полностью отображалась? Просто: нажмите на ячейку, содержащую номер:
короче говоря: мы не потеряли десятичных знаков по пути, MATLAB все еще хранит их внутри, он просто отображает меньше десятичных знаков по умолчанию.
другие виды использования format
format
имеет еще одно хорошее свойство в том, что вы может установить format compact
, который избавляется от всех дополнительных пустых строк:
format compact
format long
A
A =
8.147236863931789e+04
format longG
A
A =
81472.3686393179
что, на мой взгляд, очень удобно, когда вы не хотите делать свое командное окно очень большим, но не хотите прокручивать много.
format shortG
и format longG
полезны, когда Ваш массив имеет очень разные цифры в них:
b = 10.^(-3:3);
A.*b
ans =
1.0e+07 *
0.0000 0.0001 0.0008 0.0081 0.0815 0.8147 8.1472
format longG
A.*b
ans =
Columns 1 through 3
81.472368639 814.72368639 8147.2368639
Columns 4 through 6
81472.368639 814723.68639 8147236.8639
Column 7
81472368.639
format shortG
A.*b
ans =
81.472 814.72 8147.2 81472 8.1472e+05 8.1472e+06 8.1472e+07
т. е. они работают как long
и short
на одиночных числах, но выбирает самый удобный формат дисплея для каждого из числа.
есть еще несколько экзотических вариантов, как shortE
, shortEng
, hex
etc, но те, которые вы можете найти хорошо документированы в собственная документация по математике на format
.