2017-10-16 3 views
-5

J'ai un pdf défini comme P (r, t). J'essaie de définir le pdf en python, mais je suis nouveau au programme et je ne suis pas sûr si je l'ai correctement défini. Voici le pdf que j'essaie de définir. 1Fonction définie correctement?

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)) 

Je suis en train de tracer le pdf, mais je continue à obtenir une erreur, donc je veux confirmer ce que j'ai ci-dessus est correct avant d'essayer de passer. Toute aide serait appréciée! J'utilise aussi G pour la fonction gamma et gamma pour désigner la variable gamma.

Lorsque l'erreur provient de: I créé un échantillon 100x1000 et je laisse gamma = 2 et d = 1 pour plus de simplicité

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

Veuillez publier l'erreur complète. – Craig

+0

Mon erreur vient du fait que je n'ai pas défini mes variables quand j'essaye de tracer mon pdf, mais je ne suis pas sûr de ce que le support du pdf est. – bazinga

+2

Si vous ne montrez pas l'erreur et le code qui provoque l'erreur, alors personne ne pourra vous aider. – Craig

Répondre

0

Le haut-range fonction ne supporte pas l'opération de multiplication. Au lieu de cela, vous souhaitez utiliser un numpyarray, que vous pouvez créer dans ce cas en utilisant la fonction 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

J'avais utilisé le code pour un complot similaire et je n'avais donc pas réalisé que c'était mon erreur. Je vous remercie! – bazinga