polar#
- scipy.linalg.polar(a, side='right')[源代码]#
计算极分解。
返回极分解的因子 [1] u 和 p,使得
a = up
(如果 side 为“right”)或a = pu
(如果 side 为“left”),其中 p 为正半定的。根据 a 的形状,u 的行或列是正交归一的。当 a 为一个方阵时,u 为一个方阵酉阵。当 a 为非方阵时,计算“经典极分解” [2]。- 参数:
- a(m, n) array_like
要分解的阵列。
- side{‘left’, ‘right’}, 可选
确定计算的是右极分解还是左极分解。如果 side 为“right”,则
a = up
。如果 side 为“left”,则a = pu
。默认值为“right”。
- 返回:
- u(m, n) 行列
em class="xref py py-obj">a が正方行列である場合、em class="xref py py-obj">u がユニタリ行列になります。m > n の場合、em class="xref py py-obj">a の列が正規直交となり、m < n の場合、em class="xref py py-obj">u の行が正規直交します。
- p行列
em class="xref py py-obj">p はエルミート正半定値です。em class="xref py py-obj">a が正則行列である場合、em class="xref py py-obj">p は正定値です。em class="xref py py-obj">p の形状は (n, n) または (m, m) で、em class="xref py py-obj">side がそれぞれ「right」または「left」であるかどうかに依存します。
参考文献
[1]R. A. Horn および C. R. Johnson、「行列解析」、ケンブリッジ大学出版局、1985 年
[2]N. J. Higham、「行列関数: 理論と計算」、SIAM、2008 年
例
>>> import numpy as np >>> 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]])