系列文章目录
第1章 MATLAB R2018b环境
第2章 MATLAB 数值计算
第3章 MATLAB符号计算
第4章 MATLAB计算的可视化和GUI设计
第5章 MATLAB程序设计
第6章 线性控制系统分析与设计
第7章 Simulink仿真环境
第8章 MATLAB高级应用
第二章、MATLAB数值计算
前言
1个矩阵中如果包含的很多元素值为0,则此矩阵可以只存储少量的非0元素,这个矩阵称为稀疏矩阵(Sparse Matrix)。稀疏矩阵在工程上的应用相当广泛,如电路、图学、有限元素法及偏微分方程等,都会用到稀疏矩阵。
9、稀疏矩阵
9.1稀疏矩阵的建立
在MATLAB中矩阵的存储方式有两种:全元素矩阵和稀疏矩阵。通常,编程时使用的都是全元素矩阵,即矩阵中的每个元素都需要存储,如果每一个元素都是double数据类型(占8字节),则1个mxn 的全元素矩阵,所占用的内存空间是8xmxn(字节)。但在稀疏矩阵中,由于大部分元素都是0,因此只需存储非零元素的下标和元素值,这种特殊的存储方式可以节省大量的存储空间和避免不必要的运算。
全元素矩阵经过计算仍然是全元素矩阵,因此稀疏矩阵的创建需要由用户专门定义。
1.使用sparse函数产生稀疏矩阵
sparse 函数用于创建稀疏矩阵,或将1个全元素矩阵直接转换成为稀疏矩阵。
语法:
sparse(i,j.s,m,n) %直接创建稀疏矩阵
sparse§ %由全元素矩阵P转换为稀疏矩阵
说明: i、j是非0元素的行、列下标;s是非0元素所形成的向量;m、n是s的行、列维数,可省略; i、j、s都是长度相同的向量,生成矩阵的元素s(k)下标分别是i(k)和 j(k);P为全元素矩阵。
程序说明: sparse的前两个参数向量分别表示稀疏矩阵元素的行和列下标,第一个元素的下标是(1,1),第三个参数向量是稀疏矩阵元素,第一个元素1。
与sparse函数相反,full 函数可将稀疏矩阵转变为全元素矩阵。
语法:
full§ %将稀疏矩阵P转变为全元素矩阵中
2.用spdiags函数创建稀疏矩阵
spdiags 函数用对角线元素构建1个稀疏矩阵。
语法:
spdiags(D,k,m,n)
说明:矩阵D的每一列代表矩阵的对角线向量;k 代表对角线的位置(0代表主对角线,-1代表向下位移一单位的次对角线,1代表向上位移一单位的次对角线,依此类推);m、n分别代表矩阵的行、列维数。
程序分析:可以看出矩阵s的3个非零对角线向量分别是D的3个列向量。主对角线为“321";向上位移一个单位的次对角线为“241”,但其中“2”被移掉了;向上位移两个单位的次对角线为“994”,但其中“99”都被移掉了。
9.2稀疏矩阵的存储空间
在MATLAB中,稀疏矩阵中只存储每个非零元素的下标和元素值。
可以使用whos命令查看内存大小。
MATLAB提供了如下几个返回稀疏矩阵元素个数的函数。nnz:可返回稀疏矩阵的非零元素个数。nnz(b)
nonzeros:返回1个包含所有非零元素的列向量。nonzeros(b)
nzmax:返回最大的非零元素个数,当nnz>nzmax时,MATLAB会动态调整以便增加内存给nzmax,用于储存新增的非零元素。nzmax(b)
9.3稀疏矩阵的运算
MATLAB适用于针对全元素矩阵设计的运算与函数,也都适用于稀疏矩阵的运算。稀疏矩阵的标准数学运算按照以下原则。
(1)如果函数的输入参数是向量或标量,输出的参数为矩阵,则输出参数为全元素矩阵。
(2)如果函数的输入参数是矩阵,输出的参数也为矩阵,则输出参数以输入矩阵的方式表示,即当输入参数为稀疏矩阵时,输出参数也是稀疏矩阵。
(3)如果二元运算的2个操作数中1个是全元素矩阵,另1个是稀疏矩阵,则对于“+”、“_”、“”、“\”的运算结果为全元素矩阵,而“&”、“.”的运算结果为稀疏矩阵。
(4)用“cat”函数或“[ ]”连接混合矩阵将产生稀疏矩阵。
另外,稀疏矩阵的运算主要有:矩阵的排列和重排、矩阵分解、解线性方程组和计算特征值及奇异值。可以在MATLAB命令窗口中输入“help sparfun”命令或使用MATLAB的帮助导航/浏览器窗口,以取得稀疏矩阵的帮助信息。
总结
本次学习的主要内容为稀疏矩阵的建立:
1.使用sparse函数产生稀疏矩阵
2.用spdiags函数创建稀疏矩阵
同时也需要掌握稀疏矩阵的运算规则以及稀疏矩阵的存储规则。
文章内容来自MATLAB实用教程/郑阿奇主编,ISBN 978-7-121-29138-8。若有侵权行为,请联系我自行删除。