Jacobi并行拆解
作者:桂。
時(shí)間:2018-04-23??21:12:02
鏈接:http://www.cnblogs.com/xingshansi/p/8921815.html?
前言
本文主要是復(fù)數(shù)矩陣分解的拆解思路(矩陣求逆/特征值分解)一文的補(bǔ)充。
一、并行拆解思路
? 回顧前文,對(duì)于8X8的實(shí)數(shù)矩陣:
仿真:
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
打印結(jié)果與SVD分解的結(jié)果一致,并行思路可行。其他維度依次類推。對(duì)于維度N的矩陣,
- N為偶數(shù),可并行N/2路;
- N為奇數(shù),可并行[N-1]/2路;
二、改進(jìn)思路
每一次sweep,需要1次Cordic:phi = atan2(y,x)/2,和兩次Cordic(兩次可并行):cos(phi) /?sin(phi),二者串行。對(duì)于atan2操作,可借鑒復(fù)數(shù)相位近似估計(jì)一文的思路,即對(duì)于atan的計(jì)算,考慮到CORDIC耗時(shí)較長(zhǎng),內(nèi)存資源充足的情況下,1)直接查表;若內(nèi)存相對(duì)緊張,2)多項(xiàng)式逼近。二者較CORDIC均減少運(yùn)算時(shí)間。
另外,關(guān)于定點(diǎn)仿真可調(diào)用fi工具包,其中CORDIC對(duì)應(yīng)指令:cordicatan2、cordiccos......
總結(jié)
以上是生活随笔為你收集整理的Jacobi并行拆解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 磁盘性能指标IOPS、吞吐量及测试
- 下一篇: log4j打印错误异常的详细堆栈信息