【问题标题】:How to solve symbolic equation system in Python?如何在 Python 中求解符号方程组?
【发布时间】:2018-04-26 16:18:22
【问题描述】:

我是从 MATLAB 到 Python 的新手。我现在在 Python 中求解方程系统有问题。例如,在 Matlab 中

R = solve( a1*[x1; x2] == [y1;y2], ...  
           a2*[x3; x4] == [y3;y4], ...
           a3*[x5; x6] == [y5;y6], ... 
           x2 == y3, x3 == y2, ...        
           x4 == y5, x5 == y4, ... 
           [    x2 x3 x4 x5    ...   
             y1 y2 y3 y4 y5 y6]...   % unknown
          );
y1 = simplify(R.y1);
y10 = simplify(R.y10);

a1..a5 是系数 y1 y10 是我需要求解的,它们应该是求解后的符号表达式。如何在 Python 中做到这一点?

【问题讨论】:

    标签: python numpy matrix sympy equation


    【解决方案1】:

    NumPy 没有符号解的概念。您可以按如下方式使用 SymPy:

    from sympy import *
    a1, a2, a3 = 3, 4, 5   #   known coefficients, they could be symbols too
    x1, x2, x3, x4, x5, x6 = symbols('x1:7')
    y1, y2, y3, y4, y5, y6 = symbols('y1:7')
    eqns = [a1*x1 - y1, a1*x2 - y2, a2*x3 - y3, a2*x4 - y4, a3*x5 - y5, a3*x6 - y6, 
            x2 - y3, x3 - y2, x4 - y5, x5 - y4]
    linsolve(eqns, [x1, x2, x3, x4, x5, x6, y1, y2, y3, y4, y5, y6])
    

    输出为{(y1/3, 0, 0, 0, 0, y6/5, y1, 0, 0, 0, 0, y6)},表示大部分变量必须是0,x1必须是y1/3,x5必须是y6/6,变量y1,y2可以是whataver。

    上面使用linsolve,因为系统在每个未知数中都是线性的。其他solvers 可用于非线性方程。

    请注意,方程式可以输入为lhs - rhs(正如我在上面所做的)或Eq(lhs, rhs)。不像 lhs == rhs 在 Python 中会立即评估为 False。

    【讨论】:

    • 感谢您的回答。我看到您在方程式中扩展了矩阵。如何将它们保存在 Matrix 中? linsolve(a1*matrix([[x1],[y1]])....) 方法正确吗?
    • 正如 linsolve 文档所说,矩阵形式或列表形式都是可以接受的。但不是你的例子中两者的混合。您需要在 Python 中执行一些操作,以将方程转换为 linsolve 可以理解的形式。
    • 如果 a1,a2,a3 是 2x2-Matrix 并且有复杂表达式的成员,我们如何解决它。我自己尝试了 7 多个小时,但没有解决 jet /0/
    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2019-09-25
    • 1970-01-01
    • 2021-12-22
    • 2021-05-27
    相关资源
    最近更新 更多