numpy linalg.solve,不是一个方阵。

3

目前我正在处理类似以下代码:

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 解决方案呢?

1个回答

4
不可能,正如np.linalg.solve文档中所指定的。问题在于,如果给定Ax = b,如果A不是方阵,则假设A中的所有行都是线性独立的,那么您的方程要么是过度确定的,要么是欠定的。这意味着不存在一个单一的x来解决这个方程。
直观地说,如果您有nx的长度)个变量需要求解,则需要恰好n个方程才能找到x的唯一解,假设这些方程不是“冗余”的。在这种情况下,“冗余”意味着线性相关:一个方程等于另一个或多个方程的线性组合。
在这种情况下,可能有用的一件事情是找到使得 norm(b - Ax)^2 最小的 x(即线性最小二乘解):
x, _, _, _ = np.linalg.lsq(A, b)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接