所以目前我正在使用如下代码:
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?
不,正如文档中所指定的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)
| 归档时间: |
|
| 查看次数: |
4217 次 |
| 最近记录: |