我在另一个主题(Multilateration of GPS Coordinates)中找到了一段代码,它应该通过SVD方法解决矩阵。我正在使用它,但现在我必须能够解释代码的机制,我无法找到其简单性的数学原因:
A = np.array(A)
(_,_,v) = np.linalg.svd(A)
# Get the minimizer
w = v[3,:]
w /= w[3]
然而,它适用于我的情况。这是我的一个矩阵和解决方案的示例:
Matrix A
[[ 0.01944444 -0.91680556 0.4567078 ]
[ 0. -0.93430556 0.47549222]]
Matrix v
[[-0.00927192 0.89308049 -0.44980137]
[-0.91093059 0.1779953 0.37218697]
[ 0.41245545 0.41318872 0.81188398]]
Solution:
0.508022647987 0.508925817052
左边的两列是矩阵A,右边的列是形式为Ax = b的矩阵中的矩阵b,但由于某种原因,代码将它们组合成一个矩阵。我知道存在最小二乘法,但经过测试后,当矩阵超定时,它不那么稳健和准确。