第3節.瓊斯矩陣與瓊斯矢量
今天看到個問題,哪位大神可以解釋一下Pancharatnam?Berry (PB) 相位?
所以,打算想來講講瓊斯矩陣與瓊斯矢量,理解這種調製PB相位的器件,用「瓊斯矩陣」去理解是一個比較好的工具。(這裡為什麼打引號後面會說)
我們知道,單色偏振平面光的偏振態可以用一個複數矢量去描述。
而偏振相關的器件,可以用瓊斯矩陣M來描述。輸出光的偏振態可以由輸入光的瓊斯矢量乘以器件的瓊斯矩陣得到。
例如,我們的PB器件,一般是一種特殊的半波片。我們先來看看半波片怎麼去描述。我們假定半波片的快軸是為x方向,慢軸為y反向。那麼他的半波片的瓊斯矩陣可以寫成
我們一般拿半波片來幹嘛呢?一般是用來旋轉線偏振光的偏振態。
首先,我們來看看旋轉變換。例如,大XY坐標系中的坐標(矢量)要用小xy坐標中的坐標(矢量)怎麼去描述呢?
答案是:
我們寫成矩陣形式就是
我們叫這個R作旋轉矩陣。前面那個半波片是瓊斯矩陣是假定半波片的快軸是為x方向,慢軸為y反向。但是,如果我們要模擬一個旋轉一定角度後的半波片,那這個旋轉矩陣就可以派上用處了。我們可以把快軸和慢軸定義一個坐標系,叫做元件坐標系,元件坐標系用小寫的xy表示。在這個坐標系下,其輸入和輸出可以用下面表示,其中這個M是在元件坐標系下的瓊斯矩陣。
那麼實驗室的水平和豎直方向定義一個坐標系,叫實驗室坐標系,用大寫的XY表示。那麼偏振光的瓊斯矢量在這兩個坐標系的表示,用對應的小寫下標和大寫下標表示。同時這兩個坐標系假定只存在旋轉關係。
所以有
根據下面推導
根據以上兩個關係,我們就可以得到在實驗室坐標系下的瓊斯矩陣可以寫成
我們來用matlab來模擬一下這個過程。下面介紹一個小技巧,可以很方便地寫基於瓊斯矩陣的光學模擬。
R=@(theta)[cos(theta),-sin(theta);sin(theta),cos(theta)];T = @(M,theta)(R(theta)*M*R(-theta));syms thetaHW = [1,0;0,-1];T(HW,theta)
ans = [ cos(theta)^2 - sin(theta)^2, 2*cos(theta)*sin(theta)][ 2*cos(theta)*sin(theta), sin(theta)^2 - cos(theta)^2]
應該可以看出來其實上面是等於
當然,其實這裡還沒有回答本文開始解釋一下Pancharatnam?Berry (PB) 相位。其實PB相位是對圓偏振而言的,但是這個矩陣實際上是在線偏振基下描述的。所以,我們在圓偏振基下,看看這個「瓊斯矩陣」(圓偏振基下的瓊斯矩陣不知道該叫啥矩陣,所以我打了引號。)
方法和器件旋轉的方法是一樣的,我們只需要建立圓偏振基和線偏振基的關係,就可以了。具體就不推了,看下圖。內容不用太在意,看公式就行。我前陣子剛投的一篇文章的節選。
最後可以看到,在圓偏振基下,通過旋轉半波片的方向,可以實現相位的調製,這個就是PB相位調製的原理。PB器件通過調整空間變化的半波片方向,從而引入空間變化的相位分布。
其實,你可以看到,對於兩個圓偏振,這個PB器件引進的相位剛好是相反的,所以你用PB相位去做一個透鏡,那麼對其中一個圓偏振是凸透鏡,那麼對於另一個圓偏振就相當於凹透鏡。
PB相位講多了,其實我這節是想講講瓊斯矩陣在matlab中的模擬技巧的。
R=@(theta)[cos(theta),-sin(theta);sin(theta),cos(theta)];T = @(M,theta)(R(theta)*M*R(-theta));HW = [1,0;0,-1];T(HW,pi/4)
還是這段代碼。第一句就是用theta生成旋轉矩陣,第二句就是利用theta生成旋轉矩陣與元件下的瓊斯矩陣M,計算出實驗室坐標系下的瓊斯矩陣。
第3句是半波片在元件坐標系下的瓊斯矩陣,第四句是計算45°下半波片的瓊斯矩陣。其實這裡已經提供了所有器件模擬計算的方法。 我們只需要把元件在元件坐標系的瓊斯矩陣描述出來,那麼我們就可以寫成這個器件在實驗室坐標系下的瓊斯矩陣了。
最後寫個模擬,就是線偏振光通過旋轉的半波片,然後再經過一個45°的偏振器後的光強。
clcclear%%deg = pi/180;R=@(theta)[cos(theta),-sin(theta);sin(theta),cos(theta)];T = @(M,theta)(R(theta)*M*R(-theta))HW = [1,0;0,-1];P = [1,0;0,0];E = [1;0];THETA = (0:360)*deg;I = zeros(size(THETA));for index = 1:length(THETA) theta = THETA(index); Out = T(P,45*deg)*T(HW,theta)*E; I(index) = (norm(Out)).^2;end%%plot(THETA/deg,I)xlim([0,360])
上面這個是比較慢的方法。還有一種辦法,可以用定義符號 syms theta,得到Out的表達式,然後用表達式轉函數句柄的方法來實現矢量化操作。這裡就不具體寫了。想了解可以看matlab將符號表達式轉化為函數句柄的方法匯總。
推薦閱讀:
※matlab有什麼不能做的事情?
※MATLAB腳本中的局部函數
※APPs(000)關於專欄內容介紹
※MATLAB神經網路(五):RBF網路
※如何使用MATLAB求解logistic模型的參數?