稀疏矩阵

合集下载

稀疏矩阵的特征

稀疏矩阵的特征

稀疏矩阵的特征稀疏矩阵:揭示信息世界中的隐藏规律在信息时代的浪潮下,海量数据的快速传输和处理成为了当下亟待解决的难题。

而稀疏矩阵作为一种重要的数据表示方式,为我们破解信息世界中的隐藏规律提供了有力的工具。

本文将从稀疏矩阵的定义、应用和优势三个方面来探讨其在信息领域的价值。

一、稀疏矩阵的定义稀疏矩阵是指在一个二维矩阵中,大部分元素为0,只有少数非0元素的矩阵。

相对于稠密矩阵,稀疏矩阵具有更高的存储效率和计算效率。

常见的表示稀疏矩阵的方法有三元组表示法、行压缩存储和列压缩存储等。

二、稀疏矩阵的应用1. 图像处理在图像处理中,稀疏矩阵可以用来表示图像的一个重要特征——纹理。

通过提取图像的纹理信息,可以实现图像的分割、识别和重构等操作。

例如,在医学图像的分析中,可以利用稀疏矩阵来提取肿瘤的纹理特征,从而实现对肿瘤的自动检测和诊断。

2. 自然语言处理在自然语言处理中,稀疏矩阵可以用来表示文本的词袋模型。

将文本中的每个词作为矩阵的列,将每个文本样本表示为一个向量,其中非零元素表示该词在文本中的出现次数或权重。

通过对文本矩阵进行聚类、分类和关键词提取等操作,可以实现文本的自动分类和信息检索。

3. 推荐系统在推荐系统中,稀疏矩阵可以用来表示用户和物品之间的关系。

将用户和物品分别表示为矩阵的行和列,将用户对物品的评分作为矩阵中的非零元素。

通过对稀疏矩阵进行矩阵分解和推荐算法,可以实现个性化推荐和精准营销。

三、稀疏矩阵的优势1. 存储效率高由于稀疏矩阵中大部分元素为0,只有少数非零元素,所以可以采用压缩存储的方式,节省存储空间。

相比于稠密矩阵,稀疏矩阵可以节省大量的存储资源。

2. 计算效率高由于稀疏矩阵中大部分元素为0,所以在进行矩阵运算时可以忽略这些0元素,减少了计算量。

对于大规模矩阵的计算,稀疏矩阵的计算效率远高于稠密矩阵。

3. 适用于高维数据在高维数据分析中,数据的维度往往非常高,导致数据稀疏性增加。

而稀疏矩阵可以很好地处理高维稀疏数据,减少了计算和存储的复杂度。

稀疏矩阵加法乘法

稀疏矩阵加法乘法

稀疏矩阵加法乘法稀疏矩阵是指其中大部分元素都是0的矩阵,而只有极小部分元素为非0值。

与密集矩阵相比,稀疏矩阵具有更高的压缩率以及更快的计算速度,因此在大型数据处理和机器学习等领域中得到了广泛应用。

稀疏矩阵加法和乘法是稀疏矩阵计算中最基本的两个操作。

一、稀疏矩阵的表示方法基于稀疏矩阵的特殊性质,我们通常使用三元组(TUPLES)实现稀疏矩阵的存储。

三元组存储方式将一个i * j的稀疏矩阵表示为三个一维数组,分别存储非零元素的值,行坐标和列坐标。

例如,一个矩阵:1 0 00 2 00 0 3通过三元组存储方式可以表示为:value = [1, 2, 3]row = [0, 1, 2]col = [0, 1, 2]值为1的元素位于第0行第0列,值为2的元素位于第1行第1列,值为3的元素位于第2行第2列。

二、稀疏矩阵的加法两个稀疏矩阵相加的操作可以通过对两个矩阵的三元组进行合并,对于重复的元素,则将它们的值相加。

例如,对于两个矩阵A和B:A:1 0 00 2 00 0 3B:1 0 00 2 00 0 3则可以通过以下方式对A和B进行加法操作:value = [1+1, 2+2, 3+3]row = [0, 1, 2]col = [0, 1, 2]即结果矩阵为:2 0 00 4 00 0 6三、稀疏矩阵的乘法稀疏矩阵乘法的实现比较复杂,首先需要明确一点,即两个矩阵相乘的结果不一定是稀疏矩阵。

我们可以使用两种常见的算法实现稀疏矩阵的乘法:COO算法和CSR算法。

1. COO算法COO算法也称坐标格式算法,其基本思路是将两个矩阵的三元组转换成一个三元组,然后依次进行乘法运算,最后将结果累加得到最终结果的三元组。

例如,对于两个矩阵A和B:A:1 23 4B:5 67 8则可以按照以下步骤进行乘法操作:①将矩阵A表示为三元组形式:value_A = [1,2,3,4]row_A = [0,0,1,1]col_A = [0,1,0,1]②将矩阵B表示为三元组形式:value_B = [5,6,7,8]row_B = [0,0,1,1]col_B = [0,1,0,1]③对A和B的三元组进行合并得到三元组C:value_C = [1,2,3,4,5,6,7,8]row_C = [0,0,1,1,0,0,1,1]col_C = [0,1,0,1,1,0,1,0]其中row_C和col_C表示的是C中每个元素对应的行数和列数。

稀疏矩阵的运算

稀疏矩阵的运算

稀疏矩阵的运算稀疏矩阵的运算稀疏矩阵,顾名思义,就是矩阵中空值(0)的比例很大,而实际值(非0)的比例很小的矩阵。

它最大的特点就是,当矩阵的规模增大时,仍然可以保持较低的计算量。

在运算时,因为稀疏矩阵中的0值没有意义,所以对其做运算也没有意义。

所以,在运算中需要把稀疏矩阵转换成一维数组,即只保留其有意义的值。

下面介绍几种常用的稀疏矩阵运算技术。

1.索引表(Indextable)这是一种最简单的稀疏矩阵运算技术,在使用索引表时,需要用一个额外的一维数组来保存有意义的值的位置,而把矩阵本身变成一维数组,进行运算。

例如矩阵A:1 0 0 0 00 0 0 4 00 0 0 0 00 3 0 0 00 0 7 0 0这样的矩阵,可以使用一个一维数组来保存其有意义的值及其位置,例如:[1,(0,0); 4,(1,3); 3,(3,1); 7,(2,2)]这样,我们就可以用简单的一维数组代替复杂的二维矩阵,从而加快稀疏矩阵的运算。

2.矩阵向量乘法(Matrix-Vector Multiplication)这是一种最常用的稀疏矩阵运算技术,把一个大的稀疏矩阵A和一个向量(一维数组)V作乘法,得到一个新的向量C,即:C = A * V对于上面的实例,可以用以下方式求出C:C[0] = 1 * V[0] + 0 * V[1] + 0 * V[2] + 0 * V[3] + 0 * V[4] C[1] = 0 * V[0] + 0 * V[1] + 0 * V[2] + 4 * V[3] + 0 * V[4] C[2] = 0 * V[0] + 0 * V[1] + 0 * V[2] + 0 * V[3] + 7 * V[4] C[3] = 0 * V[0] + 3 * V[1] + 0 * V[2] + 0 * V[3] + 0 * V[4] 3.矩阵乘法(Matrix Multiplication)矩阵乘法也是一种常用的稀疏矩阵运算技术,把两个大的稀疏矩阵A和B相乘,得到一个新的稀疏矩阵C,即:C = A * B以上就是稀疏矩阵运算的一些常用技术,稀疏矩阵也可以用于解决很多复杂的运算问题,例如机器学习和深度学习等。

稀疏矩阵名词解释

稀疏矩阵名词解释

稀疏矩阵名词解释稀疏矩阵是指元素大多数为零的矩阵,它在许多实际应用中具有重要的作用。

本文将介绍稀疏矩阵的概念、性质和应用,以及与之相关的节点导纳矩阵和支路阻抗矩阵。

下面是本店铺为大家精心编写的4篇《稀疏矩阵名词解释》,供大家借鉴与参考,希望对大家有所帮助。

《稀疏矩阵名词解释》篇1一、稀疏矩阵的概念稀疏矩阵是指元素大多数为零的矩阵。

在稀疏矩阵中,只有少数元素是非零的,其余元素均为零。

稀疏矩阵通常用斯密斯 - 马克斯韦尔方程表示,其中零元素占据了大部分,非零元素则代表了某些特定的关系。

二、稀疏矩阵的性质稀疏矩阵具有以下性质:1. 稀疏矩阵的行数和列数很大,但非零元素的数量却很少。

2. 稀疏矩阵的存储空间比密排矩阵小得多,因此可以节省存储空间。

3. 稀疏矩阵的运算速度比密排矩阵快,尤其是在大规模矩阵运算时更为明显。

三、稀疏矩阵的应用稀疏矩阵在许多实际应用中具有重要的作用,如下所述:1. 电路分析:在电路分析中,稀疏矩阵被广泛用于求解电路中的电压和电流。

由于电路中存在大量的零元素,因此使用稀疏矩阵可以大大减少计算量。

2. 数据压缩:在数据压缩中,稀疏矩阵被用于压缩图像和音频数据。

由于图像和音频数据通常具有大量的零元素,因此使用稀疏矩阵可以大大减少数据量。

3. 线性代数:在线性代数中,稀疏矩阵被用于求解线性方程组。

由于稀疏矩阵的特殊结构,可以使用一些高效的算法来求解线性方程组。

四、节点导纳矩阵和支路阻抗矩阵与稀疏矩阵相关的两个重要概念是节点导纳矩阵和支路阻抗矩阵。

节点导纳矩阵是一个规模为 (n-1) 的平方矩阵,其中对角线元素为自导纳,即与节点直接连接的支路上的导纳之和。

互导纳是直接连接两个节点的各支路导纳之和的相反数。

支路阻抗矩阵是一个规模为 b 的平方矩阵,其中包含了每个支路的阻抗。

在纯阻抗网络中,支路阻抗矩阵的对角线元素为自阻抗,非对角线元素为互阻抗。

综上所述,稀疏矩阵是一种具有重要应用价值的矩阵,它可以用于电路分析、数据压缩、线性代数等领域。

稀疏矩阵 存储方法

稀疏矩阵 存储方法

稀疏矩阵存储方法稀疏矩阵是指矩阵中绝大部分元素为0的矩阵。

在实际问题中,往往会遇到大规模的稀疏矩阵,对于这种矩阵的存储需要考虑如何高效地使用内存空间。

下面将介绍几种常见的稀疏矩阵存储方法。

1. 链接存储法:在这种方法中,我们可以使用一个链表来存储非零元素的位置和值。

具体做法是每个非零元素都使用一个结点来表示,结点中包括行、列和对应的元素值。

这样,对于每个非零元素,我们只需要包含它的位置信息和值即可,并且可以通过遍历链表来获取所有的非零元素。

2. 顺序表存储法:在顺序表存储法中,我们使用两个数组来保存非零元素的位置和值。

一个一维数组存储所有非零元素的位置,另一个一维数组存储对应的值。

在这种方法中,我们需要额外的辅助空间来保存非零元素的位置信息,但是对于获取元素值的操作会更加高效,因为我们可以直接通过索引来访问元素。

3. 排序顺序表存储法:与顺序表存储法类似,不同之处在于我们需要对非零元素的位置进行排序。

一种常见的排序方法是按照行优先顺序进行排序。

这样做的好处是在矩阵乘法运算等操作中,我们可以利用行优先的顺序,减少对非零元素的访问次数,从而提高运算效率。

4. 压缩存储法:在压缩存储法中,我们通过记录每行非零元素的数量以及每个非零元素的位置和值来表示稀疏矩阵。

具体做法是使用三个一维数组分别存储每行非零元素的数量、非零元素的列索引和对应的值。

这种方法可以极大地节省存储空间,并且对于访问非零元素的操作也很高效。

以上介绍的是几种常见的稀疏矩阵存储方法,它们各自的特点和适用场景也不同。

选择何种存储方法应该根据具体应用的需求来确定。

例如,在求解线性方程组或稀疏矩阵乘法运算时,可以选择压缩存储法;而在矩阵的插入、删除操作较为频繁时,可以考虑使用链表存储法。

总之,在实际应用中,我们需要根据问题的特点和存储空间的要求,综合考虑各种因素来选择最合适的存储方法。

稀疏矩阵

稀疏矩阵

37
12
1
17
4-6…… Nhomakorabeaa11
Sa[1] Sa[2] Sa[3] Sa[4] Sa[5] Sa[6] Sa[7] Sa[8] a21 a22 a31 a32 a33 a41 a42 a43
2.对角矩阵 压缩的方法:只存储非零元 =
10
5 0 0 0 0
3
7 12 0 0 0
效率分析:时间复杂度为O(M.nu×M.tu),简写成 O(nu×tu)。当tu~nu×mu时,时间复杂度为 O(nu2×tu)。 (2)按照M.data中三元组的次序进行转置,并将转置后 的三元组置入b中恰当的位置。这种转置方法称为快速 转置。时间复杂度为Onu+tu)。
• (1)按照b.data中三元组的次序依次在a.data中找到相应 的三元组进行转置。换句话说,按照矩阵M的列序来 进行转置。为了找到M的每一列中所有的非零元素, 需要对其三元组表a.data从第一行起整个扫描一遍,由 于M.data是以M的行序为主序来存放每个非零元的, 由此得到的恰是T.data应有的顺序。具体算法描述如 下
0
87 8 -6 0 0
0
0 32 20 33 0
A
6 ´6
| 0 0 | | 0 0 | 10 0 | -3 71 | | 81 0 |
0 0
三对角矩阵
二、稀疏矩阵(Sparse Matrices) m×n矩阵的稀疏因子:δ=t/(m×n) t表示非零元的个数。 t远远小于 m×n(δ=0.05<<1)的矩阵叫稀疏矩阵。
A6 6
1 5 37 = 17 22 45
5 1 12 4 0 17

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

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

稀疏矩阵及其压缩存储方法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 固定在稀疏矩阵的存储结构中,让每一行对应一个单链表,每个单链表都有一个表头指针,这种“带行链接信息”的三元组表即称为行逻辑联接的顺序表。

稀疏矩阵PPT课件

稀疏矩阵PPT课件

02
03
优化存储结构
并行计算
采用稀疏矩阵的压缩存储方式, 减少存储空间占用,提高数据访 问速度。
利用多核处理器和分布式计算资 源,实现并行计算,提高计算速 度。
线性系统求解优化
预处理技术
采用预处理技术,如共轭梯度法、双共轭梯度法 等,减少迭代次数和计算量。
迭代算法
选择适合的迭代算法,如雅可比迭代法、高斯-赛 德尔迭代法等,提高求解速度。
研究现状
随着大数据和计算技术的发展,稀疏矩阵在许多领域如机器学习、图像处理、数值计算 等得到了广泛应用。目前,稀疏矩阵的研究主要集中在算法优化、存储压缩和并行计算
等方面。
挑战
尽管取得了一些进展,但稀疏矩阵的研究仍面临诸多挑战。例如,如何更有效地压缩存 储稀疏矩阵以提高计算效率,如何设计更高效的算法处理大规模稀疏矩阵等问题仍需进
稀疏矩阵PPT课件
• 稀疏矩阵简介 • 稀疏矩阵的压缩方法 • 稀疏矩阵的运算优化 • 稀疏矩阵库介绍 • 稀疏矩阵应用案例 • 总结与展望
01
稀疏矩阵简介
定义与特性
定义
稀疏矩阵是一种矩阵,其中大部分元 素为零。
特性
稀疏矩阵具有稀疏性,即矩阵中非零 元素的数量远小于矩阵元素总数。
稀疏矩阵的应用场景
MATLAB中的稀疏矩阵处理
MATLAB是一个广泛使用的科学 计算软件,支持丰富的矩阵和向 量操作、数值计算和科学计算等
功能。
MATLAB提供了多种工具箱和函 数用于处理稀疏矩阵,如 spalloc、spdiags等。
MATLAB的语法简单易懂,易于 学习和使用,同时具有高效的性
能和可视化能力。
05
02
稀疏矩阵的压缩方法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[3]《数据结构》(C语言版),刘大有,高等教育出版社,2004.
[4]《Data Structure with C++》,William Ford.William Topp,清华大学出版社,2003.
4、课程设计工作进度计划
第1天完成方案设计与程序框图
第2、3天编写程序代码
第4天程序调试分析和结果
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名: 年 月 日
摘要
本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘等操作,最后输出运算后的结果。考虑到难易程度,先用三元组实现稀疏矩阵的输入,输出,及其转置,相加,相乘等操作的方法,再在十字链表下实现。程序通过调试运行,结果与预期一样,初步实现了设计目标。
//循环输出矩阵
for(arow=1;arow<=A->mu;arow++)
{
printf("\n");//矩阵换行
for(col=1;col<=A->nu;col++)
{
if(A->data[i].i==arow&&A->data[i].j==col&&i<=A->tu)//判断是否是非零元素
printf("%-4d",A->data[i++].e);//输出非零元素
2.1需求分析
根据题目要求应提供键盘式菜单实现功能选择,还应提供信息的输入操作,可以在程序中提供矩阵相加,转置矩阵和矩阵输出等操作。本模块要求设计函数建立稀疏矩阵并初始化,包括在三元组结构下和十字链表结构下。首先要定义两种不同的结构体类型,在创建稀疏矩阵时,需要设计两个不同的函数分别在三元组和十字链表下创建稀疏矩阵,在输入出现错误时,能够对错误进行判别处理,初始化稀疏矩阵都为空值,特别注意在十字链表下,对变量进行动态的地址分配。在设计输出稀疏矩阵的值的函数时,也要针对两种不同的情况,分别编制函数,才能准确的输出稀疏矩阵。在对稀疏矩阵
R->tu=0;//先将非零元个数设置为零
R->mu=A->mu;//设置R的行数
R->nu=A->nu;//设置R的列数
if(A->mu!=B->mu || A->nu!=B->nu){//判断矩阵是否合法
printf("******你输入的矩阵不能相加,请重新开始输入合格的矩阵\n*****");
else printf("%-4d",z); //输出零元素
}
}
printf("\n");
}
4.3 两矩阵相加
void ADD(RLSMatrix *A,RLSMatrix *B,RLSMatrix *R) //两矩阵加法实现函数
{
int x=1;//控制列下标
int y=1;//控制行下标
int z=1;//记录R中的非零元素的个数
进行初始化及输出值时,均只输出非零元素的值和它所在的所在行及所在列。
2.2总体设计
根据上面的需求分析,可以将这个系统的设计分为1矩阵相加,2 矩阵转置,3 构体(包括两个结构体),第一个结构体包括行列下标和非零元素的值,第二个结构体包括非零元素个数的最大值与矩阵的行列值。
02
科学实践、调研
7
通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
R->data[z].e=A->data[x].e+B->data[y].e;
x++; y++;
}
else if(A->data[x].i==i&&A->data[x].j==j){//判断A是否是非零项
R->data[z].e=A->data[x].e; x++;
}
else if(B->data[y].i==i&&B->data[y].j==j){//判断B是否是非零项
T.data[q].e=M->data[p].e;
++q;
}
}
}
printf("转置矩阵是:\n");
Printf(&T);//通过Printf函数将转置矩阵输出
}
/*void FTS(RLSMatrix *M,RLSMatrix T){//转置矩阵函数
if((A->mu==1&&A->nu==1)&&(B->mu==1&&B->nu==1)){//判断矩阵是否合法
exit(0);
}
if((A->mu<=1&&A->nu<=1)&&(B->mu<=1&&B->nu<=1)){
printf("你输入的A,B矩阵都不对\n");
exit(0);
}else if(A->mu<=1&&A->nu<=1){
printf("你输入的A矩阵不对\n");
exit(0);
}else if(B->mu <=1&&B->nu <=1){
printf("你输入的A,B矩阵都不对\n");
exit(0);
}else if(A->mu==1&&A->nu==1){
printf("你输入的A矩阵不对\n");
exit(0);
}else {
printf("你输入的B矩阵不对\n");
exit(0);
#define MAXRC 100
typedef struct{//定义非零元素的结构体的行,列下标与非零元素的值
int i,j;//行,列下标
int e; //非零元素的值
}Triple;//定义结构体变量
typedef struct//定义矩阵的行,列,及非零元素的个数的结构体
{
Triple data[MAXSIZE+1];//定义非零元素的最大个数
R->data[z].e=B->data[y].e; y++;
}
else {
R->data[z].e=0;//非零项赋值为零
}
z++;
}
R->tu=z;
printf("矩阵A为:\n"); //输出矩阵A
Printf(A);
printf("矩阵B为:\n"); //输出矩阵B
Printf(B);
printf("矩阵相加结果为:\n"); //输出相加矩阵
实现矩阵的输入,并用并采用三元组表示。
实现两个矩阵(A,B)的加法。
实现对任意一个矩阵(A,B)的转置。
可以输出任意矩阵(A,B,R)。
1.3设计涉及知识
注意合理地设计三元组或者十字链表,结合稀疏矩阵的压缩存储方式和特点,将每一功能模块以函数形式分别实现。在此基础上用C/C++实现其操作。
2
以三元组、十字链表为存储形式,分别实现两个稀疏矩阵的加法运算、两个稀疏矩阵的乘法运算,以及对任意稀疏矩阵的转置运算。稀疏矩阵要求可为键盘录入的任意矩阵。
本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。稀疏矩阵采用三元组和十字链表表示,并在两种不同的存储结构下,求两个稀疏矩阵A和B的和为矩阵R,并输出R;求出A的转置为矩,输R。
1
1.1题目名称:稀疏矩阵的操作
1.2设计要求
printf("你输入的B矩阵不对\n");
exit(0);
}
for(int i=1;i<=A->mu;i++)//循环赋值
for(int j=1;j<=A->nu;j++){
R->data[z].i=i;
R->data[z].j=j;
if(A->data[x].i==i&&A->data[x].j==j&&B->data[y].i==i&&B->data[y].j==j){//判断A,B是否都是非零项
exit(0);
}
if(T.tu){//看矩阵是否有非零项
相关文档
最新文档