所以目前我正在使用类似如下的代码
Q,R = np.linalg.qr(matrix)
Qb = np.dot(Q.T, new_mu[b][n])
x_qr = np.linalg.solve(R, Qb)
mu.append(x_qr)
只要我的矩阵是正方形,代码就可以正常工作,但是一旦不行,系统就无法解决,并且我得到了错误。如果我理解正确的话,我不能在非满秩矩阵上使用linalg.solve
,但是有没有办法我可以不使用lstsquare
解决方案来克服这一障碍呢?
答案 0 :(得分:2)
否,这是不可能的,例如specified in the np.linalg.solve
docs。
问题在于,给定Ax = b
时,如果A
不是正方形,则假设A
中的所有行都是线性独立的,则方程式是超定的还是超定的。这意味着不存在单个x
可以解决该方程。
直觉上,想法是,如果您要尝试求解n
(长度为x
)个变量,则需要精确的n
方程式来找到唯一的解对于x
,假定这些方程式不是“冗余的”。在这种情况下,“冗余”表示线性相关:一个方程式等于另一个方程式中一个或多个的线性组合。
在这种情况下,可能要做的一件事是找到使x
最小的norm(b - Ax)^2
(即linear least squares解决方案):
x, _, _, _ = np.linalg.lsq(A, b)