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. Обратите внимание, что другие факторы, такие как количество доступной памяти на вашем компьютере, могут ограничить максимальный размер матриц чем-то меньшим.
- sizemax ()
-
Возвращает наибольшее значение, разрешенное для размера массива.
Если Octave скомпилирован с 64-разрядным индексированием, результат имеет класс int64, в противном случае он имеет класс int32. Максимальный размер массива немного меньше максимального значения, допустимого для соответствующего класса, как сообщается функцией
intmax.См. также: intmax.
Когда вы печатаете матрицу или имя переменной, значением которой является матрица, Octave отображает матрицу с четко выровненными строками и столбцами. Если строки матрицы слишком велики, чтобы уместиться на экране, Octave разбивает матрицу и отображает заголовок перед каждым разделом, чтобы указать, какие столбцы отображаются. Вы можете использовать следующие переменные для управления форматом вывода.
- val = output_precision ()
- old_val = output_precision (new_val)
- output_precision (new_val, "local")
-
Запрос или установка внутренней переменной, которая определяет минимальное количество значащих цифр для отображения числового вывода.
Обратите внимание, что независимо от значения, установленного для
output_precision, количество отображаемых значащих цифр ограничено 16 для значений с двойной точностью и 7 для значений с одинарной точностью.При вызове из функции с опцией
"local", переменная изменяется локально для функции и всех вызываемых подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: format, fixed_point_format.
Можно добиться широкого спектра стилей вывода, используя различные значения output_precision. Разумные комбинации можно установить с помощью функции format. См. Основные входные и выходные данные.
- val = split_long_rows ()
- old_val = split_long_rows (new_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)
- 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–2022 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/v6.4.0/Matrices.html