【问题标题】:Why does replacing a variable in a expression by variable with same name but different symbol name not work为什么用具有相同名称但不同符号名称的变量替换表达式中的变量不起作用
【发布时间】:2018-09-17 11:37:13
【问题描述】:

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

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 正常工作吗?

【问题讨论】:

  • 好点。知道如何替换初始的 a 吗?
  • 再说一次,我不知道 sympy,但我想你应该将 g.subs(a,a) 的结果分配给另一个变量。
  • 或使用g.subs(sy.symbols('a'), alpha)
  • 这适用于交换的订单,g=g.subs(a, sy.symbols("alpha") )。感谢您的输入。

标签: python sympy substitution


【解决方案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= 和 symbols("a") 中的字符串如何连接感兴趣。

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

【讨论】:

  • 在你做了g.subs(a, sy.symbols('alpha'))之后,你将如何在g中替换alpha
    没有引用变量alpha,所以不能调用g.subs(alpha, sy.symbols('something_else'))
  • 您可以将符号“alpha”称为Symbol("alpha")
猜你喜欢
  • 2014-07-24
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
相关资源
最近更新 更多