对角矩阵压缩存储

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.对角矩阵

所有的非零元素集中在以主对角线为中心的带状区域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零的矩阵为对角矩阵。

其中:带状矩阵所有非0元素都集中在以主对角线为中心的带状区域,半带宽为d时,非0元素有(2d+1)*n-(1+d)*d个(左上角与右下角补上0后,最后必须减掉),如下图怕示:

非零元素仅出现在主对角上(a ii,0≤i≤n-1),紧邻主对角线上面的那条对角线上(a i,i+1,0≤i≤n-2)和紧邻主对角线下面的那条对角线上(a i+1,i,0≤i≤n-2)。当|i-j|>1时,元素a ij=0。

由此可知,一个k对角线矩阵(k为奇数)A是满足下述条件的矩阵:

若|i-j|>(k-1)/2,则元素a ij=0。

若|i-j|<=(k-1)/2

对角矩阵可按行优先顺序或对角线的顺序,将其压缩存储到一个向量中,并且也能找到每个非零元素和向量下标的对应关系。

方法一:按行优先顺序存储

为计算方便,认为每一行都有2d+1个非0元素,若少则0补足存放矩阵的数组sa[ ]有:n(2d+1)个元素数组,元素sa[k]与矩阵元素aij 之间有关系:k=i*(2d+1)+d+(j-i)(第一项i*(2d+1)表示前i行一共有几个元素,d+(j-i)这一项是用来确定第i行中,第j列前有几个元素,以i=j 时,这时j-i=0,这个作为“分水岭”,左右两边的元素分别加上偏移量d.)

本例:d=1

K= 0123 4 567 89 10

11 12 13 14

(a00前以及a14处放一个0是用来表示在矩阵的左上角及右下角补上的0)

推广应用:

第i行,首先确定aij的位置aii的位置为i*(2d+1) ai (i+1) ai i+2 若,则元素a ij=0。A00 a10 a11 a12 a21 a22 a23 公式为A[k]=a(i,j)= i*(2d+1)+j-i 同时|i-j|<=d

方法二:按对角线的顺序存储

相关文档
最新文档