我想使用numpy.linalg.solve来解决线性代数方程,但是我得到一条错误消息,说“数组的最后2个维度必须是正方形”。非常感谢!!这是我的代码:
import numpy as np
from numpy. linalg import solve
A = np.array([[3,-1,-1,0,0,0], [-1,4,-1,-1,0,0], [0,0,-1,-1,4,-1], [0,0,0,-1,-1,3]],float)
w = np.array([5,5,0,0],float)
v = solve(A,w)
print(v)
答案 0 :(得分:5)
正如igavriil已经写过的numpy.linalg.solve
只能用于找到一个确定系统的(确切的)解决方案(即sqare系数矩阵)。
如果您的系统不足或过度确定,通常没有确切的解决方案。
如果您想查找近似解决方案,可以使用numpy.linalg.lstsq
。它使用一种称为“最小二乘拟合”的方法来找到最小化整体误差的解决方案。
答案 1 :(得分:3)
这个错误基本上是说线性系统无法明确解决。这是因为你有6个变量,只有4个方程式。换句话说,系数矩阵必须是方阵。 在以下情况下引发错误:
max(a.shape[-2:]) != min(a.shape[-2:]):
答案 2 :(得分:0)
因此,如果您要 A x = b 而A不是正方形,则可以简单地执行以下操作:
A_pseudoinverse = np.linalg.pinv(A)
x = A_pseudoinverse @ b
它与@jandjob的答案相同,或者至少足够接近。