函数定义正确吗?
问题描述:
我有一个pdf定义为P(r,t)。我想在python中定义pdf,但是对于程序来说是新的,我不确定是否正确定义了它。这是我想要定义的pdf。 1函数定义正确吗?
from scipy.special import gamma as G
def A(gamma, d):
return np.power(G((d + 2)/gamma)/(G(d/gamma)), (gamma/2))
def B(gamma, d):
return np.log(gamma * np.power(G((d + 2)/gamma), (d/2))/np.power(G(1/gamma), ((d + 2)/2)))
def dispersion(gamma, d, t, D):
return np.power((D * t), (2/gamma)) * g(gamma, d)
def pdf(gamma, d, r, t, D):
return (1/np.power(dispersion(gamma, d, t, D), (d/2))) * np.exp((-A(gamma, d) * np.power((r/np.sqrt(g(gamma, d))), gamma)) + B(gamma, d))
我试图绘制PDF格式,但我不断收到一个错误,所以我想确认我有什么上面是正确的之前,我尝试继续前进。任何帮助,将不胜感激!另外,我使用G来表示伽马函数,而伽马来表示伽玛变量。
其中误差是来自:我创建了一个示例100x1000我让伽玛= 2并且d = 1为了简单起见
def pdf(gamma, d, r, t, D):
return (1/np.power(dispersion(gamma, d, t, D), (d/2))) * np.exp((-A(gamma, d) * np.power((r/np.sqrt(g(gamma, d))), gamma)) + B(gamma, d))
r = range(100)
t = range(1000)
gamma = 2
d = 1
D = 2
p = pdf(gamma, d, r, t, D)
plt.plot(r, p)
plt.show()
TypeError: unsupported operand type(s) for *: 'int' and 'range'
答
内置range
功能不支持乘法运算。相反,您希望使用numpy
array
,您可以使用arange()
函数在此情况下创建它。
import numpy as np
import matplotlib.pyplot as plt
def pdf(gamma, d, r, t, D):
return (1/np.power(dispersion(gamma, d, t, D), (d/2))) * np.exp((-A(gamma, d) * np.power((r/np.sqrt(g(gamma, d))), gamma)) + B(gamma, d))
r = np.arange(100)
t = np.arange(1000)
gamma = 2
d = 1
D = 2
p = pdf(gamma, d, r, t, D)
plt.plot(r, p)
plt.show()
+0
我曾经使用过类似情节的代码,所以我没有意识到这是我的错误。谢谢! – bazinga
请发表完整的错误。 – Craig
我的错误来自这样一个事实,即当我试图绘制PDF时,我没有定义我的变量,但我不确定PDF的支持是什么。 – bazinga
如果你没有显示错误和导致错误的代码,那么没有人能够帮助你。 – Craig