деление на ноль, встречающееся в true_divide + недопустимое значение, встречающееся в true_divide + недопустимое значение, встречающееся в уменьшении - PullRequest
0 голосов
/ 18 января 2019

Вот что я пытался построить полу- закон Планка , основанный на изменениях температуры и расстояния следующим образом.

import numpy as np

k = 1.381*np.power(10,-23, dtype=np.float)
c = 3*np.power(10,8)
h = 6.626*np.power(10,-34, dtype=np.float)  
l = 3*np.power(10,-6, dtype=np.float)

d_lower = 16*np.power(10,4)
d_upper = 2*np.power(10,6)

t_lower = 740
t_upper = 5200

d = np.arange(d_lower,d_upper,100)
t = np.arange(t_lower,t_upper,10)
D,T = np.meshgrid(d, t)
I = (2*h*np.power(c,2))/(np.power(D,2)*np.power(l,5)*(np.exp((h*c)/(l*k*T))-1))  

Интерпретатор возвращает следующую ошибку:

RuntimeWarning: divide by zero encountered in true_divide
  I = (2*h*np.power(c,2))/(np.power(D,2)*np.power(l,5)*(np.exp((h*c)/(l*k*T))-1))

Я не должен был встречаться с делением на ноль, поскольку значения T даны в Кельвинах, поэтому np.exp((h*c)/(l*k*T))-1 не может стать нулем.

Что здесь не так?!

Мои версии на python и numpy - 3.7.0 и 1.15.4 соответственно.

1 Ответ

0 голосов
/ 18 января 2019

Проблема возникает, возможно, из-за того, что это матричное деление, а python плохо с этим справляется.

Попробуйте заменить:

I = (2 * ч * н.п.р. (с, 2)) / (н.п.в. (Д, 2) н.п.в. (1,5) (н.п.п. ((ч с) / (л к * Т)) - 1))

от:

aaa = (2*h*np.power(c,2))
bbb = (np.power(D,2)*np.power(l,5)*(np.exp((h*c)/(l*k*T))-1))  
I = aaa/bbb

У меня сработало

SLP

...