我有兴趣在 Matlab 中获取 3 维数组的一些偏导数 - 比如说近似于。我需要近似诸如、等的东西。我已经为其中一些导数建立了有限差分矩阵,但最终这将是缓慢且不准确的(我'最终希望对甚至数组进行操作)。
有没有人对使用 FFT 计算这些部分有很好的建议?我尝试了以下幼稚的事情,但它似乎不起作用:
N=128;
L=2*pi;
x=L/N*(-N/2:N/2-1);y=x;z=x;
[X,Y,Z]=meshgrid(x,y,z);
f=sin(X).*sin(Y).*sin(Z); % A 2-pi periodic function to test
fp_exact=cos(X).*sin(Y).*sin(Z); % Its exact x-partial
ik=1i*(2*pi/L)*[0:nx/2-1 0 -nx/2+1:-1]; % The spectral differentiation vector
fhat=fftn(Z); % Compute the 3-D FFT
C=mat2cell(fhat,nx,ones(1,nx),ones(1,nx)); % So I can act on each column
result=cellfun(@(x) x.*ik',C,'UniformOutput',false); % Multiply each column of Z by ik
fprimehat=cell2mat(result); % Convert back to 3D array
fprime=ifftn(fprimehat); % IFFT
上面的代码似乎没有希望了——我想我错过了一些重要的东西,而且还没有真正考虑到这一点。使用上面的 ik 定义,我可以计算一维光谱导数
fprime=ifft(ik.*fft(f));
提前感谢您的任何提示。