对角矩阵又称带状矩阵,是指非零元素集中在主对角先及其两侧,共有L(奇数)条对角线的带状区域内,称为L对角阵
1 3 2 0 0 0
2 4 5 7 0 0
7 9 2 6 8 0
0 2 7 3 2 5 //半代宽d=2 带宽L=5
0 0 3 9 6 4
0 0 0 4 5 1
//需要存储的元素总共多少个呢
//在左上角与右下角补0
0 0 1 3 2//补了d个0
0 2 4 5 7//补d-1个0
7 9 2 6 8
2 7 3 2 5
3 9 6 4 0//补d-1个0
4 5 1 0 0//补d个0
有d=(L-1)/2、算上补的0总共有L*n个元素,总共补的0个数为
d(d+1)/2+d(d+1)/2=d(d+1)
则带状区域元素个数为 L*n-d(d+1)
开头补的d个0和末尾补的d个0可以不进行存储
存储序列
需要 L*n-2*d个存储单元,下标范围[0,L*n-2*d-1]
1 3 2 0 2 4 5 7 7 9 2 6 8 2 7 3 2 5 3 9 6 4 0 4 5 1
它们的对应关系是怎样的呢?
aij前面的元素个数k
k=(i-1)\*L+j-1 |i-j|<=d
在带状区域内
j 1 2 3 4 5 6 j 1 2 3 4 5 6
i 1 1 3 2 0 0 0 i'=i-j i' -2 2 7 8 5
2 2 4 5 7 0 0 -1 3 5 6 2 4
3 7 9 2 6 8 0 0 1 4 2 3 6 1
4 0 2 7 3 2 5 1 2 9 7 9 5
5 0 0 3 9 6 4 2 7 2 3 4
6 0 0 0 4 5 1
进行补0
0 0 2 7 8 5//补d个
0 3 5 6 2 4//补d-1个
1 4 2 3 6 1
2 9 7 9 5 0//补d-1个
7 2 3 4 0 0//补d个
存储内序列为
长度为L*n-2d
2 7 8 5 3 5 6 2 4 1 4 2 3 6 1 2 9 7 9 5 0 7 2 3 4
k=(i'+d)\*n+j-1-d
因为 i'=i-j
所以
k=(i-j+d)\*n+j-1-d |i-j|<=d