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 │
                           └                   ┘

U1U2V1V2 是维数的平方正交/酉矩阵 (p,p)(m-p,m-p)(q,q) ,以及 (m-q,m-q) 分别为,和 CS(r, r) 满足条件的非负对角线矩阵 C^2 + S^2 = I 哪里 r = min(p, m-p, q, m-q)

此外,单位矩阵的秩为 min(p, q) - rmin(p, m - q) - rmin(m - p, q) - r ,以及 min(m - p, m - q) - r 分别为。

X可以由其自身和挡路规范p、q或其子块在从中导出形状的迭代中提供。请参见下面的示例。

参数
X类似数组,可迭代

要分解的复酉或实正交矩阵,或子块的可迭代矩阵 X11X12X21X22 ,何时 pq 都被省略了。

p整型,可选

左上角挡路的行数 X11 ,仅当X作为数组给定时使用。

q整型,可选

挡路左上角的列数 X11 ,仅当X作为数组给定时使用。

separate布尔值,可选

如果 True 返回低级分量而不是矩阵因子,即 (u1,u2)theta(v1h,v2h) 而不是 ucsvh

swap_sign布尔值,可选

如果 True ,即 -S-I 挡路将位于左下角,否则(默认情况下)它们将位于右上角的挡路。

compute_u布尔值,可选

如果 Falseu 将不会被计算,并且返回空数组。

compute_vh布尔值,可选

如果 Falsevh 将不会被计算,并且返回空数组。

退货
undarray

When compute_u=True, contains the block diagonal orthogonal/unitary matrix consisting of the blocks U1 (p x p) and U2 (m-p x m-p) orthogonal/unitary matrices. If separate=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 x q) and V2H (m-q x m-q) orthogonal/unitary matrices. If separate=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

可以通过子块输入相同内容,而不需要 pq 。另外,让我们跳过计算 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