MATLAB-2-5稀疏矩阵

1. 稀疏矩阵

零元素个数多于非零元素个数的矩阵

2. 矩阵的存储方式

a. 完全存储方式

将矩阵的全部元素按列存储

b. 稀疏存储方式

只存储矩阵非零元素的值及其位置,即行号和列号。
矩阵元素的存储顺序不改变,也是按列的顺序进行存储。
%区分稀疏矩阵和稀疏存储方式概念、
%当矩阵的规模很大时,采用稀疏存储方式可以大大节约存储空间。

c. 完全存储方式与稀疏存储方式间转化

A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A
S=full(A):将矩阵A转化为完全存储方式的矩阵S

>> A=sparse(eye(5))
A =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
>> B=full(A)
B =
     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1
>> whos
  Name      Size            Bytes  Class     Attributes
  A         5x5               128  double    sparse    
  B         5x5               200  double   
%先用完全存储方式,再转换为稀疏存储方式

d. 直接建立稀疏存储矩阵

sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵
sparse(u,v,S):u,v,S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i),v(i)分别是S(i)的行和列下标。

>> A=sparse([1,2,2],[3,2,1],[3,1,2])
A =
   (2,1)        2
   (2,2)        1
   (1,3)        3
>> B=full(A)
B =
     0     0     3
     2     1     0

B=spconvert(A):将A描述的稀疏矩阵,转化为稀疏存储矩阵
A为一个m×3或m×4的矩阵,其每行表示一个非零元素,m是非零元素的个数。
A(i,1)表示第i个非零元素所在的行
A(i,2)表示第i个非零元素所在的列
A(i,3)表示第i个非零元素值的实部
A(i,4)表示第i个非零元素值的虚部
若矩阵的全部元素都是实数,则无须第四列。
%sparse(u,v,S)参数为向量,B=spconvert(A)参数为矩阵,注意区分

>> A=[2,2,1;2,1,-1;2,4,3]
A =
     2     2     1
     2     1    -1
     2     4     3
>> B=spconvert(A)
B =
   (2,1)       -1
   (2,2)        1
   (2,4)        3
%每行元素代表:行数,列数,元素值

e. 单位矩阵的稀疏存储

speye(m,n):产生一个m×n的稀疏存储单位矩阵

>> speye(3)
ans =
   (1,1)        1
   (2,2)        1
   (3,3)        1

e.g.求下列三对角线性方程组的解。
在这里插入图片描述

>> kf1=[1;1;2;1;0];
>> k0=[2;4;6;6;1];
>> k1=[0;3;1;4;2];
>> B=[kf1,k0,k1];
>> d=[-1;0;1];
%d为非零对角线位置
%kf1为带状稀疏矩阵B的第-1条非零对角线
>> A=spdiags(B,d,5,5);
%产生稀疏存储矩阵A
>> f=[0;3;2;1;5];
%常数项矩阵为f
>> x=A\f
x =
   -0.1667
    0.1111
    2.7222
   -3.6111
    8.6111

e.g.产生5阶稀疏存储单位矩阵A,至少三种方法。

>> A1=sparse([1,2,3,4,5],[1,2,3,4,5],[1,1,1,1,1])
A1 =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
>> A5=sparse(eye(5))
A5 =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
%最容易理解
>> A=[1,1,1;2,2,1;3,3,1;4,4,1;5,5,1];
>> A2=spconvert(A1)
A2 =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
>> A3=spdiags([1;1;1;1;1],[0],5,5)
A3 =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
>> A4=speye(5)
A4 =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
%最简单

3. 稀疏矩阵的两种基本类型

a. 无规则结构的稀疏矩阵

b. 有规则结构的稀疏矩阵

i. 带状稀疏矩阵

所有非零元素集中在对角线上的矩阵
**[B,d]=spdiags(A):**从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B,非零对角线的位置向量d
**A=spdiags(B,d,m,n):**产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵的所有非零对角线的位置。
%两个函数的参数不同,可以看作互逆,只是A=spdiags(B,d,m,n)产生的A是稀疏存储形式矩阵,[B,d]=spdiags(A)里的A是完全存储形式

>> A=[11 0 0 12 0 0; 0 21 0 0 22 0; 0 0 31 0 0 32; 41 0 0 42 0 0; 0 51 0 0 52 0];
>> [B,d]=spdiags(A)
%A为带状稀疏矩阵【A也可以是普通矩阵】
B =
     0    11    12
     0    21    22
     0    31    32
    41    42     0
    51    52     0
d =
    -3
     0
     3
>> C=spdiags(B,d,5,6)
C =
   (1,1)       11
   (4,1)       41
   (2,2)       21
   (5,2)       51
   (3,3)       31
   (1,4)       12
   (4,4)       42
   (2,5)       22
   (5,5)       52
   (3,6)       32

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值