擬譜法(Pseudo-spectral methods)也稱為離散變數表示(discrete variable representation、DVR)法,是在应用数学及计算科学中求解偏微分方程用的数值分析方法。擬譜法和有密切關係,但在谱方法中基底函數中使用了擬譜的基底函數,也就是可以在分割網格上表示的函數。此作法簡化一些運算子的計算,在使用快速演算法(例如快速傅里叶变换)時可以加速計算速度。
說明
考慮以下的初值問題
:i \frac{\partial}{\partial t} \psi(x, t) = \Bigl[-\frac{\partial^2}{\partial x^2} + V(x) \Bigr] \psi(x,t), \qquad\qquad \psi(t_0) = \psi_0
有週期性條件\psi(x+1, t) = \psi(x, t)。這個例子是勢能為V(x)之粒子的薛定谔方程,不過其結構可適用到其他應用。在許多實務上的偏微分方程中,其中有一項是和導數(例如是動能相關的量)有關,另一項則是和另一個函數(此處為勢能)的乘積。
在譜方法中,其解\psi會展開為一組適合基底函數的組合,例如平面波。
:\psi(x,t) = \frac{1}{\sqrt{2\pi}} \sum_n c_n(t) e^{2\pi i n x} .
將解代入,並且計算係數的方程,可以得到係數的常微分方程
:i\frac{d}{dt} c_n(t) = (2\pi n)^2 c_n + \sum_k V_{n-k} c_k,
而其元素V_{nk}可以透過顯式的傅立葉轉換求得
:V_{n-k} = \int_0^{1} V(x) \ e^{2\pi i (k-n) x} dx .
若將N基底函數的展開到一定項次後截斷,並且找c_n(t)的解,就可以得到偏微分方程的解。一般而言會用數值方法進行,例如龙格-库塔法。為了數值解,常微分方程的右側需重覆計算在許多不同時間間隔下的值。此時,譜方法有個和勢能項V(x)有關的主要問題。
在譜方法下,和勢能函數V(x)的相乘會轉換為向量和矩陣的乘法,其複雜度是N^2,而且在求解係數的微分方程時,需要另外去計算矩陣元素V_{nk},這也需要時間。
在擬譜法中,會用不同的方式來計算。給定係數c_n(t),會用反離散傅立葉轉換來計算函數\psi在離散格點x_j = 2\pi j/N下的值。在格點上,計算函數的乘積 \psi'(x_i, t) = V(x_i) \psi(x_i, t),再用傅立葉轉換轉換回來,可以得到一組新的係數c'_n(t),來代替矩陣乘積運算\sum_k V_{n-k} c_k(t)。
可以證明二個方法有類似的精準度,而且擬譜法可以使用快速傅立葉轉換,其時間複雜度為O(N\ln N),理論上比矩陣乘法要快很多。而且,可以直接計算函數V(x),不用再經過額外的積分運算。
技術討論
若用比較抽象的方式來描述,擬譜法是處理在偏微分方程中二個函數V(x)和f(x)的乘積。為了簡化表示式,省略掉函數中時間的自變數。在概念上,擬譜法包括三個步驟:
將f(x)以及\tilde{f}(x) = V(x)f(x)擴展為由有限多個基底函數形成的組合(此為)。
針對一組給定的基底函數,找到一組分割方式可以將基底函數的純量積轉換為在格點上的加權和。
在每一個格點將V和f相乘,來計算函數的乘積。
基底的展開
函數f和\tilde f可以用一組有限基底的函數來擴展\{\phi_n\}_{n = 0,\ldots,N}:
:f(x) = \sum_{n=0}^N c_n \phi_n(x)
:\tilde f(x) = \sum_{n=0}^N \tilde c_n \phi_n(x)
為了簡化起見,令基底是正交且正規化的,\langle \phi_n, \phi_m \rangle = \delta_{nm},利用內積\langle f, g \rangle = \int_a^b f(x) \overline{g(x)} dx配合適當的邊界a,b,其係數為
:c_n = \langle f, \phi_n \rangle
:\tilde c_n = \langle \tilde f, \phi_n \rangle
配合一些計算可得
:\tilde c_n = \sum_{m=0}^N V_{n-m} c_m
而V_{n-m} = \langle V\phi_m, \phi_n \rangle。這是譜方法的基礎。為了區分\phi_n的基底以及正交的基底,有時會將上述擴展稱為有限基底表示(Finite Basis Representation、FBR)。
分割
針對給定基底\{\phi_n\}以及N+1個基底函數,可以設法找到分割方式,也就是N+1個點以及加權,使得
:\langle \phi_n, \phi_m \rangle = \sum_{i=0}^N w_i \phi_n(x_i) \overline{\phi_m(x_i)} \qquad\qquad n,m = 0,\ldots,N
特別的例子包括多項式的高斯求积以及平面波的离散傅里叶变换,特別需注意的是格點及加權x_i,w_i都是基底及數量N的函數。
利用分割方式,可以透過格點上的值,以另一種方式來表示函數f(x), \tilde f(x)的數值。此表示法有時稱為離散變數表示法(Discrete Variable Representation、DVR),完全等效於基底的展開。
:f(x_i) = \sum_{n=0}^N c_n \phi_n(x_i)
:c_n = \langle f, \phi_n \rangle = \sum_{n=0}^{N} w_i f(x_i) \overline{\phi_n(x_i)}
相乘
和函數V(x)的相乘會在格點上進行
:\tilde f(x_i) = V(x_i) f(x_i).
一般來說這裡會有一些近似,可以計算其中一個係數\tilde c_n:
:\tilde c_n = \langle \tilde f, \phi_n \rangle = \sum_i w_i \tilde f(x_i) \overline{\phi_n(x_i)} = \sum_i w_i V(x_i) f(x_i) \overline{\phi_n(x_i)}
利用譜方法,對應的係數會是\tilde c_n = \langle Vf, \phi_n \rangle。擬譜法則會用以下皂的近似來處理
:\langle Vf, \phi_n \rangle \approx \sum_i w_i V(x_i) f(x_i) \overline{\phi_n(x_i)}.
若乘積可以用Vf給定的有限基底函數組合來表現,則上式在給定分割方式上會完全正確。
特殊的擬譜架構
傅立葉法
若問題中有週期性的邊界條件,其週期為[0,L],基底函數可以用平面波來產生,
:\phi_n(x) = \frac{1}{\sqrt{L}} e^{-\imath k_n x}
其中k_n = (-1)^n \lceil n/2 \rceil 2\pi/L,而\lceil\cdot\rceil是取整函数。
在n_{\text{max}} = N處截斷的分割為離散傅立葉轉換,格點會平均分佈x_i = i \Delta x,間隔為\Delta x = L / (N+1),各點的加權會是相同旳定值w_i = \Delta x。
在討論誤差時,需注意到平面波的乘積也是平面波,\phi_{a} + \phi_b = \phi_c,c \leq a+b。因此,定量來說,若函數f(x), V(x)可以用N_f, N_V基底函數足夠準確的呈現,只要用N_f + N_V個基底函數,即可用擬譜法得到足夠準確的結果。
平面波的擴展一般效果較差,需要許多的基底函數才能收斂。不過。基底展開和格點表示的轉換可以用快速傅立葉轉換進行,其時間複雜度較低,為N \ln N。因此,平面波是擬譜法中常用的一種基底函數。
多項式
另一種常見的展開方式是多項式,此處會使用高斯求积(Gaussian quadrature),其中提到可以找到加權係數w_i及格點x_i使得
:\int_a^b w(x) p(x) dx = \sum_{i=0}^N w_i p(x_i)
對任意的2N+1次或是更低次的多項式p(x)都成立。一般而言,加權函數w(x)及範圍a,b都是根據特定問題所選定的,因此會選擇幾種分割方式中的一種。若要用在擬譜法,需選擇基底函數為\phi_n(x) = \sqrt{w(x)} P_n(x),其中P_n為n階多項式,有以下特性
:\int_a^b w(x) P_n(x) P_m(x) dx = \delta_{mn}.
在上述條件下,the \phi_n會是正交基底,其內積為\langle f, g \rangle = \int_a^b f(x) \overline{g(x)} dx。此基底以及分割點可以用在擬譜法中。
有關其誤差,若f可以用N_f個基底函數很好的呈現,而V可以用N_V階多項式很好的呈現,則其積可以用前N_f+N_V個基底函數很好的呈現。且擬譜法用該數量的基底函數,會有足夠準確的結果。
在一些標準問題中,會出現這些多項式。例如量子簡諧振動子可以擴展為埃爾米特多項式,而在轉動問題中,會用雅可比多項式來定義相關的勒壤得多項式。
參考資料
*
*
*
*
*
*
*
*
*
*
评论 (0)