4.1 Матрицы
В Octave легко определить матрицу значений. Размер матрицы определяется автоматически, поэтому нет необходимости явно указывать размерности. Выражение
a = [1, 2; 3, 4]
приводит к матрице
/ \
| 1 2 |
a = | |
| 3 4 |
\ / Элементы матрицы могут быть произвольными выражениями, при условии, что размерности имеют смысл при объединении различных частей. Например, учитывая вышеуказанную матрицу, выражение
[ a, a ]
производит матрицу
ans = 1 2 1 2 3 4 3 4
но выражение
[ a, 1 ]
вызывает ошибку
error: number of rows must match (1 != 2) near line 13, column 6
(в предположении, что это выражение было введено как первое на 13 строке, конечно).
Внутри квадратных скобок, которые ограничивают выражение матрицы, Octave анализирует окружающий контекст, чтобы определить, следует ли преобразовывать пробелы и символы новой строки в разделители элементов и строк или просто игнорировать их, поэтому выражение, подобное
a = [ 1 2
3 4 ] будет работать. Однако некоторые возможные источники путаницы остаются. Например, в выражении
[ 1 - 1 ]
‘-’ обрабатывается как бинарный оператор, и результатом является скаляр 0, но в выражении
[ 1 -1 ]
‘-’ обрабатывается как унарный оператор, и результатом является вектор [ 1, -1 ]. Аналогично, выражение
[ sin (pi) ]
будет обработано как
[ sin, (pi) ]
и приведет к ошибке, так как функция sin будет вызвана без аргументов. Чтобы обойти эту проблему, необходимо опустить пробел между sin и открывающей скобкой или заключить выражение в набор скобок:
[ (sin (pi)) ]
Пробелы вокруг символа одиночной кавычки (‘'’, используемого в качестве оператора транспонирования и для разграничения строковых литералов) также могут вызвать путаницу. Учитывая a = 1, выражение
[ 1 a' ]
приводит к тому, что символ одиночной кавычки обрабатывается как оператор транспонирования, и результатом является вектор [ 1, 1 ], но выражение
[ 1 a ' ]
выводит сообщение об ошибке
parse error:
syntax error
>>> [ 1 a ' ]
^ потому что это необходимо для корректного разбора валидного выражения
[ a 'foo' ]
Для ясности, лучше всегда использовать запятые и точки с запятой для разделения элементов и строк матрицы.
Максимальное количество элементов в матрице фиксируется при компиляции Octave. Допустимое количество можно запросить с помощью функции sizemax. Обратите внимание, что другие факторы, такие как объем доступной памяти на вашем компьютере, могут ограничить максимальный размер матриц чем-то меньшим.
- : max_numel = sizemax () ¶
-
Возвращает наибольшее значение, разрешенное для размера массива.
Если Octave скомпилирован с 64-разрядной индексацией, результат имеет тип int64, в противном случае – int32. Максимальный размер массива немного меньше максимального значения, допустимого для соответствующего типа, как указано функцией
intmax.См. также: intmax.
При вводе матрицы или имени переменной, значением которой является матрица, Octave выводит матрицу с четко выровненными строками и столбцами. Если строки матрицы слишком велики, чтобы поместиться на экране, Octave разбивает матрицу и отображает заголовок перед каждым разделом, чтобы указать, какие столбцы отображаются. Вы можете использовать следующие переменные для управления форматированием вывода.
- : val = output_precision () ¶
- : old_val = output_precision (new_val) ¶
- : old_val = output_precision (new_val, "local") ¶
-
Запрос или установка внутренней переменной, определяющей минимальное количество значащих цифр для отображения числового вывода.
Обратите внимание, что независимо от значения, заданного для
output_precision, количество отображаемых цифр точности ограничено 16 для значений двойной точности и 7 для значений одинарной точности. Кроме того, вызовы функцииformat, изменяющие числовой вывод, также могут изменить заданное значение дляoutput_precision.При вызове изнутри функции с опцией
"local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: format, fixed_point_format.
Можно добиться широкого спектра стилей вывода, используя различные значения output_precision. Разумные сочетания можно установить с помощью функции format. См. Основные входные и выходные данные.
- : val = split_long_rows () ¶
- : old_val = split_long_rows (new_val) ¶
- : old_val = split_long_rows (new_val, "local") ¶
-
Запрос или установка внутренней переменной, контролирующей возможность разделения строк матрицы при отображении на окне терминала.
Если строки разбиваются, Octave отобразит матрицу в виде серии меньших фрагментов, каждый из которых может поместиться в пределах ширины вашего терминала, и каждый набор строк помечен, чтобы вы могли легко увидеть, какие столбцы в данный момент отображаются. Например:
octave:13> rand (2,10) ans = Columns 1 through 6: 0.75883 0.93290 0.40064 0.43818 0.94958 0.16467 0.75697 0.51942 0.40031 0.61784 0.92309 0.40201 Columns 7 through 10: 0.90174 0.11854 0.72313 0.73326 0.44672 0.94303 0.56564 0.82150
При вызове изнутри функции с опцией
"local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: format.
Octave автоматически переключается на экспоненциальную запись, когда значения становятся очень большими или очень маленькими. Это гарантирует, что вы увидите несколько значащих цифр для каждого значения в матрице. Если вы предпочитаете видеть все значения матрицы в формате с фиксированной точкой, вы можете использовать функцию fixed_point_format. Но это не рекомендуется, так как это может привести к выводу, который легко неправильно интерпретировать.
- : val = fixed_point_format () ¶
- : old_val = fixed_point_format (new_val) ¶
- : old_val = fixed_point_format (new_val, "local") ¶
-
Запрос или установка внутренней переменной, контролирующей использование Octave масштабируемого формата для вывода значений матрицы.
Масштабируемый формат печатает множитель масштабирования в первой строке вывода, выбранный таким образом, чтобы наибольший элемент матрицы можно было записать с одной цифрой в старшем разряде. Например:
fixed_point_format (true) logspace (1, 7, 5)' ans = 1.0e+07 * 0.00000 0.00003 0.00100 0.03162 1.00000
Обратите внимание, что первое значение выглядит как 0, хотя на самом деле оно равно 1. Из-за возможности возникновения путаницы следует быть осторожным при включении
fixed_point_format.При вызове изнутри функции с опцией
"local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: format, output_precision.
© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/Matrices.html