三对角矩阵的压缩存储

a1,1 a1,2

a2,1 a2,2 a2,3     0

  a3,2 a3,3 a3,4

   ... ... ...

 0    an-1,n-2 an-1,n-1 an-1,n

        an,n-1 an,n

三对角矩阵指n阶方阵的非零元素ai,j聚集在主对角线及其两边的两条线上,即|i-j|≤1,其余位置均为0,如果使用二维数组进行存储,则会浪费大量空间,对此可以使用一维数组将其压缩存储。

其中元素总数为:2+3*(n-2)+2=3n-2,则可以定义一个一维数组B[3n-2],则ai,j在B中的位置为k(注意k从0开始)

则在ai,j之前的元素个数为

第1行:2

第2行:3

第3行:3

...

第i-1行:3

第i行:j-i+1

则k=2+3*(i-2)+j-i+1=2i+j-3

若已知k,则ai,j为

i=(k+1)/3+1,(k+1:向右偏移一个单位;3:每行3个元素;+1:i从1开始)

j=k-2i+3(由k的计算公式可得)

a1,1 a1,2 a2,1 a2,2 a2,3     0   a3,2 a3,3 a3,4    ... ... ...  0    an-1,n-2 an-1,n-1 an-1,n         an,n-1 an,n 三对角矩阵指n阶方阵的非零元素ai,j聚集在主对角线及其两边的两条线上,即|i-j|≤1,其余位置均为0,如果使用二维数组进行存储,则会浪费大量空间,对此可以使用一维数组将其压缩存储。 其中元素总数为:2+3*(n-2)+2=3n-2,则可以定义一个一维数组B[3n-2],则ai,j在B中的位置为k(注意k从0开始) 则在ai,j之前的元素个数为 第1行:2 第2行:3 第3行:3 ... 第i-1行:3 第i行:j-i+1 则k=2+3*(i-2)+j-i+1=2i+j-3 若已知k,则ai,j为 i=(k+1)/3+1,(k+1:向右偏移一个单位;3:每行3个元素;+1:i从1开始) j=k-2i+3(由k的计算公式可得)
经验分享 程序员 微信小程序 职场和发展