如何在 sympy 中将真实符号更改为复数
How to change real symbol to complex in sympy
在下面的代码中,我在 sympy 中定义了真正的 Symbols 来获取限制,然后使用 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_ assumption] [1]: https://docs.sympy.org/latest/modules/assumptions/assume.html
并且在计算 g
之前
H = Symbol("H", real = False, complex= True)
在执行 subs
时,将键设为您要替换的符号。如果您的 Symbols 是没有假设的 "vanilla" 类型并不重要,但在您的情况下您有假设。这适用于您的示例:
>>> dict = {H: 5, p:3, x:1}
>>> poly.subs(dict)
19/5
在下面的代码中,我在 sympy 中定义了真正的 Symbols 来获取限制,然后使用 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_ assumption] [1]: https://docs.sympy.org/latest/modules/assumptions/assume.html
并且在计算 g
之前H = Symbol("H", real = False, complex= True)
在执行 subs
时,将键设为您要替换的符号。如果您的 Symbols 是没有假设的 "vanilla" 类型并不重要,但在您的情况下您有假设。这适用于您的示例:
>>> dict = {H: 5, p:3, x:1}
>>> poly.subs(dict)
19/5