请问 scipy 或 numpy 有办法得到线性方程组 Ax=b 的通解吗?

2015-10-25 21:36:53 +08:00
 fatea
试了下 scipy.linalg 的 solve 和 lstsq ,前者直接要求 A 满秩(可逆),后者似乎也没法得出通解。
比如 ax=b
```
a = np.array([[2, -2, -4], [-1, 3, 4], [1, -2, -3]])
b = np.array([0, 0, 0])
```
要如何才能得出通解 x 为 c * [1, -1, 1] 呢?
5444 次点击
所在节点    问与答
6 条回复
hedaors
2015-10-26 00:43:33 +08:00
你这个不就是求解矩阵本征矢么?

用 np.linalg.eig 就行。而且你会有 3 组解,不是一组解。

给出的本征失是归一化的,也就是你所说的 [1, -1, 1] 其实会是 [0.57735027, -0.57735027, 0.57735027]
canautumn
2015-10-26 00:46:35 +08:00
从另一个角度来说,通解里边有 c ,所以是 sympy 的范畴。按照这里的任意一种方法可解: http://stackoverflow.com/questions/31547657/how-can-i-solve-system-of-linear-equations-in-sympy
fatea
2015-10-26 01:16:27 +08:00
@hedaors 非常感谢!
fatea
2015-10-26 01:16:37 +08:00
@canautumn 非常感谢!
fatea
2015-10-26 12:33:44 +08:00
@hedaors @canautumn 我随手举的例子不太好...这个例子因为恰好特征值为 0, 所以退化成了求特征向量了。我是想知道 Python 有没有求齐次 /非齐次线性方程组通解的库,就是最后能给出 c1 * [] + c2 * [] + [特解] 这种形式的。
fatea
2015-10-26 12:39:58 +08:00
@hedaors @canautumn 补充下,就像 Matlab 或 Mathematica 里那样 输入 Ax= b ,直接给出 x 通解的函数。因为我看说 Python 已经实现 Matlab 很多功能了,但是找来找去找不到。毕竟求线性方程组通解应该是个很基础的功能吧……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/231003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX