Как изменить реальный символ на сложный в симпти - PullRequest
0 голосов
/ 02 апреля 2020

В приведенном ниже коде я определяю реальные символы, чтобы взять предел в sympy, а затем использую sub для получения результата цифр c.

#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

, а также прямо перед вычислением г

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

1 Ответ

0 голосов
/ 02 апреля 2020

При выполнении subs делайте ключи символами, которые вы пытаетесь заменить. Не имеет значения, являются ли ваши символы «ванильным» без каких-либо предположений, но в вашем случае у вас есть предположения. Это работает на вашем примере:

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