我有一个python脚本,它可以找到一个函数的导数,其中有一个gamma函数。当代入值时,sympy只返回polygamma (0, 1.05)
或任何输出,而不是找到值的digamma并将其作为一个浮点数返回。下面是我的代码:
import mpmath
import time
import sympy
x = sympy.symbols ('x')
s = sympy.symbols ('s')
from sympy import S, I, pi, gamma, lambdify
Original = ((((sympy.pi**(x/2))*(s**x))/sympy.gamma((x/2)+1))-(((2*s)/(x**0.5))**x))
Prime = Original.diff (x)
Prime = lambdify ((x, s), Prime, modules = 'sympy')
for s_times_10 in range (1, 31):
s = float (int (s_times_10) / 10)
for x_times_10 in range (1, 151):
x = float ((int (x_times_10) / 10))
print ("x: " + str (x) + ", s: " + str (s))
print (Prime (x, s))
if (x > 0.3):
if (Prime (x + 0.1, s) < Prime (x, s)):
print ("MAXIMUM N LOCATED: " + str (x))
time.sleep (1)
break
print ("=======")
time.sleep (0.5)
下面是for循环中x的前5个值的输出:
x: 0.1, s: 0.1
-0.579691734344519 - 0.432005861274674*polygamma(0, 1.05)
=======
x: 0.2, s: 0.1
-0.175935858863424 - 0.371829906705536*polygamma(0, 1.1)
=======
x: 0.3, s: 0.1
0.0107518316667914 - 0.31889065255819*polygamma(0, 1.15)
=======
x: 0.4, s: 0.1
0.098684205215577 - 0.27256963654143*polygamma(0, 1.2)
=======
x: 0.5, s: 0.1
0.133891927091406 - 0.232239660951436*polygamma(0, 1.25)
MAXIMUM N LOCATED: 0.5
正如你所看到的,它不是给我一个简单的浮点数答案,而是返回一个未解的polygamma函数,我如何摆脱这个问题,并最终得到一个浮点数作为最终答案呢?
TLDR:将值替换为差分Gamma函数,并且返回未求解的polygamma函数,而不是返回浮点数。
1条答案
按热度按时间sr4lhrrt1#
通常,将浮点值替换为符号SymPy函数将导致自动浮点计算:
在您的情况下,表达式既有整数又有浮点数,因此不会自动以浮点计算:
实际上,如果你想要浮点计算,你应该明确地要求它,而不是依赖于它隐式地发生: