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/v9.2.0/Matrices.html