使用 np.linalg.lstsq 找到线性系统的最小二乘解
最小二乘法是比未知数更多方程式问题的标准方法,也称为超定系统。
考虑四个方程式:
x0 + 2 * x1 + x2 = 4
x0 + x1 + 2 * x2 = 3
2 * x0 + x1 + x2 = 5
x0 + x1 + x2 = 4
我们可以将其表示为矩阵乘法 A * x = b
:
A = np.array([[1, 2, 1],
[1,1,2],
[2,1,1],
[1,1,1]])
b = np.array([4,3,5,4])
然后用 np.linalg.lstsq
解决:
x, residuals, rank, s = np.linalg.lstsq(A,b)
x
是解,residuals
是和,rank
是输入 A
的矩阵等级 ,s
是 A
的奇异值 。如果 b
有多个维度,lstsq
将解决对应于 b
的每一列的系统:
A = np.array([[1, 2, 1],
[1,1,2],
[2,1,1],
[1,1,1]])
b = np.array([[4,3,5,4],[1,2,3,4]]).T # transpose to align dimensions
x, residuals, rank, s = np.linalg.lstsq(A,b)
print x # columns of x are solutions corresponding to columns of b
#[[ 2.05263158 1.63157895]
# [ 1.05263158 -0.36842105]
# [ 0.05263158 0.63157895]]
print residuals # also one for each column in b
#[ 0.84210526 5.26315789]
rank
和 s
仅取决于 A
,因此与上述相同。