寻找 upper/lower 任意矩阵 n*n 的三角形式 - python
Finding upper/lower triangular form of arbitrary matrix n*n - python
每个矩阵都可以简单地通过旋转基础来写成上三角或下三角形式。 python (numpy) 中是否有一个简单的例程来做到这一点?我找不到它,我不敢相信没有这样的东西。举个例子:
matrix = numpy.array([[a,b,c],
[d,e,f],
[g,h,i]])
到
matrix2 = numpy.array([[z,0,0],
[y,x,0],
[v,u,t]])
字母是浮点数。那么如何进行这种改变,但不仅仅是通过将数字 b、c 和 f 归零,而是通过以最简单的方式正确旋转基础。
谢谢!
您正在寻找 Schur decomposition。 Schur 分解将矩阵 A
分解为 A = Q U Q^H
,其中 U
是上三角矩阵,Q
是酉矩阵(影响基旋转),Q^H
是 Q
的 Hermitian 伴随。
import numpy as np
from scipy.linalg import schur
a = np.array([[ 1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
u, q = schur(a) # q is the unitary matrix, u is upper triangular
repr(u)
# array([[ 1.61168440e+01, 4.89897949e+00, 1.58820582e-15],
# [ 0.00000000e+00, -1.11684397e+00, -1.11643184e-15],
# [ 0.00000000e+00, 0.00000000e+00, -1.30367773e-15]])
每个矩阵都可以简单地通过旋转基础来写成上三角或下三角形式。 python (numpy) 中是否有一个简单的例程来做到这一点?我找不到它,我不敢相信没有这样的东西。举个例子:
matrix = numpy.array([[a,b,c],
[d,e,f],
[g,h,i]])
到
matrix2 = numpy.array([[z,0,0],
[y,x,0],
[v,u,t]])
字母是浮点数。那么如何进行这种改变,但不仅仅是通过将数字 b、c 和 f 归零,而是通过以最简单的方式正确旋转基础。
谢谢!
您正在寻找 Schur decomposition。 Schur 分解将矩阵 A
分解为 A = Q U Q^H
,其中 U
是上三角矩阵,Q
是酉矩阵(影响基旋转),Q^H
是 Q
的 Hermitian 伴随。
import numpy as np
from scipy.linalg import schur
a = np.array([[ 1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
u, q = schur(a) # q is the unitary matrix, u is upper triangular
repr(u)
# array([[ 1.61168440e+01, 4.89897949e+00, 1.58820582e-15],
# [ 0.00000000e+00, -1.11684397e+00, -1.11643184e-15],
# [ 0.00000000e+00, 0.00000000e+00, -1.30367773e-15]])