伪谱法求解PDE
偽譜法基本原理
偽譜法適用條件:如果你想在一個簡單的領域上高精度地解決一個ODE或PDE,且如果定義問題的數據是平滑的,那么偽譜法通常是最好的工具,偽譜法通常可以達到10位數的精度,其中有限差分或有限元方法將得到2到3位數。在較低的精度下,偽譜法比其他方法需要更少的計算機內存。
在偽譜法中,偏微分方程的解是由一組正交函數{φj(x)}j=0∞\{\varphi_j(x)\}_{j=0}^\infty{φj?(x)}j=0∞?的有限線性組合來近似的:
fN(x)=∑k=0Nf^kφk(x)\begin{equation} f_N(x)=\sum_{k=0}^{N}{\hat{f}_k\varphi_k(x)} \end{equation}fN?(x)=k=0∑N?f^?k?φk?(x)??其中f^k\hat{f}_kf^?k?被稱為fff相對于基函數{φk}\{\varphi_k\}{φk?}的譜系數,f^k\hat{f}_kf^?k?是fff在φk\varphi_kφk?“方向”上的度量,可以通過一個積分來計算
f^k=∫f(x)φk(x)ω(x)dx\begin{equation} \begin{aligned} \hat{f}_k=\int{f(x)\varphi_k(x)\omega(x)}\mathrmozvdkddzhkzdx \end{aligned} \end{equation}f^?k?=∫f(x)φk?(x)ω(x)dx???其中,ω(x)\omega(x)ω(x)是一個與基函數{φk}\{\varphi_k\}{φk?}相關聯的權重函數。
假設,我們考慮的是在[0,2π][0,2\pi][0,2π]內的周期函數,其中一個基函數是由正弦和余弦組成的傅里葉基函數,如{cos?kx,sin?kx}k=0∞\{\cos kx,\sin kx\}^∞_{k=0}{coskx,sinkx}k=0∞?,其簡潔的復數形式為{eikx}k=?∞∞\{e^{ikx}\}^{\infty}_{k=-\infty}{eikx}k=?∞∞?,如果fff滿足一些條件,如連續性和有界可微,可以證明由fN(x)=∑k=0Nf^keikxf_N(x) = \sum_{k=0}^N\hat{f}_ke^{ikx}fN?(x)=∑k=0N?f^?k?eikx其中f^k=∫f(x)eikxdx\hat{f}_k=\int{f(x)e^{ikx}}\mathrmozvdkddzhkzdxf^?k?=∫f(x)eikxdx給出的,fff隨著NNN的增加一致收斂于fff。
fff的導數近似為fN′f^{'}_NfN′?,由下式給出:
fN′(x)=∑k=0Nf^kφk′(x)\begin{equation} \begin{aligned} f^{'}_N(x)=\sum_{k=0}^N{\hat{f}_k\varphi^{'}_k(x)} \end{aligned} \end{equation}fN′?(x)=k=0∑N?f^?k?φk′?(x)???fN′f^{'}_NfN′?被稱為fff的伽遼金譜導數。一旦我們知道了導數φk′\varphi^{'}_kφk′?(一般的遞推公式)的細節,我們就可以計算出公式(3)(3)(3),并找出系數f^k\hat{f}_kf^?k?來導出fN′(x)=∑k=0Nf^k′φk(x)f^{'}_N(x)=\sum_{k=0}^N{\hat{f}^{'}_k\varphi_k(x)}fN′?(x)=∑k=0N?f^?k′?φk?(x)。
例如,設fff是[0,2π][0,2π][0,2π]中的一個偶數周期函數。近似fff的一個合適的基函數是傅里葉基函數。如果我們寫的話:
fN(x)=∑k=0Nf^keikx\begin{equation} \begin{aligned} f_N(x)=\sum_{k=0}^N{\hat{f}_ke^{ikx}} \end{aligned} \end{equation}fN?(x)=k=0∑N?f^?k?eikx???我們很容易看到,fff的一階和二階導數的近似是:
fN′(x)=∑k=0N(ikf^k)eikxfN′′(x)=∑k=0N(?k2f^k)eikx\begin{equation} \begin{aligned} f^{'}_N(x)=\sum_{k=0}^N\left(ik\hat{f}_k\right)e^{ikx}\\ f^{''}_N(x)=\sum_{k=0}^N\left(-k^2\hat{f}_k\right)e^{ikx} \end{aligned} \end{equation}fN′?(x)=k=0∑N?(ikf^?k?)eikxfN′′?(x)=k=0∑N?(?k2f^?k?)eikx???這就是說,一旦我們知道了譜系數f^k\hat{f}_kf^?k?,我們就通過將每個f^k\hat{f}_kf^?k?乘以?k2-k^2?k2得到了f′′f^{''}f′′的近似值。例如使用偽譜法,將譜系數分別乘以ik,(ik)2,(ik)3ik,(ik)^2,(ik)^3ik,(ik)2,(ik)3來求解函數f(x)=sin?(π(x+1))ecos?(π(x+1))f(x)=\sin(\pi(x+1))e^{\cos(\pi(x+1))}f(x)=sin(π(x+1))ecos(π(x+1))的一次、二次與三次導數的結果如下:
偽譜法求解聲波方程
聲波方程為:
?t2u=v2?2u=v2(?x2+?y2)u\begin{equation} \begin{aligned} \partial_t^2u=v^2\nabla^2u=v^2(\partial_x^2+\partial_y^2)u \end{aligned} \end{equation}?t2?u=v2?2u=v2(?x2?+?y2?)u???將上式對空間的偏導數用偽譜法表示可得:
v2(?x2+?y2)u=v2F?1[?(kx2+ky2)F(u)]\begin{equation} \begin{aligned} v^2(\partial_x^2+\partial_y^2)u=v^2F^{-1}\left[-(k_x^2+k_y^2)F(u)\right] \end{aligned} \end{equation}v2(?x2?+?y2?)u=v2F?1[?(kx2?+ky2?)F(u)]???其中FFF為傅氏正變換,F?1F^{-1}F?1為傅氏逆變換。對時間的偏導數項用二階中心差分表示為:
?t2u=un+1?2un+un?1Δt2\begin{equation} \begin{aligned} \partial_t^2u=\dfrac{u^{n+1}-2u^{n}+u^{n-1}}{\Delta t^2} \end{aligned} \end{equation}?t2?u=Δt2un+1?2un+un?1????將(1)和(8)式代入到(6)中去,可得:
?t2u=un+1?2un+un?1Δt2=v2F?1[?(kx2+ky2)F(u)]un=(Δt2v2)F?1[?(kx2+ky2)F(u)]+2un?un?1\begin{equation} \begin{aligned} \partial_t^2u&=\dfrac{u^{n+1}-2u^{n}+u^{n-1}}{\Delta t^2}=v^2F^{-1}\left[-(k_x^2+k_y^2)F(u)\right]\\ u^n&=(\Delta t^2v^2)F^{-1}\left[-(k_x^2+k_y^2)F(u)\right]+2u^n-u^{n-1} \end{aligned} \end{equation}?t2?uun?=Δt2un+1?2un+un?1?=v2F?1[?(kx2?+ky2?)F(u)]=(Δt2v2)F?1[?(kx2?+ky2?)F(u)]+2un?un?1???
傅里葉變換討論
傅里葉變換性質
1.物理空間的離散對應傅里葉空間的有界。
2.物理空間的有界對應傅里葉空間的離散。
對于結論一,我們假定兩個復函數為f(x)=eik1x,g(x)=eik2xf(x)=e^{ik_1x},g(x)=e^{ik_2x}f(x)=eik1?x,g(x)=eik2?x,且其中的k1≠k2k_1\neq k_2k1?=k2?,xxx是定義在離散空間hZh\mathbf{Z}hZ的網格點xj=jh,j∈Zx_j=jh,j\in \mathbf{Z}xj?=jh,j∈Z上的,則:
fj=eik1xjgj=eik2xj\begin{equation} \begin{aligned} f_j=e^{ik_1x_j}\\ g_j=e^{ik_2x_j} \end{aligned} \end{equation}fj?=eik1?xj?gj?=eik2?xj????如果k1?k2k_1-k_2k1??k2?是2πh\dfrac{2\pi}{h}h2π?的倍數,則對于每個jjj有fj=gjf_j=g_jfj?=gj?。由此可見,對于任何復指數eikxe^{ikx}eikx,有無限的其他復指數與它匹配的網格hZh\mathbf{Z}hZ 。因此,在長度為2πh\dfrac{2\pi}{h}h2π?的區間內測量網格的波數就足夠了,由于對稱性的原因,我們選擇區間[?πh,πh][-\dfrac{\pi}{h},\dfrac{\pi}{h}][?hπ?,hπ?]。
對于結論二,可以通過傅里葉正反變換的對稱性來理解,因為在傅里葉變換中,時間和空間是等價的。在傅里葉空間的離散,代入到傅氏反變換中,也是需要計算復指數函數的,同理也會導致物理空間的有界[0,2π][0,2\pi][0,2π]。
假定空間上的網格點數NNN是偶數,則網格點的間距是h=2π/Nh = 2\pi/Nh=2π/N,可得:
πh=N2\begin{equation} \begin{aligned} \dfrac{\pi}{h}=\dfrac{N}{2} \end{aligned} \end{equation}hπ?=2N????現在,傅里葉域是離散的和有界的。這是因為物理空間中的波必須在區間[0,2π][0,2\pi][0,2π]上是周期性的,并且只有具有整數波數的eikxe^{ikx}eikx具有所需的周期2π2\pi2π。
快速傅里葉變換(fft)的性質
這里討論的是MATLAB中使用的fft和ifft。在使用這些程序時必須稍微小心一點,因為MATLAB假設波數的順序與我們的不同。在我們的符號中使用的波數表示為:
f^?N2+1,f^?N2+2?,f^N2\begin{equation} \begin{aligned} \hat{f}_{-\frac{N}{2}+1},\hat{f}_{-\frac{N}{2}+2}\cdots,\hat{f}_{\frac{N}{2}} \end{aligned} \end{equation}f^??2N?+1?,f^??2N?+2??,f^?2N?????因為fft的使用使用了一個復雜的轉換用來匹配該變換滿足對稱特性f^j=f^?j\hat{f}_j=\hat{f}_{-j}f^?j?=f^??j?,這是由大多數傅里葉變換所利用的,它只存儲了大約一半的數組,減少了保持系數所需的內存,并使速度提高了大約兩倍,此時傅里葉空間中的傅里葉系數為:
f^0,f^1,?,f^N2\begin{equation} \begin{aligned} \hat{f}_{0},\hat{f}_{1},\cdots,\hat{f}_{\frac{N}{2}} \end{aligned} \end{equation}f^?0?,f^?1?,?,f^?2N?????
設L=NhL=NhL=Nh表示仿真域的物理長度。然后,真正的波數數組就采用了這種形式
k(i)={2πLi,i=1,?,N22πL(?N+i)i=N2+1,?,N\begin{equation} \begin{aligned} k(i)=\begin{cases} \dfrac{2\pi}{L}i,\qquad &i=1,\cdots,\dfrac{N}{2}\\ \dfrac{2\pi}{L}(-N+i)\qquad &i=\dfrac{N}{2}+1,\cdots,N \end{cases} \end{aligned} \end{equation}k(i)=????L2π?i,L2π?(?N+i)?i=1,?,2N?i=2N?+1,?,N????下圖是16點,間距為1的傅里葉變換系數的分布情況:
f^k\hat{f}_kf^?k?
偽譜法的穩定性
當用偽譜法數值求解時變偏微分方程時,其模式通常是相同的:空間上的譜微分,時間上的有限差分。例如,人們可以通過歐拉格式來執行時間步進。
以變系數波動方程為例:
?tu=c?xu,c=sin?2(x?1)+0.2,u0=e?100(x?1)2\begin{equation} \begin{aligned} \partial_tu=c\partial_xu,\quad c=\sin^2(x-1)+0.2,\qquad u_0=e^{-100(x-1)^2} \end{aligned} \end{equation}?t?u=c?x?u,c=sin2(x?1)+0.2,u0?=e?100(x?1)2???求解它的迭代格式為:
un+1=un?2ΔtcF?1[ikF(u)]\begin{equation} \begin{aligned} u^{n+1}=u^n-2\Delta t cF^{-1}[ikF(u)] \end{aligned} \end{equation}un+1=un?2ΔtcF?1[ikF(u)]???當時間步長為h4=0.0491\frac{h}{4}=0.04914h?=0.0491時,它是穩定的。
但是當Δt>1.9N\Delta t>\frac{1.9}{N}Δt>N1.9?時,它的解就變得不穩定了。這里的不穩定性是由于時間離散引起的,可以通過適當的隱式離散化來規避。
不穩定情況偽譜法的頻散現象
與有限差分法相比,傅里葉方法最顯著的特點之一是數值色散小。設置同樣的參數進行偽譜法與三點、五點有限差分實驗,通過對比波傳播相同時間到達相同位置情況下頻率不同引起的頻散現象來研究各種算法的頻散特性,下面顯示快照允許我們得到兩個重要結論,實驗結果如下:
從圖中可以看出隨著子波主頻的不斷增加,不論是三點還是五點有限差分,它們的頻散現象愈發嚴重,且五點有限差分頻散較三點有所改善。相比之下,偽譜法的頻散現象隨主頻增大不是很嚴重,幾乎不存在頻散。偽譜法理論上不會出現頻散現象,我們在數值實驗中出現頻散是因為時間上作了差分離散導致的頻散,跟穩定性一樣可以使用其他形式的時間離散來進行改進。
從c組圖中可以看出,有限差分解具有明顯的強各向異性色散行為。最準確的方向出現在θ=45°\theta=45\degreeθ=45°,偽譜法解沒有表現出明顯的色散,但最重要的是,它似乎沒有方向依賴性。也就是說,誤差是各向同性的。
關于頻散性的結論,下圖也可以明顯說明:
吉布斯現象
吉布斯現象是由亨利·威爾伯拉罕在1848年發現的,然后由j·威拉德·吉布斯在1899年重新發現。
對于具有不連續的周期信號,如果通過加傅立葉級數來重構信號,則在邊緣附近會出現超調。這些超調以遠離邊緣的阻尼振蕩方式向外衰減。這被稱為GIBBS現象,如下圖所示。
因為,當0<x<π0<x<\pi0<x<π時f(x)=1f(x)=1f(x)=1,當π<x<2π\pi<x<2\piπ<x<2π時f(x)=?1f(x)=?1f(x)=?1(在(0,2π)(0,2\pi)(0,2π)范圍外重復)定義的方波具有傅立葉級數展開:
f(x)=4π∑n=1,3,5,?1nsin?(nx)\begin{equation} f(x)=\dfrac{4}{\pi}\sum_{n=1,3,5,\cdots}{\dfrac{1}{n}\sin(n x)} \end{equation}f(x)=π4?n=1,3,5,?∑?n1?sin(nx)??更一般的,隨著N增加,部分起伏就向不連續點壓縮,但是對任何有限的N值,起伏的峰值大小保持不變,以函數f(x)=xf(x)=xf(x)=x為例,其周期為2π2\pi2π,某個定義區間為[?π,π][-\pi,\pi][?π,π],其圖像為:
且它的傅里葉展開級數的系數為:
bn=(1π)∫?ππxsin?(nx)dx=(?1)n+1(2n)\begin{equation} \begin{aligned} b_n&=(\frac{1}{\pi})\int_{-\pi}^{\pi}{x\sin(nx)}\mathrmozvdkddzhkzdx\\ &=(-1)^{n+1}(\frac{2}{n}) \end{aligned} \end{equation}bn??=(π1?)∫?ππ?xsin(nx)dx=(?1)n+1(n2?)???則它的傅里葉級數近似結果如下:
其誤差表示為:
從圖中可以看出其誤差最大值保持不變,約為跳變值的0.09倍。
當使用偽譜法求導數是使用的不是函數一整個周期時,求導結果也會出現吉布斯現象,例如在區間[0,2π][0,2\pi][0,2π]上求取cos?(x)\cos(x)cos(x)的導數(它的一個完整周期應該是[0,2π)[0,2\pi)[0,2π),不包含2π2\pi2π)時會出現吉布斯現象。
總結
- 上一篇: On-Screen Keyboard(屏
- 下一篇: 我的世界 java错误_我的世界erro