资源描述:
《matlab求解稀疏矩阵》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、稀疏矩阵介绍稀疏矩阵对于一个n阶矩阵,通常需要n2的存储空间,当n很大时,进行矩阵运算时会占用大量的内存空间和运算时间。Matlab支持稀疏矩阵,只存储矩阵的非零元素,这在矩阵的存储空间和计算时间上都有很大的优点。在许多实际问题中遇到的大规模矩阵中通常含有大量0元素,这样的矩阵称为稀疏矩阵。稀疏矩阵及其算法,就是不存储那些“0”元素,也不对它们进行操作,从而节省内存空间和计算时间;稀疏矩阵计算的复杂性和代价仅仅取决于稀疏矩阵的非零元素的个数。稀疏矩阵介绍稀疏矩阵的存储在Matlab中有两种存储矩阵的方式:全元素存储(满矩阵)和稀疏存储(
2、稀疏矩阵)。设一个稀疏矩阵有nnz个非零元素,Matlab需要三个数组存储实型的稀疏矩阵,第一个数组存储所有的非零元素,这个数组的长度为nnz,第二个数组存储非零元素所对应的行标,长度也是nnz,第三个数组存储指向每一列开始的指针,这个数组的长度为n。稀疏存储:Matlab仅存储那些非零元素及其下标。稀疏矩阵介绍创建稀疏矩阵稀疏矩阵的创建需要用户来决定。用户需要判断在矩阵中是否有大量的零元素,是否需要采用稀疏存储技术。矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总的元素个数。对于低密度的矩阵,采用稀疏方式存储是一种很好的选择。如果某个
3、矩阵以稀疏方式存储,则它参与运算的结果也将以稀疏方式存储,除非运算本身是稀疏性消失。稀疏矩阵介绍满矩阵与稀疏矩阵之间的转化例:S=sparse(A)A=full(S)A=[0050;3030;0001;0430]S=sparse(A)whos稀疏矩阵介绍直接创建稀疏矩阵例:S=sparse(i,j,s,m,n)其中i和j分别是矩阵非零元素的行和列指标向量,s是非零元素值向量,m,n分别是矩阵的行数和列数。S2=sparse([122344],[313423],...[533143],4,4)稀疏矩阵介绍从文件中创建稀疏矩阵例:设文本文件
4、T.txt中有三列内容,第一列是一些行下标,第二列是列下标,第三列是非零元素值。135213233341424433利用load和spconvert函数可以从包含一系列下标和非零元素的文本文件中输入稀疏矩阵。loadT.txtS=spconvert(T)稀疏矩阵介绍稀疏带状矩阵的创建例:S=spdiags(B,d,m,n)其中m和n分别是矩阵的行数和列数;d是长度为p的整数向量,它指定矩阵S的对角线位置;B是全元素矩阵,用来给定S对角线位置上的元素,行数为min(m,n),列数为p。B=rand(4,2);S3=spdiags(B,[0
5、1],4,4)稀疏矩阵介绍其它稀疏矩阵创建函数S=speye(m,n)S=speye(size(A))%hasthesamesizeasAR=sprand(S)%RhasthesamesparsitystructureasSS=sprand(m,n,density)%random,m-by-n,sparsematrixwith%approximatelydensity*m*nuniformly%distributednonzeroentriesS=buchy%一个内置的稀疏矩阵(邻接矩阵)稀疏矩阵介绍稀疏矩阵的查看通常的存储信息非零
6、元素信息。whosnnz(S)%返回非零元素的个数nonzeros(S)%返回列向量,包含所有的非零元素nzmax(S)%返回分配给稀疏矩阵中非零项的总的存储空间查看稀疏矩阵的形状spy(S)稀疏矩阵介绍find函数与稀疏矩阵[i,j,s]=find(S)[i,j]=find(S)返回S中所有非零元素的下标和数值,S可以是稀疏矩阵或满矩阵。稀疏矩阵介绍稀疏矩阵的运算Matlab中对满矩阵的运算和函数同样可用在稀疏矩阵中。结果是稀疏矩阵还是满矩阵,取决于运算符或者函数及下列几个原则:当函数用一个矩阵作为输入参数,输出参数为一个标量或者一个
7、给定大小的向量时,输出参数的格式总是返回一个满矩阵形式,如命令size等。当函数用一个标量或者一个向量作为输入参数,输出参数为一个矩阵时,输出参数的格式也总是返回一个满矩阵,如命令eye,rand等。还有一些特殊的命令可以得到稀疏矩阵,如命令speye,sprand等。稀疏矩阵运算对于单参数的其他函数来说,通常返回的结果和参数的形式是一样的,如diag、max等。(sparse和full是例外)对于双参数的运算或者函数来说,如果两个参数的形式一样,那么也返回同样形式的结果。在两个参数形式不一样的情况下,除非运算的需要,均以满矩阵的形式给
8、出结果。例:A=eye(4);B=speye(4);S1=A+B;S2=A*B;S3=AB;S4=A.*B;whos稀疏矩阵运算在赋值语句的右侧的子矩阵索引保留参数的存储形式,即:对于T=S(i,j),