1、稀疏矩阵定义及存储
稀疏矩阵即含0较多的矩阵。
MATLAB为了节省内存空间,对与实数稀疏矩阵采用3个内部数组来保存非零元素及其对应的位置。
对与复数稀疏矩阵,采用第4个内部数组保存非0复数的虚部。
说明:M_full和M_sparse其实是同一个矩阵,但是内存却相差了一万倍,可怕。
2、稀疏矩阵的创建
MATLAB不会自己创建稀疏矩阵。一般由用户根据商来确定是否要采用稀疏矩阵。
商也叫密度:非零个数比矩阵总体元素数。密度越小,用稀疏矩阵越有利。
spares()将矩阵变成稀疏矩阵,full()则将稀疏矩阵变成一般矩阵。
2.1 直接创建稀疏矩阵
使用spares(i,j,s,m,n)函数,i,j分别是行列向量,s为非零值向量,m,n为行列数。
2.2 对角元素中创建稀疏矩阵
函数spdiags(B,d,m,n),B矩阵中的数作为值,d向量作为指定m*n矩阵的对角线
如: b=[1 2 3;4 5 6;7 8 9;10 11 12]
spdiags(b,[-3 0 2],7,4)
2.3 从外部文件导入稀疏矩阵
1.用文本创建一个三列或四列(复数)的.dat文件
2.将该文件放在当前MATLAB工作目录下
3.load name.dat %将文件导入
4.使用函数spconvert(name),将其转换为稀疏矩阵。
3 稀疏矩阵运算原则
4 稀疏矩阵的交换与重新排序
稀疏矩阵的行交换与列交换有以下两种方法
1、有交换矩阵P,对稀疏矩阵S进行行行交换,可以表示为PS,进行列交换可以表示为PS’
2、有一个交换矢量p,p为一个矢量(1到n的自然数的排列,如p=[1 2 4 3]),对稀疏矩阵的行行交换可以表示为S(p,:),列交换可以表示为S(:,p)。
也可以对矩阵S的某一行进行列交换(S(n,p)),或对某一列进行行行交换(S(p,n))。注意返回的是向量。