Функция определена правильно?
У меня есть PDF, определенный как P(r, t). Я пытаюсь определить PDF в Python, но я новичок в программе и не уверен, правильно ли я его определил. Вот 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'
1 ответ
Встроенный 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()