Spec-Zone.ru › Octave 6

18.2 Основные функции матриц

: AA = balance (A)
: AA = balance (A, opt)
: [DD, AA] = balance (A, opt)
: [D, P, AA] = balance (A, opt)
: [CC, DD, AA, BB] = balance (A, B, opt)

Балансировка матрицы A для уменьшения числовых ошибок в последующих вычислениях.

Вычислить AA = DD \ A * DD, в котором AA — матрица, у которой нормы строк и столбцов примерно равны по величине, и DD = P * D, в котором P — матрица перестановки, а D — диагональная матрица степеней двойки. Это позволяет вычислить балансировку без потери точности. Результаты вычисления собственных значений обычно улучшаются после балансировки.

Если требуется два выходных значения, balance возвращает диагональную D и перестановку P по отдельности в виде векторов. В этом случае, DD = eye(n)(:,P) * diag (D), где n — размер матрицы.

Если требуется четыре выходных значения, вычислить AA = CC*A*DD и BB = CC*B*DD, в которых AA и BB имеют ненулевые элементы примерно одинаковой величины, а CC и DD — это переставленные диагональные матрицы, как и в DD для алгебраической задачи на собственные значения.

Вариант балансировки собственных значений opt может быть одним из следующих:

"noperm", "S"

Масштабирование только; перестановка не выполняется.

"noscal", "P"

Только перестановка; масштабирование не выполняется.

Балансировка алгебраических собственных значений использует стандартные подпрограммы LAPACK.

Балансировка обобщенной задачи на собственные значения использует алгоритм Уорда (SIAM Journal on Scientific and Statistical Computing, 1981).

: bw = bandwidth (A, type)
: [lower, upper] = bandwidth (A)

Вычислить ширину полосы A.

Аргумент type — строка "lower" для нижней ширины полосы и "upper" для верхней ширины полосы. Если type не указан, возвращаются как нижняя, так и верхняя ширина полосы A.

Нижняя/верхняя ширина полосы матрицы — это количество поддиагоналей/наддиагоналей с ненулевыми элементами.

См. также: isbanded, isdiag, istril, istriu.

: cond (A)
: cond (A, p)

Вычислить число обусловленности матрицы по норме p относительно обращения.

cond (A) определяется как norm (A, p) * norm (inv (A), p).

По умолчанию используется p = 2, что подразумевает (относительно медленное) разложение по сингулярным значениям. Другие возможные варианты — p = 1, Inf, "fro", которые, как правило, быстрее. См. norm для полного обсуждения возможных значений p.

Число обусловленности матрицы количественно описывает чувствительность операции обращения матрицы при небольших изменениях элементов матрицы. В идеале число обусловленности должно быть близко к 1. Если число велико, это указывает на то, что небольшие изменения (например, потеря точности или погрешность округления) приведут к большим изменениям в результирующем выходе. В таких случаях результаты числовых вычислений вряд ли будут точными.

См. также: condest, rcond, condeig, norm, svd.

: c = condeig (a)
: [v, lambda, c] = condeig (a)

Вычислить числа обусловленности матрицы по отношению к собственным значениям.

Числа обусловленности — это обратные значения косинусов углов между левыми и правыми собственными векторами; большие значения указывают на то, что матрица имеет несколько различных собственных значений.

Входной параметр a должен быть квадратной числовой матрицей.

Выходные данные:

  • c — вектор чисел обусловленности для собственных значений a.
  • v — матрица правых собственных векторов a. Результат эквивалентен вызову [v, lambda] = eig (a).
  • lambda — диагональная матрица собственных значений a. Результат эквивалентен вызову [v, lambda] = eig (a).

Пример

a = [1, 2; 3, 4];
c = condeig (a)
  ⇒ c =
       1.0150
       1.0150

См. также: eig, cond, balance.

: det (A)
: [d, rcond] = det (A)

Вычислить определитель A.

Возвращает оценку обратного числа обусловленности при запросе.

Примечания по программированию: для полных матриц используются подпрограммы из LAPACK, а для разреженных матриц — код из UMFPACK.

Для проверки матрицы на вырожденность не следует использовать определитель. Для этого используйте любую из функций чисел обусловленности: cond, condest, rcond.

См. также: cond, condest, rcond.

: lambda = eig (A)
: lambda = eig (A, B)
: [V, lambda] = eig (A)
: [V, lambda] = eig (A, B)
: [V, lambda, W] = eig (A)
: [V, lambda, W] = eig (A, B)
: […] = eig (A, balanceOption)
: […] = eig (A, B, algorithm)
: […] = eig (…, eigvalOption)

Вычислить собственные значения (lambda) и, необязательно, правые собственные векторы (V) и левые собственные векторы (W) матрицы или пары матриц.

Флаг balanceOption может быть одним из следующих:

"balance" (по умолчанию)

Предварительная балансировка включена.

"nobalance"

Отключает предварительную балансировку.

Флаг eigvalOption может быть одним из следующих:

"matrix"

Возвращает собственные значения в диагональной матрице. (по умолчанию, если требуется 2 или 3 выходных значения)

"vector"

Возвращает собственные значения в столбце вектора. (по умолчанию, если требуется только 1 выходное значение, например, lambda = eig (A))

Флаг algorithm может быть одним из следующих:

"chol"

Использует факторизацию Холецкого B. (по умолчанию, если A симметричная (эрмитова) и B симметричная (эрмитова) положительно определенная)

"qz"

Использует алгоритм QZ. (используется всякий раз, когда A или B не симметричные)

без флага chol qz
оба симметричны "chol" "chol" "qz"
хотя бы один не симметричен "qz" "qz" "qz"

Собственные значения, возвращаемые eig, не упорядочены.

См. также: eigs, svd.

: G = givens (x, y)
: [c, s] = givens (x, y)

Вычислить матрицу вращения Гивенса G.

Матрица Гивенса — это ортогональная матрица 2×2

G = [ c , s
     -s', c]

такая, что

G * [x; y] = [*; 0]

где x и y — скаляры.

Если требуется два выходных аргумента, возвращаются факторы c и s, а не матрица вращения Гивенса.

Например:

givens (1, 1)
   ⇒   0.70711   0.70711
       -0.70711   0.70711

Примечание. Матрица Гивенса представляет собой поворот плоскости на 2D на определенный угол против часовой стрелки и может использоваться для введения нулей в матрицу перед полным разложением.

См. также: planerot, qr.

END_OF_DOCUMENT_MARKER
: S = gsvd (A, B)
: [U, V, X, C, S] = gsvd (A, B)
: [U, V, X, C, S] = gsvd (A, B, 0)

Вычислить обобщенное разложение по сингулярным значениям (A, B).

Обобщенное разложение по сингулярным значениям определяется следующими соотношениями:

A = U*C*X'
B = V*S*X'
C'*C + S'*S = eye (columns (A))

Функция gsvd обычно возвращает только вектор обобщенных сингулярных значений sqrt (diag (C'*C) ./ diag (S'*S)). Если запрашиваются пять возвращаемых значений, она также вычисляет U, V, X и C.

Если присутствует необязательный третий вход, gsvd строит «разложение экономичного размера», где количество столбцов U, V и количество строк C, S меньше или равно количеству столбцов A. Этот параметр пока не реализован.

Примечание для программистов: код является обёрткой над соответствующими процедурами LAPACK dggsvd и zggsvd.

См. также: svd.

: [G, y] = planerot (x)

Вычислить матрицу вращения Гивенса для двухэлементного столбцового вектора x.

Матрица Гивенса — это 2×2 ортогональная матрица

G = [ c , s
     -s', c]

такая, что

y = G * [x(1); x(2)] ≡ [*; 0]

Примечание: матрица Гивенса представляет собой поворот плоскости на 2D на определённый угол против часовой стрелки и может использоваться для введения нулей в матрицу перед полным разложением.

См. также: givens, qr.

: x = inv (A)
: [x, rcond] = inv (A)
: […] = inverse (…)

Вычислить обратную матрицу квадратной матрицы A.

Возвращает оценку обратной величины числа обусловленности, если запрошено, в противном случае выводит предупреждение о плохо обусловленной матрице, если обратная величина числа обусловленности мала.

В общем случае лучше избегать прямого вычисления обратной матрицы. Например, вычисление решения системы уравнений (A*x = b) с y = A \ b, а не с y = inv (A) * b, будет быстрее и точнее.

Если вызывается с разреженной матрицей, то x обычно будет полной матрицей, требующей значительно большего объёма памяти. Избегайте формирования обратной матрицы для разреженных матриц, если это возможно.

inverse является псевдонимом и может использоваться как inv.

См. также: ldivide, rdivide, pinv.

: x = linsolve (A, b)
: x = linsolve (A, b, opts)
: [x, R] = linsolve (…)

Решить линейную систему A*x = b.

Без опций эта функция эквивалентна оператору левого деления (x = A \ b) или функции деления матриц слева (x = mldivide (A, b)).

Обычно Octave анализирует свойства матрицы A и выбирает решатель, который лучше всего соответствует матрице. Передав структуру opts функции linsolve, вы можете напрямую сообщить Octave о матрице A. В этом случае Octave пропустит анализ матрицы и перейдёт непосредственно к решению линейной системы.

Предупреждение: Если матрица A не имеет свойств, указанных в структуре opts, результат будет неточным, и не будет выведено предупреждение. В случае сомнений, позвольте Octave проанализировать матрицу и выбрать подходящий решатель, так как этот этап занимает мало времени и результат кэшируется, поэтому выполняется только один раз для каждой линейной системы.

Возможные поля opts (значение устанавливается в true/false):

LT

A — нижнетреугольная

UT

A — верхнетреугольная

UHESS

A — верхняя гэссенберговая (в настоящее время это не влияет)

SYM

A — симметричная или комплексно-эрмитова (в настоящее время это не влияет)

POSDEF

A — положительно определённая

RECT

A — общая прямоугольная (в настоящее время это не влияет)

TRANSA

Решить A'*x = b, если true, а не A*x = b

Необязательный второй выход R — обратное число обусловленности A (ноль, если матрица вырождена).

См. также: mldivide, matrix_type, rcond.

: type = matrix_type (A)
: type = matrix_type (A, "nocompute")
: A = matrix_type (A, type)
: A = matrix_type (A, "upper", perm)
: A = matrix_type (A, "lower", perm)
: A = matrix_type (A, "banded", nl, nu)

Определить тип матрицы или пометить матрицу как определённого типа.

Это позволяет выполнять более быстрые решения линейных уравнений, включающих A.

Вызванная с одним аргументом, matrix_type возвращает тип матрицы и кеширует его для последующего использования.

Вызванная с более чем одним аргументом, matrix_type позволяет определить тип матрицы.

Если задан параметр "nocompute", функция не будет пытаться угадать тип, если он всё ещё неизвестен. Это полезно для отладки.

Возможные типы матриц зависят от того, является ли матрица полной или разреженной, и могут быть следующими:

"unknown"

Удалить любой предварительно кэшированный тип матрицы и пометить тип как неизвестный.

"full"

Пометить матрицу как полную.

"positive definite"

Вероятная полная положительно определённая матрица.

"diagonal"

Диагональная матрица. (Только для разреженных матриц)

"permuted diagonal"

Пермутированная диагональная матрица. Перестановку не нужно указывать явно, так как структура матрицы явно это даёт. (Только для разреженных матриц)

"upper"

Верхнетреугольная. Если необязательный третий аргумент perm указан, предполагается, что матрица является переставленной верхнетреугольной с перестановками, определяемыми вектором perm.

"lower"

Нижнетреугольная. Если необязательный третий аргумент perm указан, предполагается, что матрица является переставленной нижнетреугольной с перестановками, определяемыми вектором perm.

"banded"
"banded positive definite"

Диагональная полосовая матрица с шириной полосы nl ниже диагонали и nu выше её. Если nl и nu равны 1, то матрица является треугольной и обрабатывается специальным кодом. Кроме того, матрица может быть помечена как вероятно положительно определённая. (Только для разреженных матриц)

"singular"

Предполагается, что матрица вырождена, и будет использовано решение с минимальной нормой.

Обратите внимание, что тип матрицы будет определён автоматически при первой попытке решить линейное уравнение, включающее A. Следовательно, matrix_type используется только для подсказки Octave о типе матрицы. Неправильное определение типа матрицы приведёт к неверным результатам решения линейных уравнений; полная ответственность за правильное определение типа матрицы лежит на пользователе.

Также, тест на положительную определённость — это тест с низкой стоимостью для эрмитовой матрицы с действительной положительной диагональю. Это не гарантирует, что матрица положительно определена, а только то, что она является вероятным кандидатом. Когда такая матрица факторизуется, сначала выполняется факторизация Холецкого, и если это не удаётся, тогда матрица обрабатывается с помощью факторизации LU. После факторизации матрицы, matrix_type вернёт правильную классификацию матрицы.

: norm (A)
: norm (A, p)
: norm (A, p, opt)

Вычислить p-норму матрицы A.

Если второй аргумент не задан, используется p = 2.

Если A — матрица (или разреженная матрица):

p = 1

1-норма, наибольшая сумма по столбцам абсолютных значений элементов матрицы A.

p = 2

Наибольшее сингулярное значение матрицы A.

p = Inf или "inf"

Норма бесконечности, наибольшая сумма по строкам абсолютных значений элементов матрицы A.

p = "fro"

Норма Фробениуса матрицы A, sqrt (sum (diag (A' * A))).

другое p, p > 1

максимальное norm (A*x, p) такое, что norm (x, p) == 1

Если A — вектор или скаляр:

p = Inf или "inf"

max (abs (A)).

p = -Inf

min (abs (A)).

p = "fro"

Норма Фробениуса матрицы A, sqrt (sumsq (abs (A))).

p = 0

Норма Хэмминга — количество ненулевых элементов.

другое p, p > 1

p-норма A, (sum (abs (A) .^ p)) ^ (1/p).

другое p p < 1

p-псевдонорма, определенная выше.

Если opt имеет значение "rows", каждая строка обрабатывается как вектор, и вычисляется её норма. Результат возвращается как столбец. Аналогично, если opt имеет значения "columns" или "cols", вычисляются нормы каждого столбца и возвращается строка.

См. также: normest, normest1, vecnorm, cond, svd.

: null (A)
: null (A, tol)

Возвратить ортонормированный базис ядра (null space) матрицы A.

Размерность ядра принимается как количество сингулярных значений A, не превышающих tol. Если аргумент tol отсутствует, он вычисляется как

max (size (A)) * max (svd (A)) * eps

См. также: orth.

: orth (A)
: orth (A, tol)

Возвратить ортонормированный базис пространства столбцов матрицы A (range space).

Размерность пространства столбцов принимается как количество сингулярных значений матрицы A, больших, чем tol. Если аргумент tol отсутствует, он вычисляется как

max (size (A)) * max (svd (A)) * eps

См. также: null.

: [y, h] = mgorth (x, v)

Ортогонализировать заданный столбец x относительно набора ортонормированных векторов, образующих столбцы v, используя модифицированный метод Грама-Шмидта.

По выходу, y является единичным вектором таким, что:

norm (y) = 1
  v' * y = 0
  x = [v, y]*h'
: pinv (x)
: pinv (x, tol)

Возвращает псевдообратную матрицу Мура-Пенроуза x.

Сингулярные значения, меньшие tol, игнорируются.

Если второй аргумент опущен, он принимается равным

tol = max ([rows(x), columns(x)]) * norm (x) * eps

См. также: inv, ldivide.

: rank (A)
: rank (A, tol)

Вычислить ранг матрицы A, используя разложение по сингулярным значениям.

Ранг принимается равным числу сингулярных значений матрицы A, больших, чем заданная точность tol. Если второй аргумент опущен, он принимается равным

tol = max (size (A)) * sigma(1) * eps;

где eps — машинная точность, а sigma(1) — наибольшее сингулярное значение матрицы A.

Ранг матрицы — это число линейно независимых строк или столбцов и равен размерности пространства строк и столбцов. Функция orth может быть использована для вычисления ортонормированного базиса пространства столбцов.

Для проверки разрешимости системы A*x = b линейных уравнений можно использовать

rank (A) == rank ([A b])

В этом случае, x = A \ b находит частное решение x. Общее решение — это x плюс ядро матрицы A. Функция null может быть использована для вычисления базиса ядра.

Пример:

A = [1 2 3
     4 5 6
     7 8 9];
rank (A)
  ⇒ 2

В этом примере число линейно независимых строк равно только 2, потому что последняя строка является линейной комбинацией первых двух строк:

A(3,:) == -A(1,:) + 2 * A(2,:)

См. также: null, orth, sprank, svd, eps.

: c = rcond (A)

Вычислить оценку 1-нормы обратной числа обусловленности, возвращаемую LAPACK.

Если матрица хорошо обусловлена, c будет близко к 1; если плохо обусловлена, близко к 0.

Матрица A не должна быть разреженной. Если матрица разреженная, то следует использовать condest (A) или rcond (full (A)).

См. также: cond, condest.

: trace (A)

Вычислить след A, сумму элементов по главной диагонали.

Реализация простая: sum (diag (A)).

См. также: eig.

: rref (A)
: rref (A, tol)
: [r, k] = rref (…)

Возвратить приведенную строчную эшелонную форму матрицы A.

tol по умолчанию равно eps * max (size (A)) * norm (A, inf).

Необязательный возвращаемый аргумент k содержит вектор "связанных переменных", это столбцы, над которыми была выполнена элиминация.

: n = vecnorm (A)
: n = vecnorm (A, p)
: n = vecnorm (A, p, dim)

Возвращает p-норму элементов A по размерности dim.

p-норма вектора определяется как

p-norm (A, p) = sum (abs (A) .^ p)) ^ (1/p)

Если p опущен, он по умолчанию равен 2 (евклидова норма). p может быть Inf (абсолютное значение наибольшего элемента).

Если dim опущен, используется первая неединичная размерность.

См. также: norm.

© 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/Basic-Matrix-Functions.html

Spec-Zone.ru

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