- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
09.稀疏矩阵.pdf
下载
第9章 稀 疏 矩 阵
在许多问题中提到了含有大量 0元素的矩阵,这样的矩阵称为稀疏矩阵。比如求解普通或
者部分微分方程的数值解。为了节省存储空间和计算时间, M AT L A B考虑到矩阵的稀疏性,
在对它运算时有特殊的命令。
9.1 矩阵为什么稀疏
一个稀疏矩阵中有许多元素等于零,这便于矩阵的计算和保存。如果 M AT L A B把一个矩
阵当作稀疏矩阵,那么只需在 m×3的矩阵中存储m个非零项。第 1列是行下标,第 2列是列下
标,第3列是非零元素值,不必保存零元素。如果存储一个浮点数要 8个字节,存储每个下标
要4个字节,那么整个矩阵在内存中存储需要 1 6×m个字节。
■ 例9 . 1
A = e y e ( 1 0 0 0 ) ;
得到一个1 0 0 0×1 0 0 0的单位矩阵,存储它需要 8 Mb空间。如果使用命令:
B = s p e y e ( 1 0 0 0 ) ;
用一个 1 0 0 0×3的矩阵来代表,每行包含有一个行下标、列下标和元素本身。现在只需
1 6 K b的空间就可以存储 1 0 0 0×1 0 0 0的单位矩阵,它只需要满单位矩阵的 0 . 2 %存储空间。对于
许多的广义矩阵也可这样来作。
稀疏矩阵的计算速度更快,因为 M AT L A B只对非零元素进行操作,这是稀疏矩阵的第二
个突出的优点。
■ 例9 . 2
假设矩阵A、B和例9 . 1中的矩阵一样。计算 2*A需要一百万次的浮点运算,而计算 2*B只
需要2 0 0 0次浮点运算。
因为M AT L A B不能自动创建稀疏矩阵,所以要用特殊的命令来得到稀疏矩阵,在下一节
中将给出这些命令。前面章节中的算术和逻辑运算都适用于稀疏矩阵。
9.2 创建和转换稀疏矩阵
在M AT L A B中,用命令s p a r s e来创建一个稀疏矩阵。
命令集8 7 创建稀疏矩阵
s p a r s e ( A ) 由非零元素和下标建立稀疏矩阵 A。如果A已是一个稀疏
矩阵,则返回A本身。
s p a r s e ( m , n ) 生成一个m×n的所有元素都是0的稀疏矩阵。
■
■
s p a r s e ( u , v , a ) 生成一个由长度相同的向量 u,v和a定义的稀疏矩阵。其
中u和v是整数向量, a是一个实数或者复数向量。 (u i, v i)
对应值 a i,如果 a中有零元素,则将这个元素排除在外。
稀疏矩阵的大小为m a x (u)×m a x (v)。
s p a r s e ( u , v , a , m , n ) 生成一个m×n的稀疏矩阵,(ui, vi)对应值ai。向量u,v和a
必须长度相同。
s p a r s e ( u , v , a , m , n , 生成一个m×n的含有n z m a x个非零元素的稀疏矩阵。 (ui,
n z m a x ) vi)对应值ai。n z m a x的值必须大于或者等于向量u和v的长度。
f i n d ( x ) 返回向量 x中非零元素的下标。如果 x=X是一个矩阵,那
么X的向量就作为一个长向量来考虑。
[ u , v ] = f i n d ( A ) 返回矩阵A中非零元素的下标。
[ u , v , s ] = f i n d ( A ) 返回矩阵A中非零元素的下标。用向量s中元素的值及u和v中
相应的下标,实际上就是向量u、v和s作为命令s p a r s e的参数。
s p c o n v e r t ( D ) 将一个有三列的矩阵转换成一个稀疏矩阵。 D中的第1列作
为行的下标,第2列作为列的下标,最后一列作为元素值。
而且可以使用命令 f u l l将稀疏矩阵转换成一个满矩阵。
命令集8 8 转换成满矩阵
f u l l ( S ) 将稀疏矩阵S转换成一个满矩阵。
■ 例9 . 3
(a) 创建一个5×5的单位矩阵:
A = e y e ( 5 )
将矩阵A转换成稀疏矩阵B:
(b) 假设M AT L A B中给出如下的向量:
这样就有了行向量,但是也可使用列向量。运行命令S m a t r i x = s p a r s e ( i n d 1 , i n d 2 , n u m b e r ),
结果为:
1 2 4 M ATLAB 5 手册
下载
其中有去掉了两个零元素。将这个矩阵转换成满矩阵,输入:
F u l l m a t r i x = f u l l ( S m a t r i x )
得到的结果为:
注意,稀疏矩阵和得到的满矩阵的大小是分别是由 i n d 1和i n d 2中最大元素值确定的,即
使相应的值是零,并且在列出的稀疏矩阵中去掉这个值。
输入命令w h o s可得到:
可以看出虽然两个矩阵的大小相同,但是其中稀疏
文档评论(0)