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
要分解的複數么正或實數正交矩陣,或當省略
p
、q
時,可迭代的子區塊X11
、X12
、X21
、X22
的 iterable。- 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