使用 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矩陣等級sA奇異值 。如果 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]

ranks 僅取決於 A,因此與上述相同。