Sympy 替代不适用于真实变量
Sympy substitute does not work with real variables
在 Sympy 中,当符号为实数 (real=True
) 时,不会使用 subs()
替换它。
即使 real
是 false
,它也不起作用。
每当在 symbols()
调用中指定 real
时,替换 subs()
不起作用。
否则,它有效:
import sympy
X = sympy.symbols("X")
print('i', X.subs( {'X': 1.01} )) # works
X = sympy.symbols("X", real=True) # `real=` Seems to be the cause of the problem
print('ii', X.subs( {'X': 2.02} ))
X = sympy.symbols("X", real=False) # even this
print('iii', X.subs( {'X': 3.03} ))
输出:
i 1.01000000000000
ii X
iii X
出于某种原因,我需要指定假设 real=True
。
我的 sympy.__version__
是:1.10.1
这种行为是意料之中的:当您调用 .subs({'X': 3.03})
时,'X'
将被“简化”,即,它将被转换为通用的新符号(没有假设)。
你的情况:
X = sympy.symbols("X", real=False) # even this
print('iii', X.subs( {'X': 3.03} ))
# iii X
那是因为X
是一个有假设的符号,而'X'
将被转换为一个没有假设的符号:它们是不同的符号,即使它们共享名称!
为了更好地理解它,您可以这样做:
x1 = sympy.symbols("x")
x2 = sympy.symbols("x", real=True)
print(x1.equals(x2))
# out: False
print(x1 == x2)
# out: False
当您致电 subs
时,您应该尽可能具体:
X = sympy.symbols("X", real=False) # even this
print('iii', X.subs( {X: 3.03} ))
# out: iii 3.03000000000000
请记住,subs
旨在处理由一个或多个符号组成的较大表达式。
在 Sympy 中,当符号为实数 (real=True
) 时,不会使用 subs()
替换它。
即使 real
是 false
,它也不起作用。
每当在 symbols()
调用中指定 real
时,替换 subs()
不起作用。
否则,它有效:
import sympy
X = sympy.symbols("X")
print('i', X.subs( {'X': 1.01} )) # works
X = sympy.symbols("X", real=True) # `real=` Seems to be the cause of the problem
print('ii', X.subs( {'X': 2.02} ))
X = sympy.symbols("X", real=False) # even this
print('iii', X.subs( {'X': 3.03} ))
输出:
i 1.01000000000000
ii X
iii X
出于某种原因,我需要指定假设 real=True
。
我的 sympy.__version__
是:1.10.1
这种行为是意料之中的:当您调用 .subs({'X': 3.03})
时,'X'
将被“简化”,即,它将被转换为通用的新符号(没有假设)。
你的情况:
X = sympy.symbols("X", real=False) # even this
print('iii', X.subs( {'X': 3.03} ))
# iii X
那是因为X
是一个有假设的符号,而'X'
将被转换为一个没有假设的符号:它们是不同的符号,即使它们共享名称!
为了更好地理解它,您可以这样做:
x1 = sympy.symbols("x")
x2 = sympy.symbols("x", real=True)
print(x1.equals(x2))
# out: False
print(x1 == x2)
# out: False
当您致电 subs
时,您应该尽可能具体:
X = sympy.symbols("X", real=False) # even this
print('iii', X.subs( {X: 3.03} ))
# out: iii 3.03000000000000
请记住,subs
旨在处理由一个或多个符号组成的较大表达式。