寻找行减少矩阵python的解决方案

时间:2016-04-17 14:39:56

标签: python numpy matrix scipy linear-algebra

假设我以这种形式减少了矩阵:

   x    y    z    =
[[2.0, 4.0, 4.0, 4.0], 
 [0.0, 2.0, 1.0, 2.0], 
 [0.0, 0.0, 1.0, 1.0], 
 [0.0, 0.0, 0.0, 0.0]]

我想要一个包含解决方案的数组。

在这种情况下,我想要返回

  z    y     x
[1.0, 0.5, -1.0]

我们可以假设它是一个没有自由变量的完美三角形。

我一直在寻找scipy.linalg.solve来解决,但它需要Ax=B格式,而且我不确定如何转换为此格式。

2 个答案:

答案 0 :(得分:4)

您已拥有使用numpy.linalg.solve所需的所有信息。 A由您的2d数组的前3列表示,b是最后一列。因此,如果将数组分别切割为这些元素,则可以调用.solve。请注意,我切掉了最后一行,以便您的系统变得更加明确,因为numpy.linalg.solve需要一个明确的系统:

init_array = numpy.array(
        [[2.0, 4.0, 4.0, 4.0],
         [0.0, 2.0, 1.0, 2.0],
         [0.0, 0.0, 1.0, 1.0],
         [0.0, 0.0, 0.0, 0.0]])

A = init_array[0:3,:-1]
b = init_array[0:3, -1]
x = numpy.linalg.solve(A, b)
print(x)

<强>输出:

[-1.   0.5  1. ]

进一步阅读:

答案 1 :(得分:1)

备注:

     [2.0, 4.0, 4.0, 4.0]  x     0
     [0.0, 2.0, 1.0, 2.0]  y  =  0
     [0.0, 0.0, 1.0, 1.0]  z     0
     [0.0, 0.0, 0.0,-1.0]  t     1

具有相同的解决方案,t = -1。

因此,请I=np.eye(4)b=I[3]。然后通过以下方式给出解决方案:

In [2]: solve(A-I*b,b)[:-1]
Out[2]: array([-1. ,  0.5,  1. ])