Обобщенное сингулярное разложение
[U,V,X,C,S] = gsvd(A,B)
[U,V,X,C,S] = gsvd(A,B,0)
sigma = gsvd(A,B)
[U,V,X,C,S] = gsvd(A,B)
возвращает унитарные матрицы U
и V
, (обычно) квадратная матрица X
и неотрицательные диагональные матрицы C
и S
так, чтобы
A = U*C*X' B = V*S*X' C'*C + S'*S = I
A
и B
должны иметь одинаковое число столбцов, но могут иметь различные количества строк. Если A
является m
-by-p
, и B
является n
-by-p
, то U
является m
-by-m
, V
является n
-by-n
, X
является p
-by-q
, C
является m
-by-q
, и S
является n
-by-q
, где q = min(m+n,p)
.
Ненулевые элементы S
всегда находятся на его основной диагонали. Ненулевые элементы C
находятся на диагональном diag(C,max(0,q-m))
. Если m >= q
, это - основная диагональ C
.
[U,V,X,C,S] = gsvd(A,B,0)
, то, где A
является m
-by-p
, и B
является n
-by-p
, производит ““ разложение размера экономики, где получившийся U
и V
имеют в большинстве столбцов p
, и C
и S
имеют в большинстве строк p
. Обобщенными сингулярными значениями является diag(C)./diag(S)
пока m >= p
и n >= p
.
Если A
является m
-by-p
, и B
является n
-by-p
, то U
является m
-by-min(q,m)
, V
является n
-by-min(q,n)
, X
является p
-by-q
, C
является min(q,m)
-by-q
, и S
является min(q,n)
-by-q
, где q = min(m+n,p)
.
sigma = gsvd(A,B)
возвращает вектор обобщенных сингулярных значений, sqrt(diag(C'*C)./diag(S'*S))
. Когда B
является квадратным и несингулярным, обобщенные сингулярные значения, gsvd(A,B)
, соответствуют обычным сингулярным значениям, svd(A/B)
, но они сортируются в противоположном порядке. Их обратными величинами является gsvd(B,A)
.
Векторный sigma
имеет длину q
и находится в не уменьшающемся порядке.
Матрицы имеют, по крайней мере, столько же строк сколько столбцы.
A = reshape(1:15,5,3) B = magic(3) A = 1 6 11 2 7 12 3 8 13 4 9 14 5 10 15 B = 8 1 6 3 5 7 4 9 2
Оператор
[U,V,X,C,S] = gsvd(A,B)
производит ортогональный U
5 на 5, 3х3 ортогональный V
, 3х3 несингулярный X
,
X = 2.8284 -9.3761 -6.9346 -5.6569 -8.3071 -18.3301 2.8284 -7.2381 -29.7256
и
C = 0.0000 0 0 0 0.3155 0 0 0 0.9807 0 0 0 0 0 0 S = 1.0000 0 0 0 0.9489 0 0 0 0.1957
Поскольку A
имеет неполный ранг, первый диагональный элемент C
является нулем.
Экономика измерила разложение,
[U,V,X,C,S] = gsvd(A,B,0)
производит 5 3 матричный U
и 3х3 матричный C
.
U = 0.5700 -0.6457 -0.4279 -0.7455 -0.3296 -0.4375 -0.1702 -0.0135 -0.4470 0.2966 0.3026 -0.4566 0.0490 0.6187 -0.4661 C = 0.0000 0 0 0 0.3155 0 0 0 0.9807
Другие три матрицы, V
, X
и S
совпадают с полученными с полным разложением.
Обобщенные сингулярные значения являются отношениями диагональных элементов C
и S
.
sigma = gsvd(A,B) sigma = 0.0000 0.3325 5.0123
Эти значения являются переупорядочением обычных сингулярных значений
svd(A/B) ans = 5.0123 0.3325 0.0000
Матрицы имеют, по крайней мере, столько же столбцов сколько строки.
A = reshape(1:15,3,5) B = magic(5) A = 1 4 7 10 13 2 5 8 11 14 3 6 9 12 15 B = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
Оператор
[U,V,X,C,S] = gsvd(A,B)
производит 3х3 ортогональный U
, ортогональный V
5 на 5, несингулярный X
5 на 5 и
C = 0 0 0.0000 0 0 0 0 0 0.0439 0 0 0 0 0 0.7432 S = 1.0000 0 0 0 0 0 1.0000 0 0 0 0 0 1.0000 0 0 0 0 0 0.9990 0 0 0 0 0 0.6690
В этой ситуации ненулевой диагональю C
является diag(C,2)
. Обобщенные сингулярные значения включают три нуля.
sigma = gsvd(A,B) sigma = 0 0 0.0000 0.0439 1.1109
Инвертирование ролей A
и B
оплачивает эти значения, производя две бесконечности.
gsvd(B,A) ans = 1.0e+16 * 0.0000 0.0000 8.8252 Inf Inf
В этой формулировке gsvd
никакие предположения не сделаны об отдельных рангах A
или B
. Матричный X
имеет полный ранг, если и только если матричный [A;B]
имеет полный ранг. На самом деле svd(X)
и cond(X)
равны svd([A;B])
и cond([A;B])
. Другие формулировки, например, Г. Голуб и К. ван Лоун [1], требуют, чтобы null(A)
и null(B)
не перекрывали и заменяли X
inv(X)
или inv(X')
.
Обратите внимание, однако, что, когда null(A)
и null(B)
действительно накладываются, ненулевые элементы C
и S
исключительно не определяются.
Обобщенное сингулярное разложение использует разложение C-S, описанное в [1], а также встроенный svd
и функции qr
. Разложение C-S реализовано в локальной функции в программном файле gsvd
.
[1] Golub, Джин Х. и ссуда Чарльза Вана, матричные вычисления, третий выпуск, Johns Hopkins University Press, Балтимор, 1996