当前位置: 代码迷 >> python >> 全局重新定义一个SymPy符号(全局子)
  详细解决方案

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

热度:96   发布时间:2023-07-16 10:17:07.0

我似乎无法在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

可能吗?

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

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

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]])