没有合适的资源?快使用搜索试试~ 我知道了~
求矩阵最大特征值的并行和串形算法
资源推荐
资源详情
资源评论
1. 9 矩阵特征值计算
在实际的工程计算中,经常会遇到求 n 阶方阵 A 的特征值(Eigenvalue)与特征向量
(Eigenvector)的问题。对于一个方阵 A,如果数值 λ 使方程组
Ax=λx
即 (A-λI
n
)x=0 有非零解向量(Solution Vector)x,则称 λ 为方阵 A 的特征值,而非零向量 x 为
特征值 λ 所对应的特征向量,其中 I
n
为 n 阶单位矩阵。
由于根据定义直接求矩阵特征值的过程比较复杂,因此在实际计算中,往往采取一些
数值方法。本章主要介绍求一般方阵绝对值最大的特征值的乘幂(Power)法、求对称方阵特
征值的雅可比法和单侧旋转(One-side Rotation)法以及求一般矩阵全部特征值的 QR 方法及
一些相关的并行算法。
1.1 求解矩阵最大特征值的乘幂法
1.1.1 乘幂法及其串行算法
在许多实际问题中,只需要计算绝对值最大的特征值,而并不需要求矩阵的全部特征
值。乘幂法是一种求矩阵绝对值最大的特征值的方法。记实方阵 A 的 n 个特征值为 λ
i
i=(1,2, …,n),且满足:
│λ
1
│≥│λ
2
│≥│λ
3
│≥…≥│λ
n
│
特征值 λ
i
对应的特征向量为 x
i
。乘幂法的做法是:①取 n 维非零向量 v
0
作为初始向量;②
对于 k=1,2, …,做如下迭代:
u
k
=Av
k-1
v
k
= u
k
/║u
k
║
∞
直至 ε 为止,这时 v
k+1
就是 A 的绝对值最大的特征值 λ
1
所对应
的特征向量 x
1
。若 v
k-1
与 v
k
的各个分量同号且成比例,则 λ
1
=║u
k
║
∞
;若 v
k-1
与 v
k
的各个分量
异号且成比例,则 λ
1
= -║u
k
║
∞
。若各取一次乘法和加法运算时间、一次除法运算时间、一
次比较运算时间为一个单位时间,则因为一轮计算要做一次矩阵向量相乘、一次求最大元
操作和一次规格化操作,所以下述乘幂法串行算法 21.1 的一轮计算时间为 n
2
+2n=O(n
2
)。
算法 21.1 单处理器上乘幂法求解矩阵最大特征值的算法
输入:系数矩阵 A
n×n
,初始向量 v
n×1
,ε
输出:最大的特征值 max
Begin
while (│diff│>ε) do
(1)for i=1 to n do
(1.1)sum=0
(1.2)for j= 1 to n do
sum=sum+a[i,j]*x[j]
end for
(1.3)b[i]= sum
end for
(2)max=│b[1]│
(3)for i=2 to n do
if (│b[i]│>max) then max=│b[i]│ end if
end for
(4)for i=1 to n do
x[i] =b[i]/max
end for
(5)diff=max-oldmax , oldmax=max
end while
End
1.1.2 乘幂法并行算法
乘幂法求矩阵特征值由反复进行矩阵向量相乘来实现,因而可以采用矩阵向量相乘的
数据划分方法。设处理器个数为 p,对矩阵 A 按行划分为 p 块,每块含有连续的 m 行向量,
这里 ,编号为 i 的处理器含有 A 的第 im 至第(i+1)m-1 行数据,(i=0,1, …,p-1),
初始向量 v 被广播给所有处理器。
各处理器并行地对存于局部存储器中 a 的行块和向量 v 做乘积操作,并求其 m 维结果
向量中的最大值 localmax,然后通过归约操作的求最大值运算得到整个 n 维结果向量中的
最大值 max 并广播给所有处理器,各处理器利用 max 进行规格化操作。最后通过扩展收集
操作将各处理器中的 维结果向量按处理器编号连接起来并广播给所有处理器,以进行下
一次迭代计算,直至收敛。具体算法框架描述如下:
算法 21.2 乘幂法求解矩阵最大特征值的并行算法
输入:系数矩阵 A
n×n
,初始向量 v
n×1
,ε
输出:最大的特征值 max
Begin
对所有处理器 my_rank(my_rank=0,…, p-1)同时执行如下的算法:
while (│diff│>ε) do /* diff 为特征向量的各个分量新旧值之差的最大值*/
(1)for i=0 to m-1 do /*对所存的行计算特征向量的相应分量*/
(1.1)sum=0
(1.2)for j= 0 to n-1 do
sum=sum+a[i,j]*x[j]
end for
(1.3)b[i]= sum
end for
(2)localmax=│b[0]│ /*对所计算的特征向量的相应分量
求新旧值之差的最大值 localmax */
(3)for i=1 to m-1 do
if (│b[i]│>localmax) then localmax=│b[i]│ end if
end for
(4)用 Allreduce 操作求出所有处理器中 localmax 值的最大值 max
并广播到所有处理器中
(5)for i=0to m-1 do /*对所计算的特征向量归一化 */
b[i] =b[i]/max
end for
(6)用 Allgather 操作将各个处理器中计算出的特征向量的分量的新值组合并广播到
所有处理器中
(7)diff=max-oldmax, oldmax=max
end while
End
若各取一次乘法和加法运算时间、一次除法运算时间、一次比较运算时间为一个单位
时间,一轮迭代的计算时间为 mn+2m;一轮迭代中,各处理器做一次归约操作,通信量为
1,一次扩展收集操作,通信量为 m,则通信时间为 。因
此乘幂法的一轮并行计算时间为 。
MPI 源程序请参见所附光盘。
1.2 求对称矩阵特征值的雅可比法
1.2.1 雅可比法求对称矩阵特征值的串行算法
若矩阵 A=[a
ij
]是 n 阶实对称矩阵,则存在一个正交矩阵 U,使得
U
T
AU=D
其中 D 是一个对角矩阵,即
这里 λ
i
(i=1,2,…,n)是 A 的特征值,U 的第 i 列是与 λ
i
对应的特征向量。雅可比算法主要是通
过正交相似变换将一个实对称矩阵对角化,从而求出该矩阵的全部特征值和对应的特征向
量。因此可以用一系列的初等正交变换逐步消去 A 的非对角线元素,从而使矩阵 A 对角化。
设初等正交矩阵为 R(p,q,θ),其(p,p)( q,q)位置的数据是 cosθ,(p, q)( q, p)位置的数据分别是-
sinθ 和 sinθ(p ≠ q),其它位置的数据和一个同阶数的单位矩阵相同。显然可以得到:
R(p,q,θ)
T
R(p,q,θ)=I
n
不妨记 B= R(p,q,θ)
T
AR(p,q,θ),如果将右端展开,则可知矩阵 B 的元素与矩阵 A 的元素
之间有如下关系:
b
pp
= a
pp
cos
2
θ+a
qq
sin
2
θ+a
pq
sin2θ b
qq
= a
pp
sin
2
θ+a
qq
cos
2
θ-a
pq
sin2θ
b
pq
= ((a
qq
-a
pp
)sin2θ)/2+a
pq
cos2θ b
qp
= b
pq
b
pj
= a
pj
cosθ+a
qj
sinθ b
qj
= -a
pj
sinθ +a
qj
cosθ
b
ip
= a
ip
cosθ+a
iq
sinθ b
iq
= -a
ip
sinθ +a
iq
cosθ
b
ij
= a
ij
其中 1 ≤ i, j ≤ n 且 i,j ≠ p,q。因为 A 为对称矩阵,R 为正交矩阵,所以 B 亦为对称矩阵。
若要求矩阵 B 的元素 b
pq
=0,则只需令 ((a
qq
-a
pp
)sin2θ)/2+a
pq
cos2θ=0,即:
在实际应用时,考虑到并不需要解出 θ,而只需要求出 sin2θ,sinθ 和 cosθ 就可以了。
如果限制 θ 值在-π/2 < 2θ ≤ π/2,则可令
容易推出:
, ,
利用 sin2θ,sinθ 和 cosθ 的值,即得矩阵 B 的各元素。矩阵 A 经过旋转变换,选定的
非主对角元素 a
pq
及 a
qp
(一般是绝对值最大的)就被消去,且其主对角元素的平方和增加
了 ,而非主对角元素的平方和减少了 2a
2
pq
,矩阵元素总的平方和不变。通过反复选
取主元素 a
pq
,并作旋转变换,就逐步将矩阵 A 变为对角矩阵。在对称矩阵中共有(n
2
-n)/2 个
非主对角元素要被消去, 而每消去一个非主对角元素需要对 2n 个元素进行旋转变换, 对一个
元素进行旋转变换需要 2 次乘法和 1 次加法,若各取一次乘法运算时间或一次加法运算时
间为一个单位时间,则消去一个非主对角元素需要 3 个单位运算时间,所以下述算法 21.3
的一轮计算时间复杂度为 (n
2
-n)/2*2n*3=3n
2
(n-1)=O(n
3
)。
算法 21.3 单处理器上雅可比法求对称矩阵特征值的算法
输入:矩阵 A
n×n
,ε
输出:矩阵特征值 Eigenvalue
Begin
(1)while (max >ε) do
(1.1) max=a[1,2]
(1.2)for i=1 to n do
for j= i+1 to n do
if (│a[i,j]) │>max) then max =│a[i,j] │,p=i
,
q=j end if
end for
end for
(1.3)Compute:
m=- a[p,q],n=(a[q,q]- a[p,p])/2,w=sgn(n)*m/sqrt(m*m+n*n),
si2=w
,
si1=w/sqrt(2(1+ sqrt(1-w*w))),co1=sqrt(1-si1*si1),
b[p,p]= a[p,p]*co1*co1+ a[q,q]*si1*si1+ a[p,q]*si2,
b[q,q]= a[p,p]*si1*si1+ a[q,q]*co1*co1- a[p,q]*si2,
b[q, p]=0,b[p,q]=0
(1.4)for j=1 to n do
if ((j ≠ p) and ( j ≠ q)) then
(i)b[p,j]= a[p,j]*co1+ a[q,j]*si1
(ii)b[q,j]= -a[p,j]*si1 + a[q,j]*co1
end if
end for
(1.5)for i=1 to n do
if((i ≠ p) and (i ≠ q)) then
(i)b[i, p]= a[i,p]*co1+ a[i,q]*si1
(ii)b[i, q]= - a[i,p]*si1+ a[i,q]*co1
end if
end for
(1.6)for i=1 to n do
for j=1 to n do
a[i,j]=b[i,j]
end for
end for
end while
(2)for i=1 to n do
Eigenvalue[i]= a[i, i]
end for
End
1.2.2 雅可比法求对称矩阵特征值的并行算法
串行雅可比算法逐次寻找非主对角元绝对值最大的元素的方法并不适合于并行计算。
因此,在并行处理中,我们每次并不寻找绝对值最大的非主对角元消去,而是按一定的顺
序将 A 中的所有上三角元素全部消去一遍,这样的过程称为一轮。由于对称性,在一轮中,
A 的下三角元素也同时被消去一遍。经过若干轮,可使 A 的非主对角元的绝对值减少,收
敛于一个对角方阵。具体算法如下:
设处理器个数为 p,对矩阵 A 按行划分为 2p 块,每块含有连续的 m/2 行向量,记
,这些行块依次记为 A
0
,A
1
, …,A
2p-1
,并将 A
2i
与 A
2i+1
存放与标号为 i 的处理器中。
每轮计算开始,各处理器首先对其局部存储器中所存的两个行块的所有行两两配对进
行旋转变换,消去相应的非对角线元素。然后按图 21.1 所示规律将数据块在不同处理器之
间传送,以消去其它非主对角元素。
图 21.1 p=4 时的雅可比算法求对称矩阵特征值的数据交换图
这里长方形框中两个方格内的整数被看成是所移动的行块的编号。在要构成新的行块
配对时,只要将每个处理器所对应的行块按箭头方向移至相邻的处理器即可,这样的传送
剩余31页未读,继续阅读
资源评论
lpcffnomal
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功