2014-02-15 2 views
0

В следующей программе я хотел бы вычислить быстрое преобразование Фурье заданного поля, заданное U. Какая разница между возвращаемыми значениями для fft и для fft2? Любая помощь будет оценена! Спасибо.В чем разница между возвратом fft/fft2, применяемым к матрице?

import numpy as np 
from numpy import sin, cos, pi 

nx=3 
ny=3 

px=2*pi 
py=2*pi 

qx=1.0*px/(nx-1) 
qy=1.0*py/(ny-1) 

x = np.linspace(0,px,nx) 
y = np.linspace(0,py,ny) 

X,Y = np.meshgrid(x,y) 

U=cos(X)*sin(Y) 

#compite fft's 
Uh1=np.fft.fft(U) 

Uh2=np.fft.fft2(U) 

print('For fft') 
print(Uh1) 

print('For fft2') 
print(Uh2) 

#What is the difference between Uh1 and Uh2? Thank you! 

Вот что я получаю:

For fft 
[[ 0.00000000e+00 +0.00000000e+00j 0.00000000e+00 +0.00000000e+00j 
0.00000000e+00 +0.00000000e+00j] 
[ 1.22464680e-16 +0.00000000e+00j 1.22464680e-16 +2.12115048e-16j 
1.22464680e-16 -2.12115048e-16j] 
[ -2.44929360e-16 +0.00000000e+00j -2.44929360e-16 -4.24230095e-16j 
-2.44929360e-16 +4.24230095e-16j]] 
For fft2 
[[ -1.22464680e-16 +0.00000000e+00j -1.22464680e-16 -2.12115048e-16j 
-1.22464680e-16 +2.12115048e-16j] 
[ 6.12323400e-17 -3.18172572e-16j 6.12323400e-16 -2.12115048e-16j 
-4.89858720e-16 -4.24230095e-16j] 
[ 6.12323400e-17 +3.18172572e-16j -4.89858720e-16 +4.24230095e-16j 
6.12323400e-16 +2.12115048e-16j]] 

Спасибо!

+1

Вы смотрели на значения, возвращаемые из каждого? Документация 'numpy'? – jonrsharpe

+0

@jonrsharpe да. Я просмотрел документацию, но я хотел бы знать, в чем разница в возвращаемых результатах для этих двух функций. –

+0

@jonrsharpe Пожалуйста, я только что добавил некоторые сведения о вопросе! Спасибо –

ответ

1

docstring модуля np.fft.

Standard FFTs 
------------- 

.. autosummary:: 
    :toctree: generated/ 

    fft  Discrete Fourier transform. 
    ifft  Inverse discrete Fourier transform. 
    fft2  Discrete Fourier transform in two dimensions. 
    ifft2  Inverse discrete Fourier transform in two dimensions. 
    fftn  Discrete Fourier transform in N-dimensions. 
    ifftn  Inverse discrete Fourier transform in N dimensions. 

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

enter image description here

enter image description here

plt.figure() 

plt.subplot(2,2,1) 
plt.plot(Uh1.real.ravel()) 
plt.title("1 - real") 
plt.subplot(2,2,2) 
plt.plot(Uh2.real.ravel()) 
plt.title("2 - real") 

plt.subplot(2,2,3) 
plt.plot(Uh1.imag.ravel()) 
plt.title("1 - imaginary") 
plt.subplot(2,2,4) 
plt.plot(Uh2.imag.ravel()) 
plt.title("2 - imaginary") 

plt.figure() 

plt.subplot(2,2,1) 
plt.hist(Uh1.real.ravel()) 
plt.title("1 - real") 
plt.subplot(2,2,2) 
plt.hist(Uh2.real.ravel()) 
plt.title("2 - real") 

plt.subplot(2,2,3) 
plt.hist(Uh1.imag.ravel()) 
plt.title("1 - imaginary") 
plt.subplot(2,2,4) 
plt.hist(Uh2.imag.ravel()) 
plt.title("2 - imaginary") 
+0

Спасибо за это! На самом деле, я не могу ни сейчас, какой должен использоваться, чтобы вычислить DFT моего поля U. Я даже могу понять, почему существуют огромные значения - границы домена для fft2! Спасибо вам за ваше время и усилия! –

+0

@ Strömungsmechanik также добавил гистограммы двух матриц, если это помогает любому. – M4rtini

+0

Супер! Замечательно! Спасибо :) –

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