Spec-Zone.ru › Octave 9

Далее: Матричные разложения, Предыдущее: Методы линейной алгебры, Вверх: Линейная алгебра [Оглавление][Индекс]

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.

: c = cond (A) ¶
: c = cond (A, p) ¶

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

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

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

Число обусловленности матрицы количественно определяет чувствительность операции обращения матрицы к малым изменениям элементов матрицы. В идеале число обусловленности должно быть близко к 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.

: d = 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

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

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

: 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. Если матрицы A и B оба являются матрицами с дефектным рангом, то LAPACK вернёт некорректную факторизацию. Программисты должны избегать этой комбинации.

См. также: svd.

: [G, y] = planerot (x) ¶

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

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

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

такая, что

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

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

См. также: 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 вернет правильную классификацию матрицы.

: n = norm (A) ¶
: n = norm (A, p) ¶
: n = 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.

: Z = null (A) ¶
: Z = null (A, tol) ¶

Возвращает ортонормированный базис Z нулевого пространства матрицы A.

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

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

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

: B = orth (A) ¶
: B = orth (A, tol) ¶

Возвращает ортонормированный базис пространства столбцов матрицы A.

Размерность пространства столбцов принимается равной числу сингулярных значений матрицы 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'
: B = pinv (A) ¶
: B = pinv (A, tol) ¶

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

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

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

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

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

: k = rank (A) ¶
: k = 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.

: t = trace (A) ¶

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

Реализация тривиальна: sum (diag (A)).

См. также: eig.

: r = rref (A) ¶
: r = 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 — 1 (манхэттенская норма, сумма абсолютных значений) и Inf (абсолютное значение наибольшего элемента).

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

См. также: norm.

Далее: Матричные разложения, Предыдущее: Методы линейной алгебры, Вверх: Линейная алгебра [Содержание][Индекс]

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

Spec-Zone.ru

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