【发布时间】:2018-01-20 21:25:23
【问题描述】:
这可能是一个非常初级的问题。我是 python 和此类操作的新手。但将不胜感激任何帮助。 我正在尝试使用 numpy linalg 在 Python 中求解线性方程组。
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.]
那么,问题来了。
谁能解释一下为什么我不能使用linalg.solve 得到 [ 2. 1. -1.] ?
【问题讨论】:
标签: python numpy scipy linear-algebra algebra