您的位置:首页 > 编程语言 > MATLAB

Matlab基础之稀疏矩阵

2016-09-28 16:50 381 查看
前言:

Matlab。。,好烦啊,导师乱指挥!

以后用到稀疏表示的东东,希望和大家一起学习。。

一、稀疏矩阵

在矩阵中,若数值为0的元素数目远远多于非0元素的数目时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。

二、存储方式

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.将完全存储方式转化为稀疏存储方式

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有自己产生稀疏矩阵的

1.speye(c):产生c*c单位矩阵。且该单位矩阵里有且只有c个1,其余元素均为0.

>>speye(4)

ans =

   (1,1)        1

   (2,2)        1

   (3,3)        1

   (4,4)        1

>> full(ans)

ans =

     1     0     0     0

     0     1     0     0

     0     0     1     0

     0     0     0     1

2.函数spconvert:
B=spconvert(A);A为一个m*3或m*4的矩阵,A的每一列的意义分别为:

比如:X=[2,1,1,1;2,2,2,2;3,3,5,3],执行B=spconvert(X)后:

X =

     2     1     1     1

     2     2     2     2

     3     3     5     3

B =

   (2,1)      1.0000 + 1.0000i

   (2,2)      2.0000 + 2.0000i

   (3,3)      5.0000 + 3.0000i

(i,1)第i非零元素所在行

(i,2)第i非零元素所在列

(i,3)第i非零元素的实部

(i,4)第i非零元素的虚部

四、带状稀疏存储矩阵

 example:

c=[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]

c =

    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

五、其他函数介绍

1.issparse(A):判断A是否为系数矩阵,是则返回1;

2.find(A):找出A矩阵非零元素的位置;

>> [row,col,v]=find(eye(3))

row =

     1

     2

     3

col =

     1

     2

     3

v =

     1

     1

     1

3.spy(A):画出矩阵非零数的位置图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息