如何在符号中把真实符号变为复杂符号



在下面的代码中,我定义了真正的Symbols来接受sympy中的极限,然后使用subs来获得数字结果。

#To take the limit with unknown values, I have to define real symbols
from sympy import *
x = symbols("x")
H = symbols("H")
p = symbols("p")
#-----
# Position_1
#-----
dict = {H: 5,p:3,x:1}
###  Some operations
H = Symbol("H", real = True, positive = True )
p = Symbol("p", real = True, positive = True )
h = (H*p + (1 - p)**H - 1)/(H*p) 
dh = limit(h,p,1,'+')
#
g = H*x**2 + h
poly = Poly(g,x)
print("poly",poly)
#-----
# Position_2
#-----
dict = {H: 5,p:3,x:1}
Numeric_result = poly.subs(dict)
print("Numeric_result = " ,Numeric_result )

输出为:

Numeric_result = H*x**2 + 1 + (1 - p)**H/(H*p) - 1/(H*p)

虽然它应该取代H和p,x

Numeric_result = 3.8

我认为问题是sympy在全局上定义了符号,因此不能替代它们。

我尝试了以下解决方案,但没有成功。

改变假设以移除实符号并计算g[Sympy_假设][1]:https://docs.sympy.org/latest/modules/assumptions/assume.html

并且在计算g 之前

H = Symbol("H", real = False, complex= True)

执行subs时,使键成为要替换的符号。如果你的符号是没有假设的"香草"类型,这并不重要,但在你的情况下,你有假设。这适用于您的示例:

>>> dict = {H: 5, p:3, x:1}
>>> poly.subs(dict)
19/5

最新更新