18.3 Разложение матриц ¶
-
:
R =chol(A)¶ -
:
[R, p] =chol(A)¶ -
:
[R, p, Q] =chol(A)¶ -
:
[R, p, Q] =chol(A, "vector")¶ -
:
[L, …] =chol(…, "lower")¶ -
:
[R, …] =chol(…, "upper")¶ -
Вычислить верхний фактор Холеского, R, вещественной симметричной или комплексной эрмитовой положительно определенной матрицы A.
Верхний фактор Холеского R вычисляется с использованием верхней треугольной части матрицы A и определяется следующим образом:
R' * R = A.
Вызов
cholс необязательным флагом"upper"имеет тот же результат. В отличие от этого, используя необязательный флаг"lower",cholвозвращает нижнее треугольное разложение, вычисленное с использованием нижней треугольной части матрицы A так, чтоL * L' = A.
Вызов с одним выходным аргументом
cholзавершается ошибкой, если матрица A не является положительно определённой. Обратите внимание, что если матрица A не является вещественной симметричной или комплексной эрмитовой, то нижняя треугольная часть считается (комплексно сопряжённым) транспонированием верхней треугольной части или наоборот, в зависимости от флага"lower".Вызов с двумя или более выходными аргументами p указывает, была ли матрица A положительно определенной, и
cholне завершается с ошибкой. Нулевое значение p указывает, что матрица A является положительно определенной, и R даёт разложение. В противном случае p будет иметь положительное значение.Если вызывается с тремя выходными аргументами, матрица A должна быть разреженной, и к матрице A применяется сохраняющая разреженность перестановка строк/столбцов перед факторизацией. То есть R является разложением
A(Q,Q)так, чтоR' * R = Q' * A * Q.
Перестановка, сохраняющая разреженность, обычно возвращается как матрица. Однако, с учётом необязательного флага
"vector", Q будет возвращена как вектор, так чтоR' * R = A(Q, Q).
В общем случае нижнее треугольное разложение значительно быстрее для разреженных матриц.
См. также: hess, lu, qr, qz, schur, svd, ichol, cholinv, chol2inv, cholupdate, cholinsert, choldelete, cholshift.
-
:
Ainv =cholinv(A)¶ -
Вычислить обратную симметричной положительно определенной матрицы A с использованием разложения Холеского.
-
:
Ainv =chol2inv(R)¶ -
Найти обратную симметричной, положительно определенной квадратной матрицы по её разложению Холеского, R.
Обратите внимание, что R должна быть верхнетреугольной матрицей с положительными диагональными элементами.
chol2inv (U)предоставляетinv (R'*R), но значительно быстрее, чем использованиеinv.
-
:
[R1, info] =cholupdate(R, u, op)¶ -
Обновить или пересчитать разложение Холеского.
Дана верхняя треугольная матрица R и столбец u, попытаться определить другую верхнюю треугольную матрицу R1 такую, что
-
R1’*R1 = R’*R + u*u’ если op равно
"+" -
R1’*R1 = R’*R - u*u’ если op равно
"-"
Если op равно
"-", info устанавливается в- 0, если пересчёт был успешным,
- 1, если R’*R - u*u’ не является положительно определенной,
- 2, если R вырожденная.
Если info отсутствует, в случаях 1 и 2 выводится сообщение об ошибке.
См. также: chol, cholinsert, choldelete, cholshift.
-
R1’*R1 = R’*R + u*u’ если op равно
-
:
R1 =cholinsert(R, j, u)¶ -
:
[R1, info] =cholinsert(R, j, u)¶ -
Обновление разложения Холеского с учётом вставки строки или столбца в исходную факторизованную матрицу.
Дано разложение Холеского вещественной симметричной или комплексной эрмитовой положительно определённой матрицы A = R’*R, R верхняя треугольная, вернуть разложение Холеского матрицы A1, где A1(p,p) = A, A1(:,j) = A1(j,:)’ = u и p = [1:j-1,j+1:n+1]. u(j) должно быть положительным.
При возврате info устанавливается в
- 0, если вставка успешна,
- 1, если A1 не является положительно определённой,
- 2, если R вырожденная.
Если info отсутствует, в случаях 1 и 2 выводится сообщение об ошибке.
См. также: chol, cholupdate, choldelete, cholshift.
-
:
R1 =choldelete(R, j)¶ -
Обновить разложение Холеского, удалив строку или столбец из исходной факторизованной матрицы.
Дано разложение Холеского вещественной симметричной или комплексной эрмитовой положительно определенной матрицы A = R’*R, R верхняя треугольная, вернуть разложение Холеского A(p,p), где p = [1:j-1,j+1:n+1].
См. также: chol, cholupdate, cholinsert, cholshift.
-
:
R1 =cholshift(R, i, j)¶ -
Обновить факторизацию Холецкого, задав диапазон столбцов для сдвига в исходной факторизованной матрице.
Учитывая факторизацию Холецкого вещественной симметричной или комплексной эрмитовой положительно определенной матрицы A = R’*R, R верхняя треугольная, вернуть факторизацию Холецкого для A(p,p), где p — перестановка
p = [1:i-1, shift(i:j, 1), j+1:n]если i < j
или
p = [1:j-1, shift(j:i,-1), i+1:n]если j < i.
См. также: chol, cholupdate, cholinsert, choldelete.
-
:
H =hess(A)¶ -
:
[P, H] =hess(A)¶ -
Вычислить декомпозицию Хессенберга матрицы A.
Декомпозиция Хессенберга имеет вид
P * H * P' = Aгде P — квадратная унитарная матрица (P' * P = I, используя комплексно-сопряжённое транспонирование) и H — верхняя матрица Хессенберга (H(i, j) = 0 forall i > j+1).Декомпозиция Хессенберга обычно используется как первый шаг в вычислении собственных значений, но также имеет и другие применения (см. Golub, Nash, и Van Loan, IEEE Transactions on Automatic Control, 1979).
-
:
[L, U] =lu(A)¶ -
:
[L, U, P] =lu(A)¶ -
:
[L, U, P, Q] =lu(S)¶ -
:
[L, U, P, Q, R] =lu(S)¶ -
:
[…] =lu(S, thresh)¶ -
:
y =lu(…)¶ -
:
[…] =lu(…, "vector")¶ -
Вычислить LU-разложение A.
Если A полная, то используются подпрограммы из LAPACK, а если A разреженная, то используется UMFPACK.
Результат возвращается в переупорядоченном виде, в соответствии с необязательным возвращаемым значением P. Например, для матрицы
A = [1, 2; 3, 4],[L, U, P] = lu (A)
возвращается
L = 1.00000 0.00000 0.33333 1.00000 U = 3.00000 4.00000 0.00000 0.66667 P = 0 1 1 0
Матрица не обязана быть квадратной.
При вызове с двумя или тремя выходными аргументами и разреженной входной матрицей,
luне пытается выполнить сохранённую по столбцам перестановку.При вызове с четвёртым выходным аргументом возвращается сохранённая по столбцам преобразование Q такое, что
P * A * Q = L * U. Это предпочтительный способ вызоваluс разреженными входными матрицами.При вызове с пятым выходным аргументом и разреженной входной матрицей,
luпытается использовать множитель масштабирования R для входной матрицы, так чтоP * (R \ A) * Q = L * U. Это обычно приводит к более разреженному и стабильному разложению.Можно указать дополнительный входной аргумент thresh, определяющий порог поворота. thresh может быть скаляром, в этом случае он определяет порог поворота UMFPACK для симметричных и несимметричных случаев. Если thresh — вектор из 2 элементов, то первый элемент определяет порог поворота для несимметричной стратегии поворота UMFPACK, а второй — для симметричной. По умолчанию используются значения, определённые
spparms([0.1, 0.001]).При передаче строкового аргумента
"vector",luвозвращает значения P и Q как векторные значения, такие что для полной матрицыA(P,:) = L * U, иR(P,:) * A(:,Q) = L * U.С двумя выходными аргументами возвращаются переупорядоченные формы верхней и нижней треугольных матриц, такие что
A = L * U. С одним выходным аргументом y возвращается матрица, возвращаемая подпрограммами LAPACK. Если входная матрица разреженная, то матрица L встраивается в U, чтобы получить результат, похожий на полный случай. Для полных и разреженных матрицluтеряет информацию о перестановке.
-
:
[L, U] =luupdate(L, U, x, y)¶ -
:
[L, U, P] =luupdate(L, U, P, x, y)¶ -
Учитывая LU-разложение вещественной или комплексной матрицы A = L*U, L нижняя единичная трапециевидная и U верхняя трапециевидная, вернуть LU-разложение A + x*y.’, где x и y — столбцовые векторы (обновление ранга 1) или матрицы с одинаковым количеством столбцов (обновление ранга k).
Необязательно можно использовать обновление с поворотом по строкам, передав матрицу перестановки строк (поворота) P; в этом случае возвращается обновлённая матрица перестановки. Обратите внимание, если L, U, P — LU-разложение с поворотом, полученное с помощью
lu:[L, U, P] = lu (A);
то факторизацию
A+x*y.'можно получить либо как[L1, U1] = lu (L, U, P*x, y)
или
[L1, U1, P1] = lu (L, U, P, x, y)
Первый вариант использует неповоротный алгоритм, который быстрее, но менее устойчив. Второй вариант использует более медленный алгоритм с поворотом, который более устойчив.
Случай матрицы реализован как последовательность обновлений ранга 1; таким образом, для достаточно больших k будет быстрее и точнее пересчитать факторизацию с нуля.
См. также: lu, cholupdate, qrupdate.
-
:
[Q, R] =qr(A)¶ -
:
[Q, R, P] =qr(A)¶ -
:
X =qr(A) # non-sparse A¶ -
:
R =qr(A) # sparse A¶ -
:
X =qr(A, B) # sparse A¶ -
:
[C, R] =qr(A, B)¶ -
:
[…] =qr(…, 0)¶ -
:
[…] =qr(…, "econ")¶ -
:
[…] =qr(…, "vector")¶ -
:
[…] =qr(…, "matrix")¶ -
Вычислить QR-разложение A, используя стандартные подпрограммы LAPACK.
QR-разложение имеет вид
Q * R = A
где Q — ортогональная матрица, а R — верхняя треугольная матрица.
Например, для матрицы
A = [1, 2; 3, 4],[Q, R] = qr (A)
возвращает
Q = -0.31623 -0.94868 -0.94868 0.31623 R = -3.16228 -4.42719 0.00000 -0.63246
произведение которых возвращает исходную матрицу
Q * R ⇒ 1.0000 2.0000 3.0000 4.0000Если запрашивается только одно значение возврата, то это либо R, если A разреженная, или X, такое что
R = triu (X), если A полная. (Обратите внимание: в отличие от большинства команд, одно возвращаемое значение не является первым, когда запрашивается несколько значений.)Если запрашивается третий выходной параметр P, то
qrвычисляет переупорядоченное QR-разложениеQ * R = A * P
где Q — ортогональная матрица, R — верхняя треугольная матрица, а P — матрица перестановки.
Если A плотная, переупорядоченное QR-разложение обладает дополнительным свойством, что диагональные элементы R упорядочены по убыванию модуля. Другими словами,
abs (diag (R))будут упорядочены от наибольшего к наименьшему.Если A разреженная, P — упорядочение столбцов A с целью уменьшения заполнения. В этом случае диагональные элементы R не упорядочены по убыванию модуля.
Например, для матрицы
A = [1, 2; 3, 4],[Q, R, P] = qr (A)
возвращает
Q = -0.44721 -0.89443 -0.89443 0.44721 R = -4.47214 -3.13050 0.00000 0.44721 P = 0 1 1 0
Если входная матрица A разреженная, разреженное QR-разложение вычисляется с помощью SPQR или CXSPARSE (например, если SPQR недоступен). Поскольку матрица Q в общем случае является полной матрицей, рекомендуется запрашивать только одно возвращаемое значение R. В этом случае вычисления избегают построения Q и возвращают разреженную R такую, что
R = chol (A' * A).Если A плотная, а дополнительная матрица B предоставлена и запрашиваются два возвращаемых значения, то
qrвозвращает C, гдеC = Q' * B. Это позволяет вычислить приближение наименьших квадратовA \ Bкак[C, R] = qr (A, B) X = R \ C
Если A — разреженная матрица MxN и предоставлена дополнительная матрица B, возможно одно или два возвращаемых значения. Если запрашивается одно возвращаемое значение X и M < N, то X — решение с минимальной 2-нормой
A \ B. Если M ≥ N, X — приближение наименьших квадратовA \ B. Если запрашиваются два возвращаемых значения, C и R имеют тот же смысл, что и в плотном случае (C — плотная, а R — разреженная). Версия с одним параметром возврата предпочтительнее, так как она использует меньше памяти и лучше обрабатывает матрицы с вырожденным рангом.Если последним аргументом является строка
"vector", то P — вектор перестановок (столбцов A) вместо матрицы перестановок. В этом случае определяющее соотношение:Q * R = A(:, P)
Однако по умолчанию возвращается матрица перестановок, и это может быть явно указано, используя последний аргумент
"matrix".Если последним аргументом является скаляр 0 или строка
"econ", возвращается экономичное разложение. Если исходная матрица A имеет размер MxN и M > N, то экономичное разложение вычислит только N строк в R и N столбцов в Q и опустит нули в R. Если M ≤ N, нет разницы между экономичным и стандартным разложениями. При вычислении экономичного разложения и A плотной, выходной параметр P всегда является вектором, а не матрицей. Если A разреженная, выходной параметр P — разреженная матрица перестановок.Примечание: QR-разложение применяется при решении задач наименьших квадратов
min norm (A*x - b)
для переопределённых систем уравнений (т. е. A — высокая, узкая матрица).
Переупорядоченное QR-разложение
[Q, R, P] = qr (A)позволяет построить ортогональный базисspan (A).См. также: chol, hess, lu, qz, schur, svd, qrupdate, qrinsert, qrdelete, qrshift.
-
:
[Q1, R1] =qrupdate(Q, R, u, v)¶ -
Обновление QR-разложения с помощью векторов или матриц обновлений.
Дано QR-разложение вещественной или комплексной матрицы A = Q*R, где Q унитарна, а R верхняя трапециевидная, возвращает QR-разложение A + u*v’, где u и v — столбцовые векторы (обновление ранга 1) или матрицы с одинаковым количеством столбцов (обновление ранга k). Обратите внимание, что последний случай выполняется как последовательность обновлений ранга 1; таким образом, при достаточно большом k, повторное вычисление разложения будет быстрее и точнее.
Предоставленное QR-разложение может быть полным (Q — квадратная матрица) или экономичным (R — квадратная матрица).
-
:
[Q1, R1] =qrinsert(Q, R, j, x, orient)¶ -
Обновление QR-разложения с помощью строки или столбца для вставки в исходную факторизованную матрицу.
Дано QR-разложение вещественной или комплексной матрицы A = Q*R, где Q унитарна, а R верхняя трапециевидная, возвращает QR-разложение [A(:,1:j-1) x A(:,j:n)], где u — столбцовый вектор для вставки в A (если orient —
"col"), или QR-разложение [A(1:j-1,:);x;A(:,j:n)], где x — строковый вектор для вставки в A (если orient —"row").Значение по умолчанию для orient —
"col". Если orient —"col", u может быть матрицей, а j — вектором индексов, что приводит к QR-разложению матрицы B такой, что B(:,j) даёт u и B(:,j) = [] даёт A. Обратите внимание, что последний случай выполняется как последовательность k вставок; таким образом, при достаточно большом k, повторное вычисление разложения будет быстрее и точнее.Если orient —
"col", предоставленное QR-разложение может быть полным (Q — квадратная матрица) или экономичным (R — квадратная матрица).Если orient —
"row", необходимо полное разложение.
-
:
[Q1, R1] =qrdelete(Q, R, j, orient)¶ -
Обновить QR-разложение, удалив строку или столбец из исходной факторизованной матрицы.
Дано QR-разложение вещественной или комплексной матрицы A = Q*R, где Q унитарна, а R верхняя трапециевидная, вернуть QR-разложение [A(:,1:j-1), U, A(:,j:n)], где u — столбец, который нужно вставить в A (если orient равно
"col"), или QR-разложение [A(1:j-1,:);X;A(:,j:n)], где x — строка, и orient равно"row"). Значение по умолчанию для orient равно"col".Если orient равно
"col", j может быть вектором индексов, что приводит к QR-разложению матрицы B такой, что A(:,j) = [] даёт B. Обратите внимание, что последний случай выполняется как последовательность из k удалений; таким образом, при достаточно большом k будет быстрее и точнее повторно вычислить разложение с нуля.Если orient равно
"col", предоставленное QR-разложение может быть полным (Q квадратная) или экономичным (R квадратная).Если orient равно
"row", необходимо полное разложение.
-
:
[Q1, R1] =qrshift(Q, R, i, j)¶ -
Обновить QR-разложение, сдвинув диапазон столбцов в исходной факторизованной матрице.
Дано QR-разложение вещественной или комплексной матрицы A = Q*R, где Q унитарна, а R верхняя трапециевидная, вернуть QR-разложение A(:,p), где p — перестановка
p = [1:i-1, shift(i:j, 1), j+1:n]если i < j
или
p = [1:j-1, shift(j:i,-1), i+1:n]если j < i.
-
:
[AA, BB, Q, Z, V, W] =qz(A, B)¶ -
:
[AA, BB, Q, Z, V, W] =qz(A, B, opt)¶ -
Вычислить QZ-разложение задачи обобщённых собственных значений.
Задача обобщённых собственных значений определяется как
A x = lambda B x
Функция имеет две формы вызова:
-
[AA, BB, Q, Z, V, W, lambda] = qz (A, B)Вычислить комплексное QZ-разложение, обобщённые собственные векторы и обобщённые собственные значения.
AA = Q * A * Z, BB = Q * B * Z A * V * diag (diag (BB)) = B * V * diag (diag (AA)) diag (diag (BB)) * W' * A = diag (diag (AA)) * W' * B
с AA и BB верхними треугольными, а Q и Z унитарными. Матрицы V и W соответственно содержат правые и левые обобщённые собственные векторы.
-
[AA, BB, Z {, lambda}] = qz (A, B, opt)Аргумент opt должен быть равен либо
"real", либо"complex". Если он равен"complex", то эта форма вызова эквивалентна первой с двумя входными аргументами.Если opt равен
"real", то вычисляется вещественное QZ-разложение. В частности, AA гарантированно является квази-верхней треугольной с 1×1 и 2×2 блоками на диагонали, а Q и Z ортогональны. Указанные выше тождества для правых и левых обобщённых собственных векторов верны только если AA является верхней треугольной (т.е. когда все обобщённые собственные значения вещественные, в этом случае вещественное и комплексное QZ совпадают).
Примечание:
qzвыполняет балансировку перестановки, но не масштабирование (см.balance), что может привести к менее точным результатам, чемeig. Порядок выходных аргументов выбран для совместимости с MATLAB.См. также: eig, gsvd, balance, chol, hess, lu, qr, qzhess, schur.
-
-
:
[aa, bb, q, z] =qzhess(A, B)¶ -
Вычислить разложение Хессенберга-треугольной матрицы
(A, B), возвращаяaa = q * A * z,bb = q * B * z, с q и z ортогональными.Например:
[aa, bb, q, z] = qzhess ([1, 2; 3, 4], [5, 6; 7, 8]) ⇒ aa = -3.02244 -4.41741 0.92998 0.69749 ⇒ bb = -8.60233 -9.99730 0.00000 -0.23250 ⇒ q = -0.58124 -0.81373 -0.81373 0.58124 ⇒ z = Diagonal Matrix 1 0 0 1Разложение Хессенберга-треугольной матрицы — это первый шаг в алгоритме QZ-разложения Молера и Стюарта.
Алгоритм взят из работы Голуба и Ван Лоана, Матричные вычисления, 2-е издание.
-
:
S =schur(A)¶ -
:
S =schur(A, "real")¶ -
:
S =schur(A, "complex")¶ -
:
S =schur(A, opt)¶ -
:
[U, S] =schur(…)¶ -
Вычислить разложение Шура матрицы A.
Разложение Шура квадратной матрицы A определяется как
S = U' * A * U
где U — унитарная матрица (
U'* U— единичная матрица), а S — верхняя треугольная. Собственные значения матрицы A (и S) — диагональные элементы S. Если матрица A вещественная, вычисляется вещественное разложение Шура, в котором матрица U ортогональна, а S — блочно-верхняя треугольная с блоками размера не более2 x 2на диагонали.По умолчанию для вещественных матриц используется вещественное разложение Шура. Комплексное разложение можно принудительно вычислить, передав флаг
"complex".Собственные значения можно упорядочить на диагонали в зависимости от значения opt:
opt = "a"-
Переместить собственные значения с отрицательной вещественной частью в ведущий блок S. Мемоническая фраза:
"a"для алгебраических уравнений Риккати, где это упорядочение полезно. opt = "d"-
Переместить собственные значения с модулем меньше единицы в ведущий блок S. Мемоническая фраза:
"d"для дискретных алгебраических уравнений Риккати, где это упорядочение полезно. opt = "u"Без упорядочения. Нет особого упорядочения собственных значений (по умолчанию).
Ведущие k столбцов U всегда охватывают подпространство, инвариантное относительно A, соответствующее k ведущим собственным значениям S.
См. также: rsf2csf, ordschur, ordeig, lu, chol, hess, qr, qz, svd, eig.
-
:
[U, T] =rsf2csf(UR, TR)¶ -
Преобразовать вещественную верхнюю квазитреугольную форму Шура TR в комплексную верхнюю треугольную форму Шура T.
Обратите внимание, что выполняются следующие соотношения:
UR * TR * UR' = U * T * U'иU' * U— единичная матрица I.Также обратите внимание, что U и T не уникальны.
См. также: schur.
-
:
[UR, SR] =ordschur(U, S, select)¶ -
Переупорядочить вещественную факторизацию Шур (U,S), полученную с помощью функции
schur, так, чтобы выбранные собственные значения появлялись в верхних левых диагональных блоках квазитреугольной матрицы Шур.Логический вектор select указывает выбранные собственные значения, как они появляются вдоль диагонали S.
Например, задана матрица
A = [1, 2; 3, 4], и её разложение Шур[U, S] = schur (A)
что возвращает
U = -0.82456 -0.56577 0.56577 -0.82456 S = -0.37228 -1.00000 0.00000 5.37228
Возможна переупорядочка разложения, так чтобы положительное собственное значение было в верхнем левом углу, выполнив:
[U, S] = ordschur (U, S, [0,1])
-
:
[AR, BR, QR, ZR] =ordqz(AA, BB, Q, Z, keyword)¶ -
:
[AR, BR, QR, ZR] =ordqz(AA, BB, Q, Z, select)¶ -
Переупорядочить QZ-разложение задачи обобщенных собственных значений.
Задача обобщенных собственных значений определяется как
A x = lambda B x
Её обобщенное разложение Шур вычисляется с помощью алгоритма
qz:[AA, BB, Q, Z] = qz (A, B)где AA, BB, Q, и Z удовлетворяют
AA = Q * A * Z, BB = Q * B * Z
Функция
ordqzвычисляет унитарное преобразование QR и ZR таким образом, чтобы порядок собственного значения на диагонали AA и BB был изменен. Результирующие переупорядоченные матрицы AR и BR удовлетворяют:AR = QR * A * ZR, BR = QR * B * ZR
Функцию можно вызвать с аргументом keyword, который выбирает собственные значения в верхнем левом блоке AR и BR следующим образом:
-
"S","udi" -
small: ведущий блок содержит все |lambda| < 1
-
"B","udo" -
big: ведущий блок содержит все |lambda| ≥ 1
-
"-","lhp" -
отрицательная вещественная часть: ведущий блок содержит все собственные значения в открытой левой полуплоскости
-
"+","rhp" неотрицательная вещественная часть: ведущий блок содержит все собственные значения в замкнутой правой полуплоскости
Если вместо ключевого слова задан логический вектор select, функция
ordqzпереупорядочивает все собственные значенияkв левый блок, для которогоselect(k)истинно.Примечание: Ключевые слова совместимы с теми, что в
qr. -
-
:
lambda =ordeig(A)¶ -
:
lambda =ordeig(A, B)¶ -
Возвращает собственные значения квазитреугольных матриц в порядке их появления в матрице A.
Квазитреугольная матрица A обычно является результатом факторизации Шур. Если вызвана со вторым входом B, то обобщенные собственные значения пары A, B возвращаются в порядке появления матрицы
A-lambda*B. Пара A, B обычно является результатом QZ-разложения.
-
:
angle =subspace(A, B)¶ Определяет наибольший главный угол между двумя подпространствами, охватываемыми столбцами матриц A и B.
-
:
s =svd(A)¶ -
:
[U, S, V] =svd(A)¶ -
:
[U, S, V] =svd(A, "econ")¶ -
:
[U, S, V] =svd(A, 0)¶ -
Вычислить сингулярное разложение A.
Сингулярное разложение определяется соотношением
A = U*S*V'
Функция
svdобычно возвращает только вектор сингулярных значений. Когда вызывается с тремя возвращаемыми значениями, она вычисляет U, S и V. Например,svd (hilb (3))
возвращает
ans = 1.4083189 0.1223271 0.0026873
и
[u, s, v] = svd (hilb (3))
возвращает
u = -0.82704 0.54745 0.12766 -0.45986 -0.52829 -0.71375 -0.32330 -0.64901 0.68867 s = 1.40832 0.00000 0.00000 0.00000 0.12233 0.00000 0.00000 0.00000 0.00269 v = -0.82704 0.54745 0.12766 -0.45986 -0.52829 -0.71375 -0.32330 -0.64901 0.68867
Когда задан второй аргумент, не равный 0,
svdвозвращает разложение экономичного размера, исключая ненужные строки или столбцы U или V.Если второй аргумент равен точно 0, выбор разложения основан на матрице A. Если A имеет больше строк, чем столбцов, возвращается разложение экономичного размера, в противном случае вычисляется обычное разложение.
Примечания к алгоритму: При вычислении полного разложения (левые и правые сингулярные матрицы в дополнение к сингулярным значениям) существует выбор двух процедур в LAPACK. По умолчанию Octave использует процедуру
gesvd. Альтернативная процедураgesddв 5 раз быстрее, но может использовать больше памяти и быть неточной для некоторых входных матриц. Существует третья процедураgejsv, подходящая для лучшей точности при экстремальных масштабах. См. документацию поsvd_driverдля получения дополнительной информации о выборе драйвера.
-
:
val =svd_driver()¶ -
:
old_val =svd_driver(new_val)¶ -
:
old_val =svd_driver(new_val, "local")¶ -
Запрос или установка базового драйвера LAPACK, используемого
svd.В настоящее время распознаются значения
"gesdd","gesvd", и"gejsv". По умолчанию используется"gesvd".При вызове изнутри функции с опцией
"local", переменная изменяется локально для функции и для всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.Примечания по алгоритму: библиотечные функции LAPACK
gesvdиgesddотличаются только при вычислении полного сингулярного разложения (левые и правые сингулярные матрицы, а также сингулярные значения). При вычислении только сингулярных значений данное обсуждение не актуально.Новая функция
gesddоснована на алгоритме «Разделяй и властвуй» и в 5 раз быстрее альтернативной функцииgesvd, основанной на QR-разложении. Однако новый алгоритм может использовать значительно больше памяти. Для матрицы MxN размер памяти составляет O(min(M,N)^2), в то время как для альтернативы — O(max(M,N)).Функция
gejsvиспользует алгоритм предварительно обусловленного разложения Якоби. В отличие отgesvdиgesdd, вgejsvотсутствует этап бидиагонализации, который в некоторых крайних случаях мог бы ухудшить точность. Кроме того,gejsvизвестна как оптимально точная в некотором смысле. Однако скорость медленнее (основной механизм однопоточный) и используется больше памяти (O(min(M,N)^2 + M + N)).Помимо проблем со скоростью и памятью, были случаи, когда некоторые входные матрицы не были точно разложены функцией
gesdd. См. активный баг https://savannah.gnu.org/bugs/?55564. До тех пор, пока проблемы точности не будут решены в новой версии библиотеки LAPACK, по умолчанию в Octave используется драйвер"gesvd".См. также: svd.
-
:
[housv, beta, zer] =housh(x, j, z)¶ -
Вычисление вектора отражения Хаусхолдера housv для отражения x до j-ой колонки единичной матрицы, т.е.
(I - beta*housv*housv')x = norm (x)*e(j) if x(j) < 0, (I - beta*housv*housv')x = -norm (x)*e(j) if x(j) >= 0
Входы
- x
-
вектор
- j
-
индекс в векторе
- z
порог для нуля (обычно должно быть число 0)
Выходы (см. Голуб и Ван Лоан):
- beta
-
Если beta = 0, то отражение применять не нужно (устанавливается 0)
- housv
вектор Хаусхолдера
-
:
[u, h, nu] =krylov(A, V, k, eps1, pflg)¶ -
Построение ортогонального базиса u блочного подпространства Кристова.
Блочное подпространство Кристова имеет следующий вид:
[v a*v a^2*v ... a^(k+1)*v]
Построение выполняется с помощью отражений Хаусхолдера для предотвращения потери ортогональности.
Если V — вектор, то h содержит матрицу Хессенберга такую, что
a*u == u*h+rk*ek', в которойrk = a*u(:,k)-u*h(:,k), иek'является вектором[0, 0, …, 1]длины k. В противном случае h бессмысленно.Если V — вектор и k больше
length (A) - 1, то h содержит матрицу Хессенберга такую, чтоa*u == u*h.Значение nu — это размерность охвата подпространства Кристова (основанного на eps1).
Если b — вектор и k больше m-1, то h содержит разложение Хессенберга матрицы A.
Необязательный параметр eps1 — порог для нуля. Значение по умолчанию равно 1e-12.
Если необязательный параметр pflg отличен от нуля, используется строчный поворот для повышения числовой устойчивости. Значение по умолчанию равно 0.
Ссылка: А. Ходель, П. Мисра, Частичный поворот при вычислении подпространств Кристова больших разреженных систем, Труды 42-й конференции IEEE по принятию решений и управлению, декабрь 2003 г.
© 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/Matrix-Factorizations.html