scipy.linalg.cossin¶
- scipy.linalg.cossin(X, p=None, q=None, separate=False, swap_sign=False, compute_u=True, compute_vh=True)[源代码]¶
计算正交/酉矩阵的余弦(CS)分解。
X是一个
(m, m)
正交/酉矩阵,划分如下,其中左上角挡路的形状为(p, q)
::┌ ┐ │ I 0 0 │ 0 0 0 │ ┌ ┐ ┌ ┐│ 0 C 0 │ 0 -S 0 │┌ ┐* │ X11 │ X12 │ │ U1 │ ││ 0 0 0 │ 0 0 -I ││ V1 │ │ │ ────┼──── │ = │────┼────││─────────┼─────────││────┼────│ │ X21 │ X22 │ │ │ U2 ││ 0 0 0 │ I 0 0 ││ │ V2 │ └ ┘ └ ┘│ 0 S 0 │ 0 C 0 │└ ┘ │ 0 0 I │ 0 0 0 │ └ ┘
U1
,U2
,V1
,V2
是维数的平方正交/酉矩阵(p,p)
,(m-p,m-p)
,(q,q)
,以及(m-q,m-q)
分别为,和C
和S
是(r, r)
满足条件的非负对角线矩阵C^2 + S^2 = I
哪里r = min(p, m-p, q, m-q)
。此外,单位矩阵的秩为
min(p, q) - r
,min(p, m - q) - r
,min(m - p, q) - r
,以及min(m - p, m - q) - r
分别为。X可以由其自身和挡路规范p、q或其子块在从中导出形状的迭代中提供。请参见下面的示例。
- 参数
- X类似数组,可迭代
要分解的复酉或实正交矩阵,或子块的可迭代矩阵
X11
,X12
,X21
,X22
,何时p
,q
都被省略了。- p整型,可选
左上角挡路的行数
X11
,仅当X作为数组给定时使用。- q整型,可选
挡路左上角的列数
X11
,仅当X作为数组给定时使用。- separate布尔值,可选
如果
True
返回低级分量而不是矩阵因子,即(u1,u2)
,theta
,(v1h,v2h)
而不是u
,cs
,vh
。- swap_sign布尔值,可选
如果
True
,即-S
,-I
挡路将位于左下角,否则(默认情况下)它们将位于右上角的挡路。- compute_u布尔值,可选
如果
False
,u
将不会被计算,并且返回空数组。- compute_vh布尔值,可选
如果
False
,vh
将不会被计算,并且返回空数组。
- 退货
- undarray
When
compute_u=True
, contains the block diagonal orthogonal/unitary matrix consisting of the blocksU1
(p
xp
) andU2
(m-p
xm-p
) orthogonal/unitary matrices. Ifseparate=True
, this contains the tuple of(U1, U2)
.- csndarray
- 具有上述结构的余弦-正弦因子。
如果
separate=True
,它包含theta
包含以弧度表示的角度的数组。
- vhndarray
When
compute_vh=True`, contains the block diagonal orthogonal/unitary matrix consisting of the blocks ``V1H
(q
xq
) andV2H
(m-q
xm-q
) orthogonal/unitary matrices. Ifseparate=True
, this contains the tuple of(V1H, V2H)
.
参考文献
- 1
作者声明:Brian D.Sutton。计算完全的CS分解。数字。算法,50(1):33-65,2009。
示例
>>> from scipy.linalg import cossin >>> from scipy.stats import unitary_group >>> x = unitary_group.rvs(4) >>> u, cs, vdh = cossin(x, p=2, q=2) >>> np.allclose(x, u @ cs @ vdh) True
可以通过子块输入相同内容,而不需要
p
和q
。另外,让我们跳过计算u
>>> ue, cs, vdh = cossin((x[:2, :2], x[:2, 2:], x[2:, :2], x[2:, 2:]), ... compute_u=False) >>> print(ue) [] >>> np.allclose(x, u @ cs @ vdh) True