原文 | https://mp.weixin.qq.com/s/YzPoPnRb-gEm_EiV9et0TA算法
實矩陣也可能碰到復特徵值,所以無可避免地在矩陣運算中碰到複數。學習
矩陣固然也有可能包含複數,最重要的復矩陣是傅立葉矩陣,它用於傅立葉變換。一種特殊的傅立葉變換是快速傅立葉變換(fast Fourier transform),簡稱FFT,在計算機中很經常使用,特別是涉及到大數據時,FFT將把傅立葉變換中的n階方正陣乘法的運算次數從n2下降到nlog2n,這是一個巨大的進步。大數據
本文相關前置知識spa
傅立葉矩陣中w的由來orm
標準正交矩陣及其性質blog
復矩陣的特徵值get
先給出一個復向量,即向量的份量中至少有一個是複數:it
雖然這個向量在表達上和普通的實向量沒什麼區別,但這個向量再也不屬於實空間Rn,而是屬於復空間Cn,即n維復空間。ast
關於復向量的第一個問題是模長怎麼計算?
因爲向量中有複數份量,再用過zTz的方式是沒法計算出模長的,好比下面的(1, i):
但很明顯,(1, i)在複平面上的模長不是0:
咱們知道一個複數的模長的平方等於這個複數與它的共軛複數的乘積,所以能夠經過下面的方式計算復向量的模長:
一般用zH(H來自Hermite)表示共軛向量的轉置:
與模長相似,若是有兩個復向量p和q,它們的點積也不能簡單地定義成pTq,而是pHq:
複平面上有兩個向量p(1, i)和q(1, -i),兩者的點積是:
兩者的點積是0,所以能夠判斷兩個復向量互相垂直:
咱們曾講過,對於一個矩陣A來講,若是AT=A,那麼A是對稱矩陣,實際上這個結論僅對實矩陣有效,對復矩陣可無論用。
若是一個復矩陣是對稱矩陣,那麼:
一般寫做另外一種方式:
這種對稱復矩陣稱爲厄米特矩陣(或埃米特矩陣,Hermitian matrix),好比下面這個:
上一章講到,一個復對稱矩陣的特徵值仍然是實數,且能夠找到互相垂直的特徵向量,其對角元素都是實數。
假設有一個由n個標準正交向量組成的復矩陣Q = [q1, q2, …, qn],這裏的正交意味:
這個復空間的正交矩陣Q稱爲酉矩陣(unitary matrix)。
傅立葉變換是一種分析信號的方法,它可分析信號的成分,也可用這些成分合成信號。許多波形可做爲信號的成分,好比正弦波、方波、鋸齒波等,傅立葉變換用正弦波做爲信號的成分。
在電子工程或計算機中,n×n矩陣的行和列都是從0開始的,到n-1結束,因爲傅立葉變換常常用在計算機上,因此咱們在討論傅立葉矩陣的時候聽從這種下標規則。
型如Fn的復矩陣是傅立葉矩陣:
矩陣中的每一個元素都不爲0,是個全矩陣。w是個特殊的值:
相關連接: 傅立葉矩陣中w的由來
在計算w的乘方的時候,咱們須要考慮用極座標表示複平面。在極座標下,w表示模長爲1的向量從(1,0)開始,繞原點逆時針旋轉了2π/n,如此一來,咱們就能夠知道n等於任意值時w的位置,而且也一樣知道w的乘方的位置。對於w來講,wn的模長仍然等於1,只是旋轉的角度有所不一樣。好比n=6時,w=ei2π/6= eiπ/3,w2=(eiπ/3)2= ei2π/3。
同理,n=4時,w=ei2π/4,正好落在虛軸上,w= i,w4=1。咱們寫出4階傅立葉矩陣:
傅立葉矩陣能夠獲得一個四點(離散的)傅立葉變換,它的逆矩陣能夠獲得傅立葉逆變換。此外,傅立葉矩陣的列向量是正交的,因此很容易求得逆矩陣。實際上傅立葉矩陣能夠分解成一系列稀疏矩陣,這些矩陣有大量的0元素,因此相應的乘法和求逆都很簡單。
F4的列向量正交,這意味着任意兩個列向量的點積爲0,但若是你仍是用過去的點積計算方法就會發現它並非0(固然有時候會湊巧等於0),好比第2列和第4列:
前面介紹過,復向量的點積不是這麼算的,正確算法應該是取共軛的轉置:
F4的列向量的模長是2,爲了使矩陣更完美,能夠把它除以2,因而矩陣的各列就變成了標準正交向量:
對於標準正交的實矩陣來講,矩陣的逆等於矩陣的轉置,傅立葉矩陣可化簡爲標準正交的復矩陣,具備一樣的性質,F4的逆矩陣就是它共軛的轉置:
因爲F4的逆矩陣就是F4共軛的轉置,因此F4的逆矩陣和F4具備一樣的性質。
什麼是快速傅立葉變換呢?舉個例子,F6與F3之間存在着某種奇妙的聯繫,F8與F4,F64與F32也同樣,咱們能夠把這種聯繫描述出來。
以F64與F32爲例,F64是一個64階方陣,w64 = 1,w = 1;同理對於F32來講,w32 = 1,w = 1。
w64和w32的模長相等,w64的幅角是w32的2倍:
既然如此,F64和F32也應該存在某種聯繫。實際上F64與由兩個F32和兩個零矩陣構成的方陣有關:
這種分解稱爲快速傅立葉變換。其中P是一個2n×2n的置換矩陣,D是由w的冪構成的對角矩陣:
P的效果是使得所乘行向量x中序號爲奇數的份量x1,x3,x5……提到前面,偶數序號的份量x2,x3,x6……放到後面。例如:
能夠看到,快速傅立葉變換實際上使用的是分治算法。計算64階傅立葉變換的計算量是642,而通過一次變換後,計算量變成了2×322(2個32階的傅立葉矩陣)再加上一些修正項,而修正項主要來自於和對角矩陣D的乘法,共32次。繼續對F32進行分解……知道矩陣尺度爲1。對於n階矩陣,可將n2次計算降至(n/2) log2n。
做者:我是8位的
出處:https://mp.weixin.qq.com/s/YzPoPnRb-gEm_EiV9et0TA
本文以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,非商業用途!
掃描二維碼關注做者公衆號「我是8位的」