创建稀疏矩阵

在MATLAB中,创建稀疏矩阵一般用函数sparse或函数spdiags来实现。其中,函数sparse的语法格式如下。

A=sparse(B):表示将矩阵B转化为稀疏矩阵A。

A=sparse(i,j, s,m,n,nzmax):表示生成mn大小的矩阵,其中,s为所有非零元素构成的向量,i和j为非零元素的行下标与列下标。参数中的nzmax为存储非零元素的空间,它是一个正整数,其大小一定要大于或等于非零元素的总数。

A= sparse(i,j, s,m,n):此时,参数nzmax=length(s),其他的与上同。

A= sparse(i,j, s):此时,参数m=max(i),n=max(j),nzmax=length(s),其他的与上同。

A= sparse(m,n):这是sparse([],[],[],m,n,0)的简化形式。

函数spdiags的语法格式如下。

[B,d] = spdiags(A):从矩阵A中抽取所有非零元素,形成一个稀疏对角矩阵带。d是A中所有非零元素向量。

B = spdiags(A,d):从矩阵A中抽取d指定的对角矩阵。

A = spdiags(B,d,A):用矩阵B的列代替d指定的对角矩阵。输入仍然是稀疏矩阵。

A = spdiags(B,d,m,n):生成一个mn大小的矩阵A,d是长度为p的整数向量,它指定A的对角线位置。B矩阵用来给出矩阵A的对角线元素值,其大小为min(m,n) *p。

在命令窗口中输入

code.matlab
>> a=sparse(1:8,1:8,3*ones(1,8))
a =
   (1,1)        3
   (2,2)        3
   (3,3)        3
   (4,4)        3
   (5,5)        3
   (6,6)        3
   (7,7)        3
   (8,8)        3

在命令窗口中输入

code.matlab
>> n=8;
>> e = ones(n,1);
>> A = spdiags([e -2*e e], -1:1, n, n)
A =
   (1,1)       -2
   (2,1)        1
   (1,2)        1
   (2,2)       -2
   (3,2)        1
   (2,3)        1
   (3,3)       -2
   (4,3)        1
   (3,4)        1
   (4,4)       -2
   (5,4)        1
   (4,5)        1
   (5,5)       -2
   (6,5)        1
   (5,6)        1
   (6,6)       -2
   (7,6)        1
   (6,7)        1
   (7,7)       -2
   (8,7)        1
   (7,8)        1
   (8,8)       -2

另外,MATLAB还提供了生成其他形式稀疏矩阵的函数,如表6-1所示。

表6-1 常用的稀疏矩阵

函数名 说 明
sparse 最常用的稀疏矩阵生成函数
spdiags 以对角带生成稀疏矩阵
spconvert 由外部数据输入生成稀疏矩阵
find 求出非零元素在稀疏矩阵中的索引
speye 生成稀疏单位矩阵
sprand 生成稀疏的均匀分布随机矩阵
sprandn 生成稀疏的正态分布随机矩阵
sprandsym 生成稀疏的对称随机矩阵
full 把稀疏矩阵转换为满秩矩阵

对上述函数的具体语法格式,请详见MATLAB的用户指南与联机帮助。