1

如果我們考慮一個大小爲pxp的矩陣R.如果我們想在A等於(I + Givens旋轉)的情況下乘以A'RA。這裏我是一個單位矩陣,'表示轉置運算符。使用Givens旋轉

我們知道,一個Givens旋轉是寫爲稀疏矩陣:

enter image description here

要執行MATLAB中的乘法A'RA,我們可以做到這一點快速實現:

%Fast implementation 
    ci = R(:,ik)*(cos(theta))+R(:,jk)*(sin(theta)); % R*A 
    cj = R(:,jk)*(cos(theta)) - R(:,ik)*(sin(theta)); 
    R(:,ik) = ci; 
    R(:,jk) = cj; 

    ri = R(ik,:)*(cos(theta))+R(jk,:)*(sin(theta)); % A'*R*A 
    rj = R(jk,:)*(cos(theta)) - R(ik,:)*(sin(theta)); 
    R(ik,:) = ri; 
    R(jk,:) = rj; 

但我不明白他們是如何編寫這個Matlab代碼的。換句話說,我不瞭解這個Matlab代碼如何應用乘法A'RA。請問有人可以幫我理解這段代碼嗎?

回答

2

混亂的一個可能的來源是,在您的示例中,Givens旋轉矩陣中的符號我們需要轉置的一面是錯誤的。我將假設後者:我將使用與您定義的相同的A矩陣,但使用A*R*A'進行轉換(將A更改爲轉置等效於採用相反符號的旋轉角度)。

該算法相對簡單。對於初學者來說,在代碼中的註釋表明,改造分兩步進行:

Rnew = A * R * A' = A * (R * A') 

首先,我們計算R*A'。爲此,想象具有Givens旋轉矩陣M的變換矩陣A = I + M。您基本上顯示的公式表示「採用單位矩陣,除了以給定角度旋轉的2個指定尺寸」。下面是完整的A矩陣看起來像一個小問題(6D矩陣,ik=2jk=4,無論是在充分稀疏形式):

full A matrix sparse A matrix

你可以看到,除了(ikjk )二維子空間,這個矩陣是一個單位矩陣,保持其他維度不變。因此R*A'的操作將導致R對於每個維度,除了ikjk

在這兩列的R*A'結果是R(:,ik)R(:,jk)與這些三角函數係數線性組合:

[R*A'](:,ik) = R(:,ik)*cos(theta) + R(:,jk)*sin(theta) 
[R*A'](:,jk) = -R(:,ik)*sin(theta) + R(:,jk)*cos(theta) 

而列的其餘部分保持不變。如果你看看你引用的代碼:這正是它所做的。根據定義,這是什麼R*A'意味着與上面顯示的A矩陣。所有這些暗示A矩陣是除了2d子空間之外的單位矩陣。

下一步是非常相似的:使用這個新的R*A'矩陣我們從A相乘。再次,沿着大部分尺寸的影響(行,這個時候)會認同,但在行ikjk我們又得到一個線性組合:

[A*[R*A']](ik,:) = cos(theta)*[R*A'](ik,:) + sin(theta)*[R*A'](jk,:) 
[A*[R*A']](jk,:) = -sin(theta)*[R*A'](ik,:) + cos(theta)*[R*A'](jk,:) 

時指出,代碼覆蓋R矩陣R*A'在第一步之後,再次清楚的是在「快速實現」代碼中執行相同的操作。

聲明:A'是matlab中的伴隨(共軛轉置),因此您應該使用A.'來引用轉置。對於複雜的矩陣有很大的區別,當人們最終遇到複雜的矩陣時經常忘記使用正確的轉置。

+1

非常感謝你的回答:) – Christina

+0

@Christina隨時:) –