【问题标题】:Finding upper/lower triangular form of arbitrary matrix n*n - python查找任意矩阵 n*n 的上/下三角形式 - python
【发布时间】:2015-02-03 10:34:25
【问题描述】:

每个矩阵都可以写成上三角或下三角形式,只需旋转基础即可。 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 归零,而是通过以最简单的方式正确旋转基础。

谢谢!

【问题讨论】:

    标签: python arrays numpy matrix linear-algebra


    【解决方案1】:

    您正在寻找Schur decomposition。 Schur 分解将矩阵A 分解为A = Q U Q^H,其中U 是上三角矩阵,Q 是酉矩阵(影响基旋转),Q^HQ 的厄米伴随矩阵。

    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]])
    

    【讨论】:

    • 它有效,但在我的情况下,分解不是很好。一个应该为零的数字是小的非零。但就我而言,这已经足够精确了。
    • 这可能是floating point issue 吗?矩阵旋转通常会导致精度损失。请参阅此question 的答案以获取可能的解决方案。
    • 是的,我认为是这样。需要非常小的旋转,所以酉矩阵的元素很小或接近一个。但是我现在说的已经足够了。谢谢。
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2021-11-03
    相关资源
    最近更新 更多