V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fatea
V2EX  ›  问与答

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

  •  
  •   fatea · 2015-10-25 21:36:53 +08:00 · 5547 次点击
    这是一个创建于 3350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    试了下 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] 呢?

    6 条回复    2015-10-26 12:39:58 +08:00
    hedaors
        1
    hedaors  
       2015-10-26 00:43:33 +08:00   ❤️ 1
    你这个不就是求解矩阵本征矢么?

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

    给出的本征失是归一化的,也就是你所说的 [1, -1, 1] 其实会是 [0.57735027, -0.57735027, 0.57735027]
    canautumn
        2
    canautumn  
       2015-10-26 00:46:35 +08:00   ❤️ 1
    从另一个角度来说,通解里边有 c ,所以是 sympy 的范畴。按照这里的任意一种方法可解: http://stackoverflow.com/questions/31547657/how-can-i-solve-system-of-linear-equations-in-sympy
    fatea
        3
    fatea  
    OP
       2015-10-26 01:16:27 +08:00 via iPhone
    @hedaors 非常感谢!
    fatea
        4
    fatea  
    OP
       2015-10-26 01:16:37 +08:00 via iPhone
    @canautumn 非常感谢!
    fatea
        5
    fatea  
    OP
       2015-10-26 12:33:44 +08:00 via iPhone
    @hedaors @canautumn 我随手举的例子不太好...这个例子因为恰好特征值为 0, 所以退化成了求特征向量了。我是想知道 Python 有没有求齐次 /非齐次线性方程组通解的库,就是最后能给出 c1 * [] + c2 * [] + [特解] 这种形式的。
    fatea
        6
    fatea  
    OP
       2015-10-26 12:39:58 +08:00 via iPhone
    @hedaors @canautumn 补充下,就像 Matlab 或 Mathematica 里那样 输入 Ax= b ,直接给出 x 通解的函数。因为我看说 Python 已经实现 Matlab 很多功能了,但是找来找去找不到。毕竟求线性方程组通解应该是个很基础的功能吧……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:14 · PVG 04:14 · LAX 12:14 · JFK 15:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.