MATLAB稀疏矩阵

本文介绍了MATLAB中矩阵的两种存储方式:完全存储方式和稀疏存储方式。详细解释了如何通过MATLAB内置函数实现两种存储方式之间的转换,包括使用`sparse`函数创建稀疏矩阵、`full`函数将稀疏矩阵转换为完全存储方式,以及通过`spdiags`函数处理带状(对角)稀疏矩阵。
摘要由CSDN通过智能技术生成
1.1.1矩阵存储方式

MATLAB的矩阵有两种存储方式,完全存储方式和稀疏存储方式
1.完全存储方式
将矩阵的全部元素按列存储,矩阵中的全部零元素也存储到矩阵中。
2.稀疏存储方式
仅存储矩阵所有的非零元素的值及其位置,即行号和列号,显然这对于具有大量零元素的稀疏矩阵来说是十分有效的。

      1 0 0 0
A= 0 5 0 0
      2 0 0 7

是具有稀疏矩阵特征的矩阵,其完全存储方式是按列存储的全部12个元素
1,0,2,0,5,0,0,0,0,0,0,7
其稀疏存储方式如下:
(1,1),1,(3,1),2,(2,2),5,(3,4),7
括号内为元素的行列位置,后面为元素值。
当矩阵非常的“稀疏”时,会有效的节省存储空间。

1.1.2稀疏存储方式的产生

1.将完全存储方式转化为稀疏存储方式
A=sparse(S);将S矩阵转换为稀疏矩阵A;
sparse(m,n);产生m*n的所有元素都为0的稀疏矩阵
sparse(u,v,S);S为建立系数矩阵的非零元素,u(i),v(i)分别为S(i)的行和列下标,S,u,v为等长向量。
[u,v,S]=find(A);返回矩阵A中非零元素的下标和元素,返回值可以作为sparse(u,v,S);的参数
full(A);返回和稀疏存储方式A对应的完全存储方式。
例如
X=[2,0,0,0,0;0,0,0,0,0;0,0,0,5,0;0,1,0,0,-1;0,0,0,0,-5]
A=sparse(X)
A=
     (1,1)    2
     (4,2)    1
     (3,4)    5
     (4,5)    -1
     (5,5)    -5
A就是X的稀疏存储方式。

2.产生稀疏存储矩阵
sparse可以讲完全存储方式转换为稀疏存储方式,那么,当使用稀疏矩阵时,要先产生完全存储方式的矩阵,然后再转换,这显然是不可取的,MATLAB有自己产生稀疏矩阵的函数spconvert:
B=spconvert(A);A为一个m*3或m*4的矩阵,A的每一列的意义分别为:
(i,1)第i非零元素所在行
(i,2)第i非零元素所在列
(i,3)第i非零元素的实部
(i,4)第i非零元素的虚部


3.带状(对角)稀疏矩阵

函数 spdiags

格式 [B,d] = spdiags(A) %从矩阵A中提取所有非零对角元素,这些元素保存在矩阵B中,向量d表示非零元素的对角线位置。

B = spdiags(A,d)     %从A中提取由d指定的对角线元素,并存放在B中。

A = spdiags(B,d,A) %用B中的列替换A中由d指定的对角线元素,输出稀疏矩阵。

A = spdiags(B,d,m,n) %产生一个m×n稀疏矩阵A,其元素是B中的列元素放

在由d指定的对角线位置上。

例1

>>A = [11   0    13    0

            0    22    0    24

            0    0     33    0

           41   0      0    44

           0    52    0     0

           0    0     63   0

            0   0      0    74];

>>[B,d] = spdiags(A)

B =

    41    11     0

    52    22    0

    63    33    13

    74    44    24

d =

    -3      %表示B的第1列元素在A中主对角线下方第3条对角线上

     0      %表示B的第2列在A的主对角线上

     2      %表示B的第3列在A的主对角线上方第2条对角线上

例1

>> B=[1 2 3 4

      5 6 7 8

      9 10 11 12

      13 14 15 16];

>> d=[-2 0 1 3];

>> A=spdiags(B,d,4,4);

>> full(A)

ans =

     2     7     0    16

     0     6    11     0

     1     0    10    15

     0     5     0    14


4.单位矩阵的稀疏矩阵

speye(m,n);产生m*n的稀疏存储单位阵。

遍历

>> A = [0 1 0; 2 0 0; 1 0 1]
A =
0 1 0
2 0 0
1 0 1
>> B = sparse(A)
B =
(2,1) 2
(3,1) 1
(1,2) 1
(3,3) 1
>> C = find(B)
C =
2
3
4
9
>>
for i = C
B(i)
end
ans =
(1,1) 2
(2,1) 1
(3,1) 1
(4,1) 1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值