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是满足C^2 + S^2 = I的(r, r)非负对角矩阵,其中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类数组, 可迭代对象
要分解的复酉矩阵或实正交矩阵,或者当省略
p、q时,由子块X11、X12、X21、X22组成的可迭代对象。- pint, 可选
左上角块
X11的行数,仅当 X 作为数组提供时使用。- qint, 可选
左上角块
X11的列数,仅当 X 作为数组提供时使用。- separatebool, 可选
如果为
True,则返回低级分量而不是矩阵因子,即(u1,u2)、theta、(v1h,v2h),而不是u、cs、vh。- swap_signbool, 可选
如果为
True,则-S、-I块将位于左下角,否则(默认情况下)它们将位于右上角。- compute_ubool, 可选
如果为
False,则不会计算u并返回一个空数组。- compute_vhbool, 可选
如果为
False,则不会计算vh并返回一个空数组。
- 返回:
- undarray
当
compute_u=True时,包含由块U1(pxp)和U2(m-pxm-p)正交/酉矩阵组成的块对角正交/酉矩阵。如果separate=True,则此项包含(U1, U2)的元组。- csndarray
- 具有上述结构的余弦-正弦因子。
如果为
separate=True,则此项包含theta数组,其中包含以弧度表示的角度。
- vhndarray
当
compute_vh=True时,包含由块V1H(qxq)和V2H(m-qxm-q)正交/酉矩阵组成的块对角正交/酉矩阵。如果separate=True,则此项包含(V1H, V2H)的元组。
备注
此文档假定数组参数具有指定的“核心”形状。但是,此函数的数组参数可能在核心形状之前附加额外的“批处理”维度。在这种情况下,数组被视为低维切片的批处理;有关详细信息,请参阅 批处理线性操作。
参考文献
[1]Brian D. Sutton. Computing the complete CS decomposition. Numer. Algorithms, 50(1):33-65, 2009.
示例
>>> import numpy as np >>> 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