一个公式中有三个参数(x.y.t),在matlab中如何进行离散傅里叶逆变换,用idft法,公式在下图
可参考:
% 生成一个3D数据,大小为3x3x3
data = rand(3,3,3);
% 对第三个维度进行离散傅里叶变换
data_fft = fft(data,[],3);
% 对第三个维度进行离散傅里叶逆变换
data_ifft = ifft(data_fft,[],3);
生成一个3D数据data,大小为3x3x3。然后使用fft函数对第三个维度进行离散傅里叶变换,得到data_fft。最后使用ifft函数对data_fft进行离散傅里叶逆变换,得到data_ifft。其中,第二个参数[]表示对所有维度进行变换,第三个参数3表示对第三个维度进行变换。
试试下面的代码:
e=0.5; b=9.5; A =9.5; f8 =10; M = 500;
lambda = Ev/(1+v)/(1-v);
mu = E/2/(1+v);
r1 = sqrt(xi^2+eta^2-rhos2/(lambda+2mu));
r2 = sqrt(xi^2+eta^2-rhos^2/mu);
f=rhos2(lambda +mu) / (lambda + 2mu)/ mu /(rhos2/mu-mhos2/(lambdat2mu));
f1 = sqrt(xi'^2+eta'^2-rhos^2/(lambda+2mu))sqrt(xi^2+eta^2-mhos'^2/mu)/(lambda+mu)/mu/(rhos2/mu-rhos''2/(l+ta+lambda+mu));
f2 = 2(xi^2+mu^2)-rhos^2/mu;
f3=exp(-sqrt(xi^2+eta^2-rhos^2/(lambda+2mu))z);
f4 = 1ixi21ixir1r2/rhos^2/(lambda+2mu);
f5 = 1imu21imur1r2/rhos^2/(lambda+2mu);
f6 =exp(-r2z);
N = 8M; L = 2pi;
dx = L/N; x = (-L/2:dx:L/2-dx);
dy = L/N; y = (-L/2:dy:L/2-dy);
dt = T/M; t = (0:dt:T-dt);
F = rhos2(lambda+mu) / (lambda+2mu) * exp(-r2z) . (sqrt(xi.^2+eta.^2-rhos2/(lambda+2mu)).exp(sqrt(xi.^2+eta.^2-rhos^2/mu)z) - sqrt((xi-e).^2+eta.^2-rhos^2/(lambda+2mu)).exp(sqrt((xi-e).^2+eta.^2-rhos^2/mu)*z));
f_hat = ifft(F, N);
uz3 = real(ifft(f_hat));
qd=Fd/4/a/b(t/T+1)*heaviside(a-abs(x-ct))*heaviside(b-abs(y));
uz = qd*uz3;
plot(x,uz3)
在 Matlab 中进行三个参数的离散傅里叶逆变换(IDFT)可以使用 ifftn
函数。
ifftn
函数的语法如下:
X = ifftn(Y)
X = ifftn(Y,n)
X = ifftn(Y,[n1,n2,...,nk])
其中,Y
是傅里叶变换后的数据,类型为复数数组。n
或 [n1,n2,...,nk]
是指定反变换的数组大小(可选)。X
是反变换后的数据。