复数矩阵分解的拆解思路(矩阵求逆/特征值分解)
作者:桂。
時間:2017-10-26??07:11:02
鏈接:http://www.cnblogs.com/xingshansi/p/7735016.html?
前言
主要記錄特征值分解的硬件實現思路。
一、實數矩陣轉化
在FPGA運算中,對實數運算通常優于對復數運算。假設C為復數矩陣:C= A+iB;且
C = CH
從而A = AT;B = -BT;若C的奇異值所對應的奇異向量為u + iv,且滿足:
對應有:
借助矩陣形式表示:
根據A、B的性質,存在:
一個NxN的Hermitian矩陣分解,轉化為2Nx2N的實對稱矩陣分解。
?
二、Jacobi算法(Givens旋轉)
?對于對稱矩陣:
其中Givens參數:
該公式可進一步轉化:$tan(2theta) = 2a_{ij}/(a_{jj}-a_{ii})$;theta可以借助cordic算法求解。
此處可以借助Cordic求解角度,也可以利用CORDIC求根號的思路進行sin、cos的計算:
aii= 1; ajj = 3; aij = 1.2; tan_2 = (2*aij/(ajj-aii)); theta = 1/2*atan(tan_2); tao = 1/tan_2; t = sign(tao)/(abs(tao)+sqrt(1+tao.^2)); cos_1 = 1/sqrt(1+t^2) cos_1_new = cos(theta) sin_1 = t/sqrt(1+t^2) sin_1_new = sin(theta)使用Givens旋轉左乘A,可以得到對角陣,右乘同樣可以得出。只使用左乘\右乘的Givens旋轉稱為單邊Givens旋轉。與之不同,對nxn對稱矩陣A同時采用左乘、右乘的方法,稱為雙邊Givens旋轉。
具體代碼實現,參見:印象筆記-005常用算法-0020Jacobi算法。
借助之前SVD實現矩陣求逆的思路,矩陣求逆的硬件實現,也可以在此基礎上直接實現。(此處實對稱矩陣,利用:特征向量x特征值取反x特征向量轉置,即完成矩陣求逆)
clc;clear all; x = rand(4,100)*20+1i*rand(4,100)*20; R = x*x'/100; A = real(R); B = imag(R); R_cat = [A -B;B A]; [D,V]=Jacobi(R_cat); % V = V'; U_est = V(1:4,1:2:end)+1i*V(5:end,1:2:end); D0 = diag(D); D0 = 1./D0(1:2:end); R_inv = U_est*diag(D0)*U_est'?三、并行拆解思路
對于nxn的矩陣分解,一種思路是尋找矩陣所有非對角元素中絕對值較大者進行雙邊Jacobi變換,使得該非對角線元素變為0.接著進行第二次變換,直到收斂至精度要求,O(n2)復雜度。
另一種是固定計算順序的方法(術語:循環Jacobi,cycle Jacobi),簡單粗暴且便于在硬件上實現(行/列):
假設矩陣維度為8,經過一次迭代的計算順序可表示為:
仿真驗證參考:Jacobi并行拆解
對于維度為N的矩陣,每一行的N/2個都可以并行,遍歷一次(專業術語:Sweep)需要N-1個周期。對于N維度的矩陣,排序的順序為:
如N = 10,除去1,2追溯到4,3追溯到2,5追溯到3.......依次類推。
S_0:(1,2)-(3,4)-(5,6)-(7,8)-(9,10)
S_1:(1,4)-(2,6)-(3,8)-(5,10)-(7,9)
......
BLV Array for N=8. Data transmission is represented as solid arrows and rotation parameters transmission with unfilled arrows.
總結
以上是生活随笔為你收集整理的复数矩阵分解的拆解思路(矩阵求逆/特征值分解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房贷还完了怎么解除抵押,简单三步轻松解押
- 下一篇: 贷款机构如何审核个人征信?