我正在尝试使用Python来避免在我的学校的MATLAB或Maple计算机上工作 . 我正在尝试在Ax = b中找到x的简单任务 . 我有两个向量,u = [1,1,1]和v = [1,-1,2],它们组成A.对于b,我的向量是[1,5,-1] . 我知道解决方案是[3,-2],这在Maple ... LinearSolve(<u|v>,<1,5,-1>)
中使用LinearSolve时得到了证实 . 在Numpy中,我解决此问题的代码如下......
import numpy as np
#Define vector u = (1,1,1)
u = [1,1,1]
#define vector v = (1,-1,2)
v = [1,-1,2]
x = np.array([u,v])
x = np.transpose(x)
y = np.array([1,5,-1])
try:
print(x,y)
np.linalg.solve(x,y)
except Exception as e:
print("The equation cannot be solved. "+str(e))
我已经尝试过转置矩阵A,但这并没有产生任何不同于我没有的东西 . 它们都产生了与错误消息完全相同的输出,如下所示 . 唯一的区别是当我不调用转置时矩阵x是2x3,我相信这不是我想要的 .
[[ 1 1]
[ 1 -1]
[ 1 2]] [ 1 5 -1]
The equation cannot be solved. Last 2 dimensions of the array must be square
我已经阅读了文档,我不理解为什么我不能在这里得到解决方案 . 根据我的理解,这应该导致以下等式... 3 [1,1,1] - 2 [1,-1,2] = [1,5,-1] .
1 回答
您的A矩阵不是正方形,因此不能使用solve .
如上所述,您可能想要使用lstsq .
(大胆的文字由我注释 . )
使用:
代码返回
[3, -2]
(作为结果的第一个元组元素),如您所料 .对于像解决Ax = b(将使用哪种算法)的一些操作,Matlab通常有点不透明/魔术 . 另一方面,Numpy更低级,需要更多的用户支持(这本身并不是一件坏事) .
摘自matlab-docs: