用 np.linalg.solve 在 numpy 中用 2 个未知方程和 3 个方程求解线性方程
Solve linear equation with 2 unkown and 3 equations in numpy with np.linalg.solve
具有两个未知数的 3 个方程有 3 个解:一个解、无限解、无解。
你会如何在 Numpy 中写这个
得到解决方案?
我按照你对 3 个未知数的方式进行了尝试:
import numpy as np
a = np.array([-9,-8, 14])
A = np.array([[ 1, 2, -2],
[-3,-1, 4],
])
x = np.linalg.solve(A, a)
print(x)
但给出错误,因为 A 不是正方形。遗憾的是,如果我删除 a 和 A 的最后一列,尽管我得到了答案,但系统可能仍然没有解,因为它可能不适合第三个方程。
您可以使用 lstsq
方法完成所有这些操作。例如,
a = np.array([-9,-8, 14])
A = np.array([[ 1, 2, -2],
[-3,-1, 4],
])
x,err,rk = np.linalg.lstsq(A.T, a)[:3]
print(x)
print(err)
print(rk)
产生输出
[-3. 2.]
[9.98402083e-31]
2
从误差为零(达到数值精度)这一事实,您知道这个解是精确的,也就是说 A.T@x
应该正好等于 a
。所以,系统至少有一个解。
根据秩为 2(与 A.T
中的列数匹配)这一事实,我们推断 A.T
具有平凡的零空间,这意味着任何解都是唯一的。
具有两个未知数的 3 个方程有 3 个解:一个解、无限解、无解。 你会如何在 Numpy 中写这个 得到解决方案? 我按照你对 3 个未知数的方式进行了尝试:
import numpy as np
a = np.array([-9,-8, 14])
A = np.array([[ 1, 2, -2],
[-3,-1, 4],
])
x = np.linalg.solve(A, a)
print(x)
但给出错误,因为 A 不是正方形。遗憾的是,如果我删除 a 和 A 的最后一列,尽管我得到了答案,但系统可能仍然没有解,因为它可能不适合第三个方程。
您可以使用 lstsq
方法完成所有这些操作。例如,
a = np.array([-9,-8, 14])
A = np.array([[ 1, 2, -2],
[-3,-1, 4],
])
x,err,rk = np.linalg.lstsq(A.T, a)[:3]
print(x)
print(err)
print(rk)
产生输出
[-3. 2.]
[9.98402083e-31]
2
从误差为零(达到数值精度)这一事实,您知道这个解是精确的,也就是说 A.T@x
应该正好等于 a
。所以,系统至少有一个解。
根据秩为 2(与 A.T
中的列数匹配)这一事实,我们推断 A.T
具有平凡的零空间,这意味着任何解都是唯一的。