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.
-
:
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.
Матрица Гивенса — это ортогональная матрица размера 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Примечание: матрица Гивенса представляет собой поворот двумерной плоскости против часовой стрелки и может использоваться для зануления элементов матрицы перед полным разложением.
-
:
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]
Примечание: матрица Гивенса представляет собой поворот двумерной плоскости против часовой стрелки и может использоваться для зануления элементов матрицы перед полным разложением.
-
:
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, если значение истинно, вместо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 плюс нуль-пространство матрицы 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)).
-
:
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 задаёт измерение массива, по которому выполняется операция, и должен быть положительным целым числом. Если он не указан, используется первое измерение, размер которого не равен 1.
См. также: norm.
© 1996–2026 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.4.0/Basic-Matrix-Functions.html