python - 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
解决方案的情况下克服这个障碍?
解决方案
不,这是不可能的,如docs中所述np.linalg.solve
。
问题是给定的Ax = b
,如果A
不是平方,那么假设所有行A
都是线性独立的,那么你的方程要么是超定的,要么是欠定的。这意味着不存在x
求解该方程的单个。
直观地说,这个想法是,如果您有n
(长度的x
)个变量要尝试求解,那么假设这些方程不是“冗余的” ,那么您需要精确n
的方程来找到 的唯一解。x
在这种情况下,“冗余”意味着线性相关:一个方程等于一个或多个其他方程的线性组合。
在这种情况下,一件可能有用的事情是找到x
最小化的norm(b - Ax)^2
(即线性最小二乘解):
x, _, _, _ = np.linalg.lsq(A, b)
推荐阅读
- maven - 带有 npm install 的 exec-maven-plugin
- javascript - goPersonal 不是一个函数 javascript
- html - HTML 字体在不同元素上不匹配
- python - 如何将数据框中的列合并到另一个数据框中
- firebase - FCM - 两次获取推送通知数据
- elixir - 在 Ecto 迁移内的约束函数中使用插值。
- css - 使用 &__* 语法到达父选择器时,SASS / SCSS 悬停
- android - React-native不在android中安装apk
- nginx - 我如何为 Tornado 框架设置 nginx 上传模块
- arrays - 在 Array Angular 和 Typescript 中查找最小和最大元素