为什么用具有相同名称但不同符号名称的变量替换表达式中的变量不起作用

问题描述 投票:1回答:1

如何使用初始变量的新定义替换函数中的变量?

import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x

此时在解释器中输入g将打印: 5 * A * X。

现在我想用alpha替换打印的a。为什么以下不起作用?

a = sy.symbols("alpha")
g = g.subs(a,a)

我很清楚我可以使用以下内容:

import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x
alpha = sy.symbols("alpha")
g = g.subs(a,alpha)

但我想理解为什么前一种方法不起作用。一般来说,我感兴趣的是指定的名称a =和符号(“a”)中的字符串是如何连接的。对于正常工作的同情,他们必须是一样的吗?

python sympy substitution
1个回答
1
投票

g = g.subs(a, a)永远不会做任何事情,因为它正在取代自己的东西。

用其他东西取代a

g.subs(a, sy.symbols('alpha'))

应该使用。 SymPy文档中的相关主题是Assignment does not create a relation。一个更简单的例子:

a = sy.symbols('a')
b = a + 3      # b is now a+3 
a = 5          # b is still a+3 and it will not become 8

在此代码的末尾,Python变量a与名为“a”的SymPy符号无关。变量是5;由于SymPy表达式是不可变的,因此符号仍然是Symbol("a")并将永远存在。不应该使用a = 5而应该使用b.subs(a, 5)来执行替换。

我感兴趣的是指定名称a =和符号(“a”)中的字符串是如何连接的。

他们根本没有联系。使用Python变量a指向名为“a”的符号很方便,这是人们这样做的唯一原因。不幸的是,这种模式误导他们认为如果他们把a =新的东西,那将对Symbol("a")产生影响 - 它不会。唯一的影响是Python变量现在指向别的东西;包含Symbol("a")的表达式不受影响。

© www.soinside.com 2019 - 2024. All rights reserved.