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.Нижняя/верхняя ширина полосы матрицы — это количество поддиагоналей/наддиагоналей с ненулевыми элементами.
- cond (A)
- cond (A, p)
-
Вычислить число обусловленности матрицы в норме p относительно обращения.
cond (A)определяется какnorm (A, p) * norm (inv (A), p).По умолчанию используется
p = 2, что подразумевает (относительно медленное) разложение по сингулярным значениям. Другие возможные варианты —p = 1, Inf, "fro", которые обычно быстрее. Смотритеnormдля полного обсуждения возможных значений p.Число обусловленности матрицы количественно определяет чувствительность операции обращения матрицы при малых изменениях элементов матрицы. В идеале число обусловленности должно быть близко к 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
- det (A)
- [d, rcond] = det (A)
-
Вычислить определитель A.
Возвращает оценку обратного числа обусловленности, если запрошено.
Примечания по программированию: для полных матриц используются подпрограммы из LAPACK, а для разреженных матриц — код из UMFPACK.
Не следует использовать определитель для проверки матрицы на вырожденность. Для этого используйте любые функции числа обусловленности:
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, не упорядочены. -
- 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Примечание: Матрица Гивенса представляет собой вращение плоскости на 2D и может использоваться для введения нулей в матрицу перед полной факторизацией.
- 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.
Матрица Гивенса — это ортогональная 2x2 матрица
G = [ c , s -s', c]такая что
y = G * [x(1); x(2)] ≡ [*; 0]
Примечание: Матрица Гивенса представляет собой вращение плоскости на 2D против часовой стрелки и может использоваться для введения нулей в матрицу перед полной факторизацией.
- 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вернёт правильную классификацию матрицы.
- 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", вычислить нормы каждого столбца и вернуть строку вектора. -
p =
- null (A)
- null (A, tol)
-
Возвращает ортогональную базу нулевого пространства A.
Размер нулевого пространства принимается как количество сингулярных значений A, не превосходящих tol. Если аргумент tol отсутствует, он вычисляется как
max (size (A)) * max (svd (A)) * eps
См. также: orth.
- orth (A)
- 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'
- pinv (x)
- pinv (x, tol)
-
Возвращает псевдообратное Moore-Penrose x.
Сингулярные значения, меньшие, чем tol, игнорируются.
Если второй аргумент опущен, он принимается за
tol = max ([rows(x), columns(x)]) * norm (x) * eps
- 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,:)
- c = rcond (A)
-
Вычислить оценку 1-нормы обратной условного числа, как возвращается LAPACK.
Если матрица хорошо обусловлена, то c будет близко к 1, а если матрица плохо обусловлена, то оно будет близко к 0.
Матрица A не должна быть разреженной. Если матрица разреженная, то следует использовать
condest (A)илиrcond (full (A)).
- 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/v5.2.0/Basic-Matrix-Functions.html