python上的线性代数

时间:2015-03-13 17:38:33

标签: python numpy

我想使用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)

3 个答案:

答案 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的答案相同,或者至少足够接近。