使用python求解非方阵A的Ax = b

新手上路,请多包涵

我专注于特殊情况,其中 A 是 anxd 矩阵(其中 k < d)表示 R^d 的子空间的正交基,已知 b 位于子空间内。我想过使用 numpy 提供的工具,但是它们只适用于方矩阵。我的方法是用一些线性无关的向量填充矩阵以对其进行“平方”然后求解,但我不知道如何选择这些向量以使它们与基向量线性无关,而且我认为它是不是唯一的方法,我错过了一些可以使这更容易的东西。确实有比我提到的方法更简单的方法吗?如果不是,我究竟如何选择那些可以完成 A 的向量到一个方阵中?

原文由 Ron Tubman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 899
1 个回答

正如您提到的, np.linalg.solve 需要一个满秩方阵。

对于所有其他线性情况,如果您对 min||Ax-b||^2. 感兴趣(您可能是),您可以使用 np.linalg.lstsq

通过计算最小化欧几里德 2-范数 || 的向量 x 来求解方程 ax = b b - 斧头 ||^2。

方程可能欠定、良好或超定(即,a 的线性独立行数可以小于、等于或大于其线性独立列数)。如果 a 是方阵且满秩,则 x(但舍入误差除外)是方程的“精确”解。

(我加粗注释)

原始文档中也提到了这一点 np.linalg.solve

a 必须是方阵并且是满秩的,即所有行(或等价地,列)必须是线性独立的;如果两者都不正确,请使用 lstsq 来获得系统/方程的最小二乘最佳“解”。

原文由 sascha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题