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.Нижняя/верхняя полоса пропускания матрицы — количество поддиагоналей/наддиагоналей с ненулевыми элементами.
- : 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. Если это число велико, это означает, что небольшие изменения (например, подтек или ошибка округления) приведут к большим изменениям в выходных данных. В таких случаях результаты численных вычислений, скорее всего, не будут точными.
- : 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
- : d = det (A) ¶
- : [d, rcond] = det (A) ¶
-
Вычислить определитель A.
Возвращает оценку обратного числа обусловленности, если запрошено.
Примечания по программированию: для полных матриц используются процедуры из LAPACK, а для разреженных матриц — код из UMFPACK.
Определитель не следует использовать для проверки матрицы на вырожденность. Для этого используйте любые функции числа обусловленности:
cond,condest,rcond.
- : лямбда = eig (A) ¶
- : лямбда = eig (A, B) ¶
- : [V, лямбда] = eig (A) ¶
- : [V, лямбда] = eig (A, B) ¶
- : [V, лямбда, W] = eig (A) ¶
- : [V, лямбда, W] = eig (A, B) ¶
- : […] = eig (A, balanceOption) ¶
- : […] = eig (A, B, algorithm) ¶
- : […] = eig (…, eigvalOption) ¶
-
Вычислите собственные значения (лямбда) и, по желанию, собственные векторы справа (V) и слева (W) матрицы или пары матриц.
Флаг balanceOption может быть одним из:
"balance"(по умолчанию)-
Предварительная балансировка включена.
"nobalance"Отключает предварительную балансировку.
Флаг eigvalOption может быть одним из:
"matrix"-
Возвращает собственные значения в диагональной матрице. (по умолчанию, если запрашиваются 2 или 3 выходных значения)
"vector"Возвращает собственные значения в столбце вектора. (по умолчанию, если запрашивается только 1 выходное значение, например, лямбда = eig(A))
Флаг algorithm может быть одним из:
"chol"-
Используйте факторизацию Холецкого B. (по умолчанию, если A симметричная (эрмитова) и B симметричная (эрмитова) положительно определенная)
"qz"Используйте алгоритм QZ. (используется всякий раз, когда A или B не симметричные)
нет флага chol qz оба симметричны "chol""chol""qz"по крайней мере один не симметричный "qz""qz""qz"Собственные значения, возвращаемые
eig, не упорядочены.
- : G = givens (x, y) ¶
- : [c, s] = givens (x, y) ¶
-
Вычислите матрицу вращения Гивенса G.
Матрица Гивенса — это 2x2 ортогональная матрица
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-мерной плоскости и может быть использована для введения нулей в матрицу перед полной факторизацией.
- : 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.
Матрица Гивенса — это 2x2 ортогональная матрица
G = [ c , s -s', c]такая, что
y = G * [x(1); x(2)] ≡ [*; 0]
Примечание: Матрица Гивенса представляет собой против часовой стрелки вращение 2-мерной плоскости и может быть использована для введения нулей в матрицу перед полной факторизацией.
- : x = inv (A) ¶
- : [x, rcond] = inv (A) ¶
- : […] = inverse (…) ¶
-
Вычислите обратную матрицу квадратной матрицы A.
Возвращает оценку обратной величины числа обусловленности, если запрос, в противном случае предупреждает об плохо обусловленной матрице, если обратная величина числа обусловленности мала.
В общем случае лучше избегать прямого вычисления обратной матрицы. Например, это быстрее и точнее решать системы уравнений (A*x = b) с
y = A \ b, а не сy = inv (A) * b.Если вызывается со разреженной матрицей, то в общем случае x будет полной матрицей, требующей значительно больше памяти. Избегайте формирования обратной матрицы разреженной матрицы, если это возможно.
inverse— это псевдоним и может быть использовано идентично вместоinv.
- : 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", вычисляются нормы каждого столбца, и возвращается строка. - p =
- : Z = null (A) ¶
- : Z = null (A, tol) ¶
-
Возвращает ортонормированный базис Z пространства нулей матрицы A.
Размерность пространства нулей Z определяется как число сингулярных значений матрицы A, не превосходящих tol. Если аргумент tol отсутствует, он вычисляется как
max (size (A)) * max (svd (A, 0)) * eps
- : 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
- : 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 плюс пространство решений системы Ax = 0. Функцияnullможет быть использована для вычисления базиса пространства решений.Пример:
A = [1 2 3 4 5 6 7 8 9]; rank (A) ⇒ 2В этом примере число линейно независимых строк равно только 2, потому что последняя строка является линейной комбинацией первых двух строк:
A(3,:) == -A(1,:) + 2 * A(2,:)
- : c = rcond (A) ¶
-
Вычисляет оценку 1-нормы обратной величины числа обусловленности, полученной из LAPACK.
Если матрица хорошо обусловлена, то c будет близка к 1, а если плохо обусловлена - близка к 0.
Матрица A не должна быть разреженной. Если матрица разреженная, то следует использовать
condest (A)илиrcond (full (A)).
- : 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/v8.1.0/Basic-Matrix-Functions.html