三对角矩阵的压缩存储公式推导

合集下载

数据结构实验五矩阵的压缩存储与运算学习资料

数据结构实验五矩阵的压缩存储与运算学习资料

数据结构实验五矩阵的压缩存储与运算第五章矩阵的压缩存储与运算【实验目的】1. 熟练掌握稀疏矩阵的两种存储结构(三元组表和十字链表)的实现;2. 掌握稀疏矩阵的加法、转置、乘法等基本运算;3. 加深对线性表的顺序存储和链式结构的理解。

第一节知识准备矩阵是由两个关系(行关系和列关系)组成的二维数组,因此对每一个关系上都可以用线性表进行处理;考虑到两个关系的先后,在存储上就有按行优先和按列优先两种存储方式,所谓按行优先,是指将矩阵的每一行看成一个元素进行存储;所谓按列优先,是指将矩阵的每一列看成一个元素进行存储;这是矩阵在计算机中用一个连续存储区域存放的一般情形,对特殊矩阵还有特殊的存储方式。

一、特殊矩阵的压缩存储1. 对称矩阵和上、下三角阵若n阶矩阵A中的元素满足= (0≤i,j≤n-1 )则称为n阶对称矩阵。

对n阶对称矩阵,我们只需要存储下三角元素就可以了。

事实上对上三角矩阵(下三角部分为零)和下三角矩阵(上三角部分为零),都可以用一维数组ma[0.. ]来存储A的下三角元素(对上三角矩阵做转置存储),称ma为矩阵A的压缩存储结构,现在我们来分析以下,A和ma之间的元素对应放置关系。

问题已经转化为:已知二维矩阵A[i,j],如图5-1,我们将A用一个一维数组ma[k]来存储,它们之间存在着如图5-2所示的一一对应关系。

任意一组下标(i,j)都可在ma中的位置k中找到元素m[k]= ;这里:k=i(i+1)/2+j (i≥j)图5-1 下三角矩阵a00 a10 a11 a20 … an-1,0 … an-1,n-1k= 0 1 2 3 …n(n-1)/2 …n(n+1)/2-1图5-2下三角矩阵的压缩存储反之,对所有的k=0,1,2,…,n(n+1)/2-1,都能确定ma[k]中的元素在矩阵A中的位置(i,j)。

这里,i=d-1,(d是使sum= > k的最小整数),j= 。

2. 三对角矩阵在三对角矩阵中,所有的非零元素集中在以主对角线为中心的带内状区域中,除了主对角线上和直接在对角线上、下方对角线上的元素之外,所有其它的元素皆为零,见图5-3。

规律分布特殊矩阵的压缩存储

规律分布特殊矩阵的压缩存储
三角矩阵大体分为三类:下三角矩阵、上三角矩阵、对称矩阵。对于一个 n 阶矩阵 A 来 说:若当 i <j 时,有 a ij =c(典型情况 c=0 ),则称此矩阵为下三角矩阵;若当 i>j 时,有 aij =c(典型情 况 c=0 ),则称此矩阵为上三角矩阵;若矩阵中的所有元素均满足 aij =aji,则称此矩阵为对称矩 阵。
【本节要点】
= Loc( A[ 1 ][ 1 ])+( 2 ( i-1 )+ j -1)*size
1、 规律分布特殊矩阵的压缩存储原则:按规律存放非零元素;
2、 按规律找出地址计算公式
思考题:类同按行为主序,请给出按列或按行为主序条件下上三角矩阵以及对称矩阵的 相关推导。 2 .带状矩阵
( 1 )带状矩阵描述:在矩阵中的所有非零元素都集中在以主对角线为中心的带状区域中。 其中最常见的是三对角带状矩阵,如图 3 所示。
a11 A12
a21 A22 a23
A32 a33 a34
( 2 )三对角带状矩阵特点
数组 C
a11 a12 a21 a22 a23 a31 … ann
Loc(i,j)
1 2 3 4 5 6 … 3n-2
图 4 带状矩阵的压缩形式
②确定非零元素在一维数组空间中的地址 Loc ( A[ i][ j])= Loc ( A[ 1 ][ 1 ])+(前 i-1 行非零元素个数+第 i 行中 aij 前非零元素个
数)*size 前 i-1 行元素个数=3 ×( i-1 )- 1 (因为第 1 行只有 2 个非零元素); 第 i 行中 ai j 前非零元素个数=j-i +1 ,其中
j-i=
-1 ( j<i) 0 (j=i) 1 (j>i)

三对角矩阵压缩存储

三对角矩阵压缩存储

三对角矩阵压缩存储三对角矩阵是一种特殊类型的矩阵,在存储和计算上具有一定的优势。

本文将从三对角矩阵的定义、特性、压缩存储方法以及相应的计算算法等方面进行介绍。

一、三对角矩阵的定义三对角矩阵是指除了主对角线上的元素外,只有上下相邻对角线上的元素不为零,其余元素都为零的矩阵。

例如,一个n阶的三对角矩阵可以表示为:\[ A = \begin{bmatrix}b_1 & c_1 & 0 & \cdots & \cdots & \cdots & 0 \\a_2 & b_2 & c_2 & 0 & \cdots & \cdots & 0 \\0 & a_3 & b_3 & c_3 & 0 & \cdots & 0 \\\vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\0 & \cdots & \cdots & \cdots & \cdots & a_{n-1} & b_{n-1} \\ 0 & \cdots & \cdots & \cdots & \cdots & 0 & a_n \\\end{bmatrix} \]其中,b1, b2, ..., bn为主对角线上的元素;a2, a3, ..., an为下对角线上的元素;c1, c2, ..., cn-1为上对角线上的元素。

二、三对角矩阵的特性1. 三对角矩阵是一种稀疏矩阵,大部分元素都为零,只有O(n)个非零元素。

2. 三对角矩阵可以用来表示一些特定问题的线性方程组,如一维热传导方程、抛物线偏微分方程等。

第4章专题3矩阵的压缩存储

第4章专题3矩阵的压缩存储

三元组表=( (0,0,15), (1,1,11), (2,3,6), (4,0,9) ) 如何存储三元组表?
清华大学出版社
数据结构(C++版)第2版
4.3 矩阵的压缩存储
稀疏矩阵的压缩存储——三元组顺序表 采用顺序存储结构存储三元组表
15 0 0 22 0 -15
0 11 3 0 0 0
A=
0 0
0 0 a43 a44 a45 0 0 0 a54 a55
(a) 三对角矩阵
按行 存储
元素aij在一维数组中的序号
=2 + 3(i-2)+( j-i + 2) =2i+ j -2 ∵一维数组下标从0开始
∴元素aij在一维数组中的下标
= 2i+ j -3
(b) 寻址的计算方法
0 1 2 3 4 5 6 7 8 9 10 11 12
0 0
0 0
6 0
0 0
0 0
91 0 0 0 0 0
三元组顺序表是否 需要预留存储空间?
稀疏矩阵的修改操作
三元组顺序表的插入/删除操作
清华大学出版社
数据结构(C++版)第2版
4.3 矩阵的压缩存储
稀疏矩阵的压缩存储——三元组顺序表
采用顺序存储结构存储三元组表
15 0 0 22 0 -15
0 11 3 0 0 0
上三角中的元素aij(i<j),因为aij=aji,则访问和 它对应的元素aji即可,即:k=j×(j+1)/2+i -1 。
清华大学出版社
数据结构(C++版)第2版
4.3 矩阵的压缩存储
特殊矩阵的压缩存储——三角矩阵

三对角矩阵的压缩存储公式推导

三对角矩阵的压缩存储公式推导

三对角矩阵的压缩存储公式推导标题:深入探讨三对角矩阵的压缩存储公式推导在线性代数和数值计算中,三对角矩阵是一类特殊的矩阵,它在科学计算、工程问题和物理建模中有着广泛的应用。

三对角矩阵的压缩存储公式是对其特殊结构的一种有效利用,本文将深入探讨三对角矩阵的性质以及推导其压缩存储公式,帮助读者更好地理解和应用这一重要概念。

一、三对角矩阵的定义及性质三对角矩阵是指除了主对角线上的元素外,只有相邻对角线上的元素不为零的矩阵。

它具有以下的性质:1. 三对角矩阵是一种特殊的带状矩阵,具有较强的结构性质;2. 由于其大部分元素为零,因此可以采用压缩存储方式来节省存储空间;3. 在数值计算中,三对角矩阵往往会出现在线性方程组的求解、差分方程的离散化、特征值计算等问题中,因此了解其压缩存储公式对于优化算法和提高计算效率具有重要意义。

二、三对角矩阵的压缩存储公式推导三对角矩阵的压缩存储公式是一种基于其特殊结构的存储方式,可以将其非零元素存储在一个更小的数组中,从而节省存储空间和提高计算效率。

下面我们将对三对角矩阵的压缩存储公式进行推导。

假设我们有一个n阶的三对角矩阵A,其一般形式如下:\[ A = \begin{pmatrix} a_1 & b_1 & 0 & 0 & \cdots & \cdots & 0 \\ c_1 & a_2 & b_2 & 0 & \cdots & \cdots & 0 \\ 0 & c_2 & a_3& b_3 & 0 & \cdots & 0 \\ \vdots & \vdots & \ddots & \ddots & \ddots & \vdots & \vdots \\ 0 & \cdots & \cdots & c_{n-2} &a_{n-1} & b_{n-1} & 0 \\ 0 & \cdots & \cdots & \cdots & c_{n-1} & a_n \end{pmatrix} \]为了压缩存储这个矩阵,我们可以使用两个数组来存储非零元素,一个数组存储矩阵的对角线上的元素,另一个数组存储矩阵相邻对角线上的元素。

数据结构(数组和广义表)习题与答案

数据结构(数组和广义表)习题与答案

1、以行序优先顺序存储数组A[5][5];假定A[0][0]的地址为1000, 每个元素占4个字节,下标变量A[4][3]的地址是____。

A.1069B.1092C.1023D.1046正确答案:B2、数组a[1..6][1..5] (无0行0列)以列序优先顺序存储,第一个元素a[1][1]的地址为1000,每个元素占2个存储单元,则a[3][4]的地址是____。

A.1040B.1026C.1046D.1038正确答案:A3、设有一个5行4列的矩阵A,采用行序优先存储方式,A[0][0]为第一个元素,其存储地址为1000,A[2][2]的地址为1040,则A[3][0]的地址为_________。

A.1048B.1024C.1096D.1060正确答案:A4、设有一个10行10列的矩阵A,采用行序优先存储方式,存储全部数据需要400个字节的空间。

如果A[0][0]为第一个元素,其存储地址为1000,则A[3][6]的地址为_________。

A.1036B.1144C.1014D.10565、设有一个10行10列的矩阵A,采用行序优先存储方式。

如果A[0][0]为第一个元素,其存储地址为1000,A[2][3]的存储地址为1069,则存储一个元素需要的单元数是_________。

A.4B.1C.2D.3正确答案:D6、不能够对数据元素进行随机访问的物理结构是_________。

A.三元组顺序表B.对称矩阵的压缩存储C.三对角矩阵的压缩存储D.数组的顺序存储正确答案:A7、对特殊矩阵采用压缩存储的目的主要是_________。

A.表达变得简单B.去掉矩阵中的多余元素C.对矩阵元素的存储变得简单D.减少不必要的存储空间正确答案:D8、对n*n的对称矩阵进行压缩存储,需要保存的数据元素的个数是_________。

A.nB.n(n+1)/2C.n2D.n(n+1)9、设10*10的对称矩阵下三角保存SA[1..55]中,其中A[1][1]保存在SA[1]中,A[5][3] 保存在SA[k]中,这里k等于_________。

稀疏矩阵及其压缩存储方法

稀疏矩阵及其压缩存储方法

稀疏矩阵及其压缩存储方法1.基本概念稀疏矩阵(SparseMatrix):是矩阵中的一种特殊情况,其非零元素的个数远小于零元素的个数。

设m行n列的矩阵含t个非零元素,则称以二维数组表示高阶的稀疏矩阵时,会产生零值元素占的空间很大且进行了很多和零值的运算的问题。

特殊矩阵:值相同的元素或0元素在矩阵中的分布有一定的规律。

如下三角阵、三对角阵、稀疏矩阵。

压缩存储:为多个值相同的元素只分配一个存储空间;对0元素不分配空间。

目的是节省大量存储空间。

n x n的矩阵一般需要n2个存储单元,当为对称矩阵时需要n(1+n)/2个单元。

2.三元组顺序表——压缩存储稀疏矩阵方法之一(顺序存储结构)三元组顺序表又称有序的双下标法,对矩阵中的每个非零元素用三个域分别表示其所在的行号、列号和元素值。

它的特点是,非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。

当矩阵中的非0元素少于1/3时即可节省存储空间。

(1)稀疏矩阵的三元组顺序表存储表示方法#define MAXSIZE 12500 // 假设非零元个数的最大值为12500typedef struct {int i, j; // 该非零元的行下标和列下标ElemType e; //非零元素的值} Triple; // 三元组类型typedef union { //共用体Triple data[MAXSIZE + 1]; // 非零元三元组表,data[0]未用int mu, nu, tu; // 矩阵的行数、列数和非零元个数} TSMatrix; // 稀疏矩阵类型(2)求转置矩阵的操作◆用常规的二维数组表示时的算法for (col=1; col<=nu; ++col)for (row=1; row<=mu; ++row)T[col][row] = M[row][col];其时间复杂度为: O(mu×nu)◆用三元组顺序表表示时的快速转置算法Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) {// 采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵TT.mu = M.nu; T.nu = M.mu; T.tu = M.tu;if (T.tu) {for (col=1; col<=M.nu; ++col) num[col] = 0;for (t=1; t<=M.tu; ++t) ++num[M.data[t].j];// 求M 中每一列所含非零元的个数cpot[1] = 1;for (col=2; col<=M.nu; ++col) cpot[col] = cpot[col-1] + num[col-1];// 求M 中每一列的第一个非零元在b.data 中的序号for (p=1; p<=M.tu; ++p) { // 转置矩阵元素col = M.data[p].j; q = cpot[col];T.data[q].i =M.data[p].j; T.data[q].j =M.data[p].i;T.data[q].e =M.data[p].e; ++cpot[col];} // for} // ifreturn OK;} // FastTransposeSMatrix其时间复杂度为: O(mu +nu)3.行逻辑联接的顺序表——压缩存储稀疏矩阵方法之二(链接存储结构)行逻辑联接的顺序表:稀疏矩阵中为了随机存取任意一行的非0元素,需要知道每一行的第一个非0元素在三元组表中的位置,因此将上述快速转置算法中指示行信息的辅助数组cpot 固定在稀疏矩阵的存储结构中,让每一行对应一个单链表,每个单链表都有一个表头指针,这种“带行链接信息”的三元组表即称为行逻辑联接的顺序表。

6.2三对角矩阵法

6.2三对角矩阵法

2
150
305.4.
3
150
319.3
4
150
333.2
5
150
347.0
V2=150 mol/h
平衡常数:
按(6-12)~(6-15)计算常数 A、B、C、D, 得到方程组的矩阵(6-16)的形式:
⎡−150
⎢ ⎢
100
⎢0
⎢ ⎢
0
⎢⎣ 0
244.5 − 344.5
100 0 0
0 325.5 525.5 200
j
Bi, j = −[Vj+1 + ∑ (Fm −Um −Wm ) −V1 + U j + (Vj +Wj )Ki, j ] m=1
Ci, j = Vj+1Ki, j+1 1 ≤ j ≤ N -1
Di, j = −Fj zi, j 1≤ j ≤ N
(6-12)
1≤ j ≤ N (6-13) (6-14) (6-15)
⎥⎢VN−1⎥ ⎢ γ N−2 ⎥
⎢⎣
αN-1 βN-1⎥⎦⎢⎣ VN ⎥⎦ ⎢⎣ γ N−1 ⎥⎦
(6-33)
逐级求解的通式:
Vj
=
γ
j−1
−α jVj−1 β j-1
⑥迭代终止标准:
(6-36)
ε T = ∑[(T j ) k − (T j ) k−1 ]2 ≤ 0.01N
(6-37) (6-38)
对于具有三对角线矩阵的线性方程组, 常用追赶法(或称托玛斯法)求解。该
法仍属高斯消元法。变换(6-16)第一行(式):
j=1:
Bi,1xi,1 + Ci,1xi,2 = Di,1 ,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三对角矩阵的压缩存储公式推导
三对角矩阵是指除了主对角线上的元素,只有主对角线上方和下方相邻的两条对角线上的元素不为零,其余元素都为零的矩阵。

压缩存储是指将矩阵中的非零元素存储在一个一维数组中。

假设一个n阶的三对角矩阵为A,可以表示为:
A = [a[i][j]] 0 < |i - j| <= 1
其中a[i][j]为矩阵A的元素。

我们需要将A压缩存储到长度为n的一维数组B中。

推导压缩存储的过程如下:
1. 创建一个长度为3n-2的一维数组B,用于存储矩阵A的非
零元素。

2. 遍历矩阵A中的每个元素a[i][j],判断其在数组B中的位置。

a) 当 i = j 时,a[i][j]为主对角线上的元素,存储在数组B的
第i个位置。

b) 当 i = j+1 时,a[i][j]为主对角线上方的元素,存储在数组
B的第n-1+j个位置。

c) 当 i = j-1 时,a[i][j]为主对角线下方的元素,存储在数组
B的第2n-1+j个位置。

3. 遍历完成后,数组B中存储了矩阵A的所有非零元素。

即可得到三对角矩阵A的压缩存储公式:
B[i] = a[i][i] (i = 1, 2, ..., n)
B[n-1+j] = a[j+1][j] (j = 0, 1, ..., n-2)
B[2n-1+j] = a[j][j+1] (j = 0, 1, ..., n-2)
其中B为存储矩阵A的一维数组。

相关文档
最新文档