Spec-Zone.ru › Octave 7

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API