首页 > 解决方案 > 为什么用具有相同名称但不同符号名称的变量替换表达式中的变量不起作用

问题描述

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

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”)中的字符串如何连接感兴趣。它们必须相同才能使 sympy 正常工作吗?

标签: pythonsympysubstitution

解决方案


g = g.subs(a, a)永远不能做任何事情,因为它正在用自己代替事物。

a用别的东西代替

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

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

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")不受影响。


推荐阅读