LinAlgError:数组的最后2个维度必须是正方形

K J*_*son 8 python numpy linear-algebra

我需要为x 解决一组形式为A x = B的联立方程.我使用了numpy.linalg.solve函数,输入A和B,但是我得到错误'LinAlgError:数组的最后2个维必须是正方形'.我该如何解决?

这是我的代码:

A = matrix([[v1x, v2x], [v1y, v2y], [v1z, v2z]])
print A

B = [(p2x-p1x-nmag[0]), (p2y-p1y-nmag[1]), (p2z-p1z-nmag[2])]
print B

x = numpy.linalg.solve(A, B)
Run Code Online (Sandbox Code Playgroud)

矩阵/向量的值在代码中先前计算,这很好,但值是:

A =

(-0.56666301, -0.52472909)
(0.44034147, 0.46768087)
(0.69641397,  0.71129036)
Run Code Online (Sandbox Code Playgroud)

B =

(-0.38038602567630364, -24.092279373295057, 0.0)
Run Code Online (Sandbox Code Playgroud)

x应该具有形式(x1,x2,0)

Kei*_*van 15

如果你还没有找到答案,或者以后有人有这个问题.

要解决Ax = b:

numpy.linalg.solve使用LAPACK gesv.如LAPACK文档中所述,gesv要求A为正方形:

LA_GESV计算实数或复数线性方程组A X = B的解,其中A是方阵,X和B是矩形矩阵或向量.使用行交换的高斯消元将因子A用作A = P L*U,其中P是置换矩阵,L是单位下三角形,U是上三角形.然后使用A的因式形式来解决上述系统.

如果A矩阵不是方形,则意味着您要么拥有比方程更多的变量,要么反过来.在这些情况下,您可以处理无解决方案或无限数量的解决方案.决定解空间的是矩阵与列数相比的等级.因此,您首先必须检查矩阵的等级.

话虽这么说,你可以使用另一种方法来解决你的线性方程组.我建议看看LU或QR甚至SVD等因子分解方法.在LAPACK中,您可以使用getrsPython中的不同内容:

  • 首先像QR那样进行分解,然后将得到的矩阵输入到类似的方法中 scipy.linalg.solve_triangular
  • 用最小二乘法求解 numpy.linalg.lstsq

还可以看看这里制定并解决了一个简单的例子.


ash*_*han 5

方阵是行数和列数相同的矩阵。您正在做的矩阵是 3 x 2。添加一列零来解决此问题。

  • 我尝试这样做,结果出现错误“LinAlgError:奇异矩阵”? (4认同)