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 提供,也可以通过其子块以可迭代方式提供,从中推导出形状。请参阅以下示例。
- 参数:
- Xarray_like,iterable
要分解的复酉矩阵或实正交矩阵,或者子块
X11
、X12
、X21
、X22
的可迭代对象,当省略p
、q
时使用。- pint, optional
左上块
X11
的行数,仅当 X 作为数组给出时使用。- qint, optional
左上块
X11
的列数,仅当 X 作为数组给出时使用。- separatebool, optional
如果为
True
,则返回低级组件,而不是矩阵因子,即(u1,u2)
,theta
,(v1h,v2h)
,而不是u
,cs
,vh
。- swap_signbool, optional
如果为
True
,则-S
,-I
块将位于左下角,否则(默认)它们将位于右上角块中。- compute_ubool, optional
如果为
False
,则不会计算u
并返回一个空数组。- compute_vhbool, optional
如果为
False
,则不会计算vh
并返回一个空数组。
- 返回:
- undarray
当
compute_u=True
时,包含由块U1
(p
xp
) 和U2
(m-p
xm-p
) 正交/酉矩阵组成的块对角正交/酉矩阵。如果separate=True
,则包含(U1, U2)
的元组。- csndarray
- 具有上述结构的余弦-正弦因子。
如果
separate=True
,则包含包含弧度角的theta
数组。
- vhndarray
当
compute_vh=True
时,包含由块V1H
(q
xq
) 和V2H
(m-q
xm-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