scipy.linalg.polar

scipy.linalg.polar(a, side='right')[源代码]

计算极分解。

返回极分解的因子 [1] u‘和 `p 这样一来, a = up (如果 side 是否“正确”)或 a = pu (如果 side 是“左”),其中 p 是半正定的。根据形状的不同 a 的行或列 u 都是正交的。什么时候 a 是一个正方形阵列, u 是一个正方形酉阵。什么时候 a 不是正方的,“正则极分解” [2] 是经过计算的。

参数
a(m,n)类数组

要分解的数组。

side{‘左’,‘右’},可选

确定是计算右极分解还是计算左极分解。如果 side 是“对的”,那么 a = up 。如果 side 是“左”,那么 a = pu 。默认值为“Right”。

退货
u(M,n)ndarray

如果 a 是正方形的,那么 u 是一元性的。如果m>n,则 a 是正交的,如果m<n,则 u 都是正交的。

pndarray

p 是厄米特半正定的吗?如果 a 不是单数的, p 是肯定的。的形状 p 是(n,n)还是(m,m),取决于 side 分别是“右”或“左”。

参考文献

1

R·A·霍恩和C·R·约翰逊,“矩阵分析”,剑桥大学出版社,1985。

2

N·J·希格姆,“矩阵的函数:理论与计算”,SIAM,2008。

示例

>>> from scipy.linalg import polar
>>> a = np.array([[1, -1], [2, 4]])
>>> u, p = polar(a)
>>> u
array([[ 0.85749293, -0.51449576],
       [ 0.51449576,  0.85749293]])
>>> p
array([[ 1.88648444,  1.2004901 ],
       [ 1.2004901 ,  3.94446746]])

非方示例,其中m<n:

>>> b = np.array([[0.5, 1, 2], [1.5, 3, 4]])
>>> u, p = polar(b)
>>> u
array([[-0.21196618, -0.42393237,  0.88054056],
       [ 0.39378971,  0.78757942,  0.4739708 ]])
>>> p
array([[ 0.48470147,  0.96940295,  1.15122648],
       [ 0.96940295,  1.9388059 ,  2.30245295],
       [ 1.15122648,  2.30245295,  3.65696431]])
>>> u.dot(p)   # Verify the decomposition.
array([[ 0.5,  1. ,  2. ],
       [ 1.5,  3. ,  4. ]])
>>> u.dot(u.T)   # The rows of u are orthonormal.
array([[  1.00000000e+00,  -2.07353665e-17],
       [ -2.07353665e-17,   1.00000000e+00]])

另一个非平方示例,其中m>n:

>>> c = b.T
>>> u, p = polar(c)
>>> u
array([[-0.21196618,  0.39378971],
       [-0.42393237,  0.78757942],
       [ 0.88054056,  0.4739708 ]])
>>> p
array([[ 1.23116567,  1.93241587],
       [ 1.93241587,  4.84930602]])
>>> u.dot(p)   # Verify the decomposition.
array([[ 0.5,  1.5],
       [ 1. ,  3. ],
       [ 2. ,  4. ]])
>>> u.T.dot(u)  # The columns of u are orthonormal.
array([[  1.00000000e+00,  -1.26363763e-16],
       [ -1.26363763e-16,   1.00000000e+00]])