2015-10-04 4 views
1

У меня возникла очень сложная проблема с использованием функции обратного быстрого преобразования Фурье numpy. Я знаю, что функция fft хорошо работает, основываясь на моих других результатах. Ошибка, кажется, появляется после вызова ifft. Следующие должны быть печать нули, например:Ошибка Numpy ifft

temp = Eta[50:55] 
print(temp) 
print(temp-np.fft.fft(np.fft.ifft(temp))) 

Выход:

[ -4.70429130e+13 -3.15161484e+12j -2.45515846e+13 +5.43230842e+12j -2.96326088e+13 -4.55029496e+12j 2.99158889e+13 -3.00718375e+13j -3.87978563e+13 +9.98287428e+12j] 

[ 0.00781250+0.00390625j -0.02734375+0.01757812j 0.05078125-0.02441406j 0.01171875-0.01171875j -0.01562500+0.015625j ] 

Пожалуйста, помогите!

+0

, кажется, из-за к числовым ошибкам. Если вы делаете свой ввод меньше на некоторые порядки величин, вы приближаетесь к 0. – cel

ответ

1

Вы видите нормальную неточность с плавающей запятой. Вот что я получаю с вашими данными:

In [58]: temp = np.array([ -4.70429130e+13 -3.15161484e+12j, -2.45515846e+13 +5.43230842e+12j, -2.96326088e+13 -4.55029496e+12j, 2.99158889e+13 -3.00718375e+13j, -3.87978563e+13 +9.98287428e+12j]) 

In [59]: delta = temp - np.fft.fft(np.fft.ifft(temp)) 

In [60]: delta 
Out[60]: 
array([ 0.0000000+0.00390625j, -0.0312500+0.01953125j, 
     0.0390625-0.02539062j, 0.0078125-0.015625j , -0.0156250+0.015625j ]) 

По отношению к входу, эти значения, на самом деле, «маленький», и разумно для 64 бит с плавающей точкой расчетов:

In [61]: np.abs(delta)/np.abs(temp) 
Out[61]: 
array([ 8.28501685e-17, 1.46553699e-15, 1.55401584e-15, 
     4.11837758e-16, 5.51577805e-16]) 

 Смежные вопросы

  • Нет связанных вопросов^_^