cossin#
- scipy.linalg.cossin(X, p=None, q=None, отдельный=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, необязательный
Количество строк верхнего левого блока
X11, используется только когда X задан как массив.- qint, необязательный
Количество столбцов левого верхнего блока
X11, используется только когда X задан как массив.- отдельныйbool, необязательно
if
True, вместо матричных факторов возвращаются низкоуровневые компоненты, т.е.(u1,u2),theta,(v1h,v2h)вместоu,cs,vh.- swap_signbool, необязательно
if
True,-S,-Iблок будет в нижнем левом углу, в противном случае (по умолчанию) они будут в верхнем правом блоке.- compute_ubool, необязательно
if
False,uне будет вычислен и возвращается пустой массив.- compute_vhbool, необязательно
if
False,vhне будет вычислен и возвращается пустой массив.
- Возвращает:
- undarray
Когда
compute_u=True, содержит блочную диагональную ортогональную/унитарную матрицу, состоящую из блоковU1(pxp) иU2(m-pxm-p) ортогональные/унитарные матрицы. Еслиseparate=True, это содержит кортеж из(U1, U2).- csndarray
- Косинус-синусный множитель со структурой, описанной выше.
Если
separate=True, это содержитthetaмассив, содержащий углы в радианах.
- vhndarray
Когда
compute_vh=True`, contains the block diagonal orthogonal/unitary matrix consisting of the blocks ``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