也许这是一个非常初级的问题。我对python和这种操作还不熟悉。但希望能得到帮助。
我试图用Python来解决一个线性方程组,使用numpy linalg。
x+y+z=2
2x-6y-z=-1个
3x-2z=8
我试图使用linalg.solve()函数

a = np.array([[1,2,3],[1,-6,0],[1,-1,-2]])
b = np.array([2,-1,8])
try:
    x1 = linalg.solve(a,b)
except LinAlgError:
    x1 = linalg.lstsq(a,b)[0]
print(x1)
print(np.dot(a,x1) == b)

这是输出
[ 5.38709677  1.06451613 -1.83870968]
[ True  True  True]

但是,如果我们把这些接收到的值放在方程中,而不是x,y,z,这是行不通的。
我尝试了另一种方法
x = np.dot(np.linalg.inv(a), b)
print(x)
print(np.dot(a,x) == b)

我收到了和以前一样的输出:
 [ 5.38709677  1.06451613 -1.83870968]

只有当我们改变bnp.linalg.inv(a)的位置时,这种方法才有效。现在它给出了正确的输出。
x = np.dot(b, np.linalg.inv(a))
print(x)
print(np.dot(x,a) == b)

它在方程式中工作
[ 2.  1. -1.]

所以,问题来了。
有人能解释一下为什么我不能得到[2]。一。-1.]使用linalg.solve

最佳答案

描述方程左侧的矩阵设置错误;

 np.linalg.solve(a.T, b)

对给定的a执行您想要的操作。
你的第二种方法可以归结为这样一个事实:对于任何二维andarray,以及任何形状匹配的一维andarray,都将等于x。这是因为在这两个操作中,将np.dot(a, x)视为矩阵乘法,分别视为列向量和行向量,对于任何矩阵$a$和任何向量$x$,$Ax=(x^TA^T)^T$。

关于python - 在Python中求解线性方程式(不适用于linalg.solve),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48361263/

10-11 06:20