通过 FFT 计算空间相关平流算子的傅里叶表示

计算科学 pde 傅立叶分析 椭圆pde fftw
2021-11-25 18:52:17

在圆上考虑以下等式:

p(x,t)t=a(x)p(x,t)xL(p),

在哪里L是操作员p(x,t).

现在,我想创建这个运算符的矩阵L在 Matlab 中使用 FFT/IFFT。请注意,由于我们的域是圆,x[0,2π]

进行傅里叶变换,我们得到 L^(p)=[a(x)p(x,t)x]=[a(x)(Dxp^)V], 在哪里V是 FFT 和 IFFT 运算,并且Dx是个x-傅立叶中的导数矩阵(通过乘以k傅立叶系数由ik)。

我的问题是:从表达式中,我能够使用 ODE 求解器(例如 ODE45)求解 PDE。但是,我有兴趣提取运算符L用于其他目的。因此,我正在尝试提取矩阵L^在以下等式中

p^(x,t)t=L^p^

有任何想法吗 ?

1个回答

FFT 算法计算离散傅里叶变换(DFT),它变换x1:nx^1:n经过

x^k=j=1nxje2πi(j1)(k1)/n.
DFT 是一个线性变换,从它的公式可以清楚地看出,这意味着它计算乘以一个矩阵F
x^=Fx,F=(e2πi(j1)(k1)/n)k,j.
然后IFFT实现乘法F1.

所以当你在计算(a(x)(Dxp^)), 你在计算

L^p^=FAF1Dxp^,
在哪里Dx乘以ik(对角矩阵),和A乘以a(x)(对角矩阵)。这里唯一要做的就是构建F显式地,并显式地形成矩阵乘积。规范化约定等有时可能会有所不同,所以F必须与 FFT 实际计算的结果一致。

另请注意FAF1这就像矩阵的基数变化公式的应用A从空间基础到频率基础。