在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的用户指南与联机帮助。