也许这是一个非常初级的问题。我对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]
只有当我们改变
b
和np.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
执行您想要的操作。你的第二种方法可以归结为这样一个事实:对于任何二维
a
ndarray
,以及任何形状匹配的一维a
ndarray
,都将等于x
。这是因为在这两个操作中,将np.dot(a, x)
视为矩阵乘法,分别视为列向量和行向量,对于任何矩阵$a$和任何向量$x$,$Ax=(x^TA^T)^T$。关于python - 在Python中求解线性方程式(不适用于linalg.solve),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48361263/