Fourier neural operator (FNO) 解读
FNO,是继PINN后一种用“算子学习”的方式求解PDE的方法,全名为傅里叶神经算子(Fourier Neural Operator)。论文地址:https://arxiv.org/pdf/2010.08895代码参考地址:https://github.com/lu-group/deeponet-fno/tree/main?tab=readme-ov-file 上图为FNO的网络结构,我们从最简单的一维瞬态的 Burger’s Equation 开始上手,控制方程如下:$$\frac{\partial u}{\partial t}+u\frac{\partial u}{\partial x}=\nu\frac{\partial^2u}{\partial x^2},\quad...
4.使用Scipy库中的fft
在实际使用中,我们自己编写的fft函数肯定不如专门优化过的库,这里我们使用scipy。 123import numpy as npimport matplotlib.pyplot as pltfrom scipy import fft 做一下数据准备: 1234567891011121314151617181920212223rate = 100 # rate 是采样率(每秒采样点数,单位:Hz)interval = 1 / ratet_start = 0t_end = 1t = np.arange(t_start, t_end, interval) # (0, 1, 1/100) 时间采样def getSineSignal(amps, freqs, t): # 接受振幅和频率数组并生成组合信号的函数 x = np.zeros_like(t) for a, f in zip(amps, freqs): x += a * np.sin(2 * np.pi * f * t) return xamps = np.array([9, 10,...
3.在Python中实现快速傅里叶变换(FFT)
加快傅里叶变换的解决方案称为Cooley-Tukey算法,该算法依赖于2个关键改进。 Improvement 1 — The Divide-and-Conquer MethodDFT方程是:$$X[k]=\sum_{n=0}^{N-1}x[n]e^{-i2\pi\frac{k}{N}n}$$其中$k$的范围从$0$到$N-1$ 让我们将其分为2个半部分,偶数索引$n=2m$以及奇数索引$n=2m+1$$$X_k = \sum_{m=0}^{N/2 - 1} x_{2m} e^{-\frac{2\pi i}{N} (2m) k} + \sum_{m=0}^{N/2 - 1} x_{2m + 1} e^{-\frac{2\pi i}{N} (2m + 1) k}=E_k+e^{-\frac{2\pi...
2.实现Python中的离散傅里叶逆变换
在上一篇文章中,我们在Python中实施了离散的傅里叶变换(DFT)。 在本文中,让我们看一下逆过程:将频率值向量转换为时间值的向量。 从数学上讲,反离散的傅里叶变换(IDFT)由以下方式给出: $$x[n]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]\cdot e^{i2\pi\frac{k}{N}n}$$其中: $N$是采样数量 $n$是当前样本的序号 $k$是当前频率 $X[k]$是$n$处的DFT $x[n]$是$n$处的iDFT 由于离散傅里叶变换的矩阵是方形且可逆的,因此反向变换是可行的。理想情况下,我们应该能够收回我们的原始嘈杂信号。 前期准备: 123456789101112131415161718192021222324252627282930313233343536373839404142import numpy as npimport matplotlib.pyplot as pltrate = 100 # rate 是采样率(每秒采样点数,单位:Hz)interval = 1 / ratet_start =...








