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–2026 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/v9.4.0/Matrices.html