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

时间:2018-09-17 11:37:13

标签: python sympy substitution

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

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

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

现在,我想用字母替换打印的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 =和symbol(“ a”)中的字符串如何连接感兴趣。为了使sympy正常工作,它们必须相同吗?

1 个答案:

答案 0 :(得分: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;该符号仍然是Symbol("a"),并且将永远存在,因为SymPy表达式是不可变的。代替a = 5的人应该做b.subs(a, 5)来进行替换。

  

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

它们根本没有连接。使用Python变量a指向名为“ a”的符号很方便,这是人们这样做的唯一原因。不幸的是,这种模式然后误导了他们,以为如果他们将a =新的东西放到Symbol("a")上,将不会起作用。唯一的影响是Python变量现在指向其他对象。包含Symbol("a")的表达式不受影响。