MATLAB如何使用spdiags函数提取对角线或生成带状稀疏矩阵
【语法说明】
B= spdiags (A):函数将m×n 稀疏矩阵A 中的所有非零对角元素取出并保存于矩阵B中。对角线中的元素个数k=min(m,n), B是k×p矩阵,p是矩阵A的非零对角线的条数。
[B,d]=spdiags(A):向量 d 表示对角线位置,0 表示主对角线,−1表示主对角线下方第一条对角线,1表示主对角线上方第一条对角线,以此类推。
B=spdiags(A,d):从A中抽取由数字d指定的对角线元素,保存于B中。
A=spdiags(B,d,A):将A中的部分对角线用B中的列替换,d指定了被替换的对角线位置,输出的矩阵A是稀疏矩阵。
A=spdiags(B,d,m,n):生成一个m×n稀疏矩阵,用矩阵B中的列作为矩阵的对角线元素,对角线的位置由向量d指定。
【功能介绍】与满矩阵的diag函数类似,spdiags函数用于从矩阵中提取对角线,或给定对角线元素生成稀疏矩阵。
【实例】从稀疏矩阵中抽取对角线元素。
>> a=[0,0,0,2,0;3,0,4,0,1;0,0,0,5,0;9,0,0,0,0]
a =
0 0 0 2 0
3 0 4 0 1
0 0 0 5 0
9 0 0 0 0
>> [B,d]=spdiags(a) % 从矩阵a中抽取对角线,d为对角线位置
B =
0 0 0 2
0 3 4 1
0 0 5 0
9 0 0 0
d =
-3
-1
1
3
【实例讲解】d的长度与B的列数相同,表示相应的列在原矩阵a中的位置。
【实例】由对角线元素生成稀疏矩阵。
>> rng(2)
>> B=randi(5,4,3)
B =
3 3 2
1 2 2
3 2 4
3 4 3
>> A=full(spdiags(B,[1,2,3],4,4)) % 生成 4*4稀疏矩阵,取B的列作为对角线元素
A =
0 1 2 3
0 0 3 4
0 0 0 3
0 0 0 0
>> A=full(spdiags(B,[1,2,3],4,5)) % 生成 4*5稀疏矩阵,取B的列作为对角线元素
A =
0 3 3 2 0
0 0 1 2 2
0 0 0 3 2
0 0 0 0 3
【实例讲解】生成稀疏矩阵的规则是,假设稀疏矩阵A为m×n矩阵,如果 m≥n,则从矩阵 B 中抽取列时,如果需要舍弃部分元素,会将列开头的元素舍弃;如果m<n,则从矩阵B中抽取列元素时,如果需要舍弃部分元素,会将列末尾的元素舍弃。