基于傅里叶空间核的二维卷积快速计算:Matlab实现问题咨询
问题:基于FFT的卷积积分计算问题
需要数值计算如下积分:
当函数$f$以离散网格形式给出时,计划通过傅里叶空间乘法结合FFT高效计算该积分,对应傅里叶域关系如下:
其中$\xi$和$\eta$为傅里叶变量。
遇到的问题
- 用Matlab实现后,结果与解析解不匹配,且增大网格点数$N$后精度未提升
- 无法理解代码中
chess矩阵的作用
Matlab最小工作示例
N = 101; x = linspace(-1, 1, N); hx = x(2)-x(1); [X, Y] = meshgrid(x, x); a = 1/2; f = 2/pi*a*real(sqrt(1-(X.^2+Y.^2)/a^2)); f_pad = zeros(2*N, 2*N); f_pad(1:N, 1:N) = f; k = linspace(0, pi/hx, N+1); k = [k k(end-1:-1:2)]; hk = k(3)-k(2); [KX, KY] = meshgrid(k, k); K = sqrt(KX.^2 + KY.^2); chess = mod((1:2*N)+(1:2*N)',2); chess = -chess; chess(chess==0) = 1; G = 1./K; G(1,1) = 4*integral2(@(x,y) 1./(sqrt(x.^2+y.^2)),0,0.5*hk,0,0.5*hk)/hk^2; R = ifft2(G.*2.*chess.*fft2(f_pad), 'symmetric'); R = R(N+1:end, N+1:end); Rana = (a^2-x.^2/2) .* (abs(x)<=a) + ... real(a^2/pi*((2-x.^2/a^2).*asin(a./abs(x))+sqrt(x.^2-a^2)/a)) .* (abs(x)>a); plot(Rana); hold on; plot(R((N-1)/2+1,:));
补充说明
- $R$:积分结果
- $f$:输入函数
- $G$:傅里叶域中的核,$(0,0)$处奇点通过邻域均值处理
- $Rana$:积分的解析解
内容的提问来源于stack exchange,提问作者Peter Uwson
相关产品推荐
相关产品推荐

