numpy linalg.solve,不是方阵

Jan*_*rst 3 python numpy

所以目前我正在使用如下代码:

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)
Run Code Online (Sandbox Code Playgroud)

只要我的矩阵是方阵,代码就可以正常工作,但一旦不是方阵,系统就无法求解,并且会出现错误。如果我理解正确的话,我不能linalg.solve在非满秩矩阵上使用,但是有没有办法让我在不使用解决方案的情况下克服这个障碍lstsquare

kev*_*nji 5

不,正如文档中所指定的np.linalg.solve那样,这是不可能的。

问题是,给定Ax = b,如果A不是平方,那么您的方程要么是超定的,要么是欠定的,假设 中的所有行A都是线性独立的。这意味着不存在x解这个方程的单一方程。

直观地说,这个想法是,如果您有n(长度为x)的变量想要求解,那么您需要精确的n方程来找到 的唯一解x,假设这些方程不是“冗余的”。在这种情况下,“冗余”意味着线性相关:一个方程等于一个或多个其他方程的线性组合。

在这种情况下,一件可能有用的事情就是找到x最小化的norm(b - Ax)^2(即线性最小二乘解):

x, _, _, _ = np.linalg.lsq(A, b)
Run Code Online (Sandbox Code Playgroud)