【问题标题】:How to change real symbol to complex in sympy如何在sympy中将真实符号更改为复杂
【发布时间】:2020-07-14 19:58:32
【问题描述】:

在下面的代码中,我定义了真正的符号以在 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)

【问题讨论】:

  • 在这个问题中,Symbols没有问题(我在第一次回复后发现)所以我不得不将字典移动到位置2。然后subs工作。

标签: python sympy symbols


【解决方案1】:

在执行subs 时,将键设置为您要替换的符号。如果您的符号是没有假设的“香草”类型,则无关紧要,但在您的情况下,您有假设。这适用于您的示例:

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

【讨论】:

  • 谢谢@smichr!问题确实出在潜艇上。我必须在 Numeric_result 之前而不是在代码开头更改字典位置。
猜你喜欢
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2014-04-06
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
相关资源
最近更新 更多