🧐 对角矩阵

对角矩阵

对角矩阵又称带状矩阵,是指非零元素集中在主对角先及其两侧,共有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

L对角矩阵非零元素个数

//需要存储的元素总共多少个呢
//在左上角与右下角补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