2017-10-16 47 views
-5

我有一个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' 
+2

请发表完整的错误。 – Craig

+0

我的错误来自这样一个事实,即当我试图绘制PDF时,我没有定义我的变量,但我不确定PDF的支持是什么。 – bazinga

+2

如果你没有显示错误和导致错误的代码,那么没有人能够帮助你。 – Craig

回答

0

内置range功能不支持乘法运算。相反,您希望使用numpyarray,您可以使用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