Как работать с функциями с делением на ноль

Я пытаюсь использовать некоторые модели, используя python/numpy формы:

 f(x) = 1 / (exp(x) - 1)

где x может быть любым значением, скажем, от -5 до +5.

x может быть равен нулю, и во время моих симуляций это действительно происходит, заставляя f(x) стремиться к бесконечности, что возвращает nan + 1jnan.

Поскольку я хочу использовать результаты этого расчета позже, например. для FFT это создает серьезную проблему, поскольку процедура fft не может обрабатывать NAN на входе.

Есть ли какие-либо рекомендуемые способы борьбы с этим, пожалуйста? например помещая логику, чтобы сказать: если x == 0: вернуть 0 или, например. сдвиг x на 0,00000001%, если он равен нулю, чтобы избежать этой проблемы.

Спасибо


person IanRoberts    schedule 28.11.2014    source источник
comment
Может быть, это полезно? github.com/kvesteri/infinity   -  person adarsh    schedule 28.11.2014
comment
np.nan_to_num полезен, спасибо, но я бы хотел установить для inf значение 0, а не какое-то произвольное большое число. Хотя я могу сделать это вручную.   -  person IanRoberts    schedule 28.11.2014


Ответы (1)


Вы можете просто избежать этой проблемы, используя оператор continue:

def f(x):
    return 1 / (exp(x) - 1)

f_values = {}
for i in range(-5,5):
    if i == 0: continue
    f_values[i] = f(i)

print f_values
>>> {1: 0.5819767068693265, 2: 0.15651764274966565, 3: 0.05239569649125595, 4: 0.01865736036377405, -2: -1.1565176427496657, -5: -1.0067836549063043, -4: -1.018657360363774, -3: -1.052395696491256, -1: -1.5819767068693265}


FFT(f_values)

Здесь всякий раз, когда значение x = 0, цикл просто избегает функции f(x) и переходит к следующему значению.

person shley    schedule 28.11.2014