首页 > 解决方案 > numpy linalg.solve,不是方阵

问题描述

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

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解决方案的情况下克服这个障碍?

标签: pythonnumpy

解决方案


不,这是不可能的,如docs中所述np.linalg.solve

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

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

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

x, _, _, _ = np.linalg.lsq(A, b)

推荐阅读