全局重新定义一个SymPy符号(全局子)

时间:2018-10-04 14:37:56

标签: python sympy

我似乎无法在SymPy文档中找到所需的内容:基本上我想做的是重新定义符号,以便它在每个表达式中都可以更改。

类似这样的东西:

from sympy import *

x, y = symbols("x y")

expr1 = 2*x + y
expr2 = x**2 + 2*y

x.redefine("foo")
print(expr1, expr2)

x.redefine(2)
print(expr1, expr2)

输出:

2*foo + y, foo**2 + 2*y
4 + y, 4 + 2*y

有可能吗?

2 个答案:

答案 0 :(得分:0)

Sympy以无法永久重新定义的方式设计。但是,您可以使用以下命令在表达式中替换符号。 Here是它的文档。

expr1.subs({x:"foo"}) #for changing only one symbol.
expr2.subs({x:10, y:20}) #for changing both the symbols.

答案 1 :(得分:0)

SymPy表达式是不可变的:它们永远不会改变。因此,不可能有任何隐式修改所有先前存在的表达式的全局开关。

要处理多个表达式中的替换,可以使用循环,列表理解或将subs应用于矩阵。例子:

expressions = [2*x + y, x**2 + 2*y, x - y/2]
print([expr.subs(x, 3) for expr in expressions])
mat = Matrix(expressions)
print(mat.subs(x, 3))

此打印:

[y + 6, 2*y + 9, -y/2 + 3]
Matrix([[y + 6], [2*y + 9], [-y/2 + 3]])