目前我正在处理类似以下代码:
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
解决方案呢?
np.linalg.solve
文档中所指定的。问题在于,如果给定Ax = b
,如果A
不是方阵,则假设A
中的所有行都是线性独立的,那么您的方程要么是过度确定的,要么是欠定的。这意味着不存在一个单一的x
来解决这个方程。n
(x
的长度)个变量需要求解,则需要恰好n
个方程才能找到x
的唯一解,假设这些方程不是“冗余”的。在这种情况下,“冗余”意味着线性相关:一个方程等于另一个或多个方程的线性组合。norm(b - Ax)^2
最小的 x
(即线性最小二乘解):x, _, _, _ = np.linalg.lsq(A, b)