Jacobi并行拆解
生活随笔
收集整理的這篇文章主要介紹了
Jacobi并行拆解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:桂。
時間:2018-04-23??21:12:02
鏈接:http://www.cnblogs.com/xingshansi/p/8921815.html?
前言
本文主要是復數矩陣分解的拆解思路(矩陣求逆/特征值分解)一文的補充。
一、并行拆解思路
? 回顧前文,對于8X8的實數矩陣:
仿真:
clc;clear all; X = rand(8); R = X+X'; Iteration = 20; [D,U] = Jac_sweep(R,Iteration); [u,s,v] = svd(R); [sort(diag(s)),sort(abs(diag(D)))]Jac_sweep并行代碼:
function [D,U] = Jac_sweep(A,Iteration) iter = 0; n = size(A,1); U = eye(n); A_c = [1,2;3,4;5,6;7,8;...2,3;4,5;6,7;1,8;...1,3;2,4;5,7;6,8;...3,5;4,6;1,7;2,8;...1,4;3,6;5,8;2,7;...2,5;4,7;1,6;3,8;...1,5;2,6;3,7;4,8];while iter <Iterationiter = iter+1;for flag = 1:size(A_c,1)/4T = eye(n);for t = 1:4p = A_c((flag-1)*4+t,1);q = A_c((flag-1)*4+t,2);y = 2*A(p,q);x = A(p,p)-A(q,q);phi = atan2(y,x)/2;T(p,p) = cos(phi);T(q,q) = cos(phi);T(p,q) = -sin(phi);T(q,p) = sin(phi);endD = T'*A*T;U = U*T;A = D;end end
打印結果與SVD分解的結果一致,并行思路可行。其他維度依次類推。對于維度N的矩陣,
- N為偶數,可并行N/2路;
- N為奇數,可并行[N-1]/2路;
二、改進思路
每一次sweep,需要1次Cordic:phi = atan2(y,x)/2,和兩次Cordic(兩次可并行):cos(phi) /?sin(phi),二者串行。對于atan2操作,可借鑒復數相位近似估計一文的思路,即對于atan的計算,考慮到CORDIC耗時較長,內存資源充足的情況下,1)直接查表;若內存相對緊張,2)多項式逼近。二者較CORDIC均減少運算時間。
另外,關于定點仿真可調用fi工具包,其中CORDIC對應指令:cordicatan2、cordiccos......
總結
以上是生活随笔為你收集整理的Jacobi并行拆解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 磁盘性能指标IOPS、吞吐量及测试
- 下一篇: 为什么借钱要上央行征信?