在sympy方程中保留符号的顺序

时间:2017-03-10 20:48:58

标签: python sympy symbolic-math

我想按以下顺序保留等式的结构。

*请注意,这是同情的。

Eq=A*X+B*U

其中X,U被分配给其他方程式。

Sympy用其他地方分配的变量扩展我的符号。 所以它最终会像:B x + B x ** 2 + 3 * A * x 我想做的是保留A X B U的顺序。

更新澄清: 嗨!谢谢你的答复。

  1. 在尝试了不同的选项之后,我发现通过使用Matrixsymbols,可以不操作矩阵中的元素。但是我仍然无法让它显示出所需的顺序。

  2. 这样做的原因是我可以将它保存在一个jupyter笔记本中,订单可能有助于解释或记录特定程序。

1 个答案:

答案 0 :(得分:1)

使用变量创建表达式时,将在创建期间使用这些变量的值,例如

>>> x = cos(3)
>>> eq = x + 2
>>> eq
cos(3) + 2

因此,如果您希望eq看起来像x + 2,则必须确保将x定义为符号x

>>> x = Symbol('x')
>>> eq = x + 2
>>> eq
x + 2

如果您有多个符号并且想要控制排序,请使用未评估的表达式:

>>> A,B,X,U = symbols('A B X U')
>>> ax = Mul(A, X, evaluate=False)
>>> bu = Mul(B, U, evaluate=False)
>>> eq = Add(ax, bu, evaluate=False)
>>> eq
A*X + B*U

您可以将所需的值替换为

>>> eq.subs({U:x+x**2, X:3*x})
3*A*x + B*(x**2 + x)
>>> expand(_)
3*A*x + B*x**2 + B*x

这对您要做的事情有帮助吗?