第十二讲:Matlab稀疏矩阵介绍
MATLAB数值计算功能(向量、矩阵、数组、稀疏矩阵)-推荐下载

加减法:矩阵各个元素之间的加减法,必须是同型矩阵
matrix=[1 1 1 1;2,2,2,2;3,3,3,3;4 4 4 4]
m1=20*matrix
m2=m1+matrix
m3=[11 22 33;1 2 3;4 5 6]
m4=matrix-m1
m5=m3+m1
%报错,非同型矩阵
乘法:用*,左矩阵的列数需等于右矩阵的行数
A=[1 2 3];
B=[7 8 9];
C=[A 4 ones(1,2) B]
(2)、等差元素向量生成源自%列向量%a1 行向量,a4 列向量
冒号生成法:Vec=Vec0:n:Vecn,其中 Vec 表示生成的向量,Vec0 表示第一个元素,n 表示
步长,Vecn 表示最后一个元素
使用 linespace 函数:Vec=linespace(Vec0,n,Vecn),其中 Vec 表示生成的向量,Vec0 表示第
x2=[1 2 3 4]
a=dot(x1,x2)
sum(x1.*x2)
%还可以采用 sum 函数计算向量的点积
叉积:cross 函数,注意向量维数的一致性(由几何意义可知,向量维数只能为 3)
x1=[11 22 33 44]
x2=[1 2 3 4]
x3=cross(x1,x2)
x1=[11 22 33]
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
matlab 稀疏 cholesky 分解

MATLAB稀疏Cholesky分解1. 介绍MATLAB是一种常用的数学软件,其在矩阵运算和线性代数方面有着强大的功能。
稀疏矩阵是指大部分元素为零的矩阵,而Cholesky分解是一种用于解决对称正定矩阵的线性方程组的方法。
本文将探讨MATLAB中稀疏Cholesky分解的原理、使用方法以及其在实际应用中的意义。
2. 稀疏矩阵与Cholesky分解稀疏矩阵是指矩阵中大部分元素为零,只有少数非零元素。
在实际问题中,许多矩阵具有这种特性,比如网络数据传输矩阵、有限元法中的刚度矩阵等。
对于这种稀疏矩阵,传统的直接方法(如高斯消去法)效率较低,因此需要使用特殊的方法进行计算。
Cholesky分解是一种有效的方法,特别适用于对称正定矩阵。
对于一个对称正定矩阵A,Cholesky分解将该矩阵表示为A=LL^T,其中L为下三角矩阵。
与传统的LU分解相比,Cholesky分解能够减少一半的计算量,因此在求解线性方程组时具有更高的效率和稳定性。
3. MATLAB中的稀疏Cholesky分解在MATLAB中,稀疏矩阵可以使用sparse函数进行定义。
而Cholesky分解则可以通过chol函数进行求解。
对于稀疏矩阵A,可以使用[ch, p] = chol(A, 'lower')来进行Cholesky分解,其中ch为下三角矩阵,p为置换矩阵。
通过Cholesky分解后,可以得到A=ch*ch^T。
MATLAB中对稀疏矩阵进行Cholesky分解的函数使用非常方便,能够高效地处理大规模稀疏矩阵的计算问题。
MATLAB还提供了一系列的稀疏矩阵运算函数,如sparse乘法、转置、求逆等,为稀疏矩阵的计算提供了强大的支持。
4. 实际应用稀疏矩阵和Cholesky分解在实际应用中有着广泛的意义。
以金融衍生品定价为例,通常会涉及大规模的稀疏矩阵和线性方程组的求解。
Cholesky分解能够极大地提高计算效率,为复杂金融问题的求解提供了重要支持。
matlab05-稀疏矩阵

MATLAB 程式設計進階篇:稀疏矩陣
5-4 稀疏矩陣的運算
MATLAB 針對完全矩陣設計的運算與函式,也都適 用於稀疏矩陣,而且輸出也是大部分以稀疏矩陣的 方式來表示 若計算過程包含稀疏及完全矩陣,則計算結果的表 示方式就依情況而變,其規則可見 MATLAB 線上輔 助說明
MATLAB 程式設計進階篇:稀疏矩陣
稀疏矩陣範例-1(I)
sparse 指令可將一個完全矩陣轉換成稀疏矩陣
範例5-1:sparse01.m
clear all; A = [2 0 0 0; 0 0 0 1; 0 4 0 0]; S = sparse(A) S= (1,1) (3,2) (2,4) 2 4 1 % 清除所有的變數 % 完全矩陣 % 將完全矩陣 A 轉換成稀疏矩陣 S
MATLAB 程式設計進階篇 稀疏矩陣
張智星 (Roger Jang) jang@ /jang 清大資工系 多媒體檢索實驗室
MATLAB 程式設計進階篇:稀疏矩陣
5-1 稀疏矩陣的建立
根據元素的值,MATLAB 的矩陣可分為兩種 :
完全矩陣(Full Matrix)
稀疏矩陣的觀看與圖示
矩陣 west0479 的維度 是 479*479,但是只包 含 1887 個非零元素, 因此此矩陣的密度只有 1887/(479*479) = 0.0082
MATLAB 程式設計進階篇:稀疏矩陣
稀疏矩陣的觀看與圖示
稀疏矩陣特別適用於表 示一個「無向圖」 (Undirected Graph) 的「鄰近矩陣」 (Adjacency Matrix), 簡單地說,若某圖的第 i 和第 j 個節點有直線 連接,則其相對應的鄰 近矩陣在第 i 列、第 j 行的元素值為 1,其他 元素值則為零
Matlab稀疏矩阵函数

Matlab稀疏矩阵函数eye 单位矩阵zeros 全零矩阵ones 全1矩阵rand 均匀分布随机阵genmarkov ⽣成随机Markov矩阵linspace 线性等分向量logspace 对数等分向量logm 矩阵对数运算cumprod 矩阵元素累计乘cumsum 矩阵元素累计和toeplitz Toeplitz矩阵disp 显⽰矩阵和⽂字内容length 确定向量的长度size 确定矩阵的维数diag 创建对⾓矩阵或抽取对⾓向量find 找出⾮零元素1的下标matrix 矩阵变维rot90 矩阵逆时针旋转90度sub2ind 全下标转换为单下标tril 抽取下三⾓阵triu 抽取上三⾓阵conj 共轭矩阵companion 伴随矩阵det ⾏列式的值norm 矩阵或向量范数nnz 矩阵中⾮零元素的个数null 清空向量或矩阵中的某个元素orth 正交基rank 矩阵秩trace 矩阵迹cond 矩阵条件数inv 矩阵的逆rcond 逆矩阵条件数lu LU分解或⾼斯消元法pinv 伪逆qr QR分解givens Givens变换linsolve 求解线性⽅程lyap Lyapunov⽅程hess Hessenberg矩阵poly 特征多项式schur Schur分解expm 矩阵指数expm1 矩阵指数的Pade逼近expm2 ⽤泰勒级数求矩阵指数expm3 通过特征值和特征向量求矩阵指数funm 计算⼀般矩阵函数logm 矩阵对数sqrtm 矩阵平⽅根spec 矩阵特征值gspec 矩阵束特征值bdiag 块矩阵,⼴义特征向量eigenmar- 正则化Markov特征kov 向量pbig 特征空间投影svd 奇异值分解sva 奇异值分解近似cumprod 元素累计积cumsum 元素累计和hist 统计频数直⽅图max 最⼤值min 最⼩值mean 平均值median 中值prod 元素积sort 由⼤到⼩排序std 标准差sum 元素和trapz 梯形数值积分corr 求相关系数或⽅差sparse 稀疏矩阵adj2sp 邻接矩阵转换为稀疏矩阵full 稀疏矩阵转换为全矩阵mtlb_sparse 将scilab稀疏矩阵转换为matlab稀疏矩阵格式sp2adj 将稀疏矩阵转换为邻接矩阵speye 稀疏矩阵⽅式单位矩阵sprand 稀疏矩阵⽅式随机矩阵spzeros 稀疏矩阵⽅式全零阵lufact 稀疏矩阵LU分解lusolve 稀疏矩阵⽅程求解spchol 稀疏矩阵Cholesky分解关于稀疏矩阵的Matlab命令集,供查阅参考。
MATLAB程序设计进阶篇-稀疏矩阵

1.节省内存储存空间
2.节省许多不必要的运算
稀疏矩阵范例-1(I)
sparse 指令可将一个完全矩阵转换成稀疏矩阵
范例5-1:sparse01.m
clear all;
% 清除所有的变量
A = [2 0 0 0; 0 0 0 1; 0 4 0 0]; % 完全矩阵
% 加载二进制制档案 west0479.mat % 观看稀疏矩阵的非零元素分布情况
稀疏矩阵的观看与图示
矩阵 west0479 的维度 是 479*479,但是只包 含 1887 个非零元素, 因此此矩阵的密度只有 1887/(479*479) = 0.0082
稀疏矩阵的观看与图示
稀疏矩阵特别适用于表 示一个「无向图」 (Undirected Graph) 的「邻近矩阵」 (Adjacency Matrix), 简单地说,若某图的第 i 和第 j 个节点有直线 连接,则其相对应的邻 近矩阵在第 i 列、第 j 行的元素值为 1,其他 元素值则为零
xy = [0 1; 1 2; 1 0; 2 0; 2 2; 3 1]; % 每一个列向量是一组 (x, y) 坐标
gplot(A, xy, '-o')
% 画出无向图(Und代表以实线('-')及圆圈('o')来作图
稀疏矩阵无向图
稀疏矩阵有趣的例子-1(I)
稀疏矩阵有趣的例子-1(II)
画出抽象图形(I)
Treeplot指令来画出一棵计算机图学中的树
范例5-8:treePlot01.m
nodes = [0 1 2 2 4 4 4 1 8 8 10 10 11 11 11 11]; treeplot(nodes);
稀疏矩阵名词解释

稀疏矩阵名词解释稀疏矩阵是指元素大多数为零的矩阵,它在许多实际应用中具有重要的作用。
本文将介绍稀疏矩阵的概念、性质和应用,以及与之相关的节点导纳矩阵和支路阻抗矩阵。
下面是本店铺为大家精心编写的4篇《稀疏矩阵名词解释》,供大家借鉴与参考,希望对大家有所帮助。
《稀疏矩阵名词解释》篇1一、稀疏矩阵的概念稀疏矩阵是指元素大多数为零的矩阵。
在稀疏矩阵中,只有少数元素是非零的,其余元素均为零。
稀疏矩阵通常用斯密斯 - 马克斯韦尔方程表示,其中零元素占据了大部分,非零元素则代表了某些特定的关系。
二、稀疏矩阵的性质稀疏矩阵具有以下性质:1. 稀疏矩阵的行数和列数很大,但非零元素的数量却很少。
2. 稀疏矩阵的存储空间比密排矩阵小得多,因此可以节省存储空间。
3. 稀疏矩阵的运算速度比密排矩阵快,尤其是在大规模矩阵运算时更为明显。
三、稀疏矩阵的应用稀疏矩阵在许多实际应用中具有重要的作用,如下所述:1. 电路分析:在电路分析中,稀疏矩阵被广泛用于求解电路中的电压和电流。
由于电路中存在大量的零元素,因此使用稀疏矩阵可以大大减少计算量。
2. 数据压缩:在数据压缩中,稀疏矩阵被用于压缩图像和音频数据。
由于图像和音频数据通常具有大量的零元素,因此使用稀疏矩阵可以大大减少数据量。
3. 线性代数:在线性代数中,稀疏矩阵被用于求解线性方程组。
由于稀疏矩阵的特殊结构,可以使用一些高效的算法来求解线性方程组。
四、节点导纳矩阵和支路阻抗矩阵与稀疏矩阵相关的两个重要概念是节点导纳矩阵和支路阻抗矩阵。
节点导纳矩阵是一个规模为 (n-1) 的平方矩阵,其中对角线元素为自导纳,即与节点直接连接的支路上的导纳之和。
互导纳是直接连接两个节点的各支路导纳之和的相反数。
支路阻抗矩阵是一个规模为 b 的平方矩阵,其中包含了每个支路的阻抗。
在纯阻抗网络中,支路阻抗矩阵的对角线元素为自阻抗,非对角线元素为互阻抗。
综上所述,稀疏矩阵是一种具有重要应用价值的矩阵,它可以用于电路分析、数据压缩、线性代数等领域。
稀疏矩阵——精选推荐

稀疏矩阵稀疏矩阵的定义 对于那些零元素数⽬远远多于⾮零元素数⽬,并且⾮零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。
⼈们⽆法给出稀疏矩阵的确切定义,⼀般都只是凭个⼈的直觉来理解这个概念,即矩阵中⾮零元素的个数远远⼩于矩阵元素的总数,并且⾮零元素没有分布规律。
稀疏矩阵的压缩存储 由于稀疏矩阵中⾮零元素较少,零元素较多,因此可以采⽤只存储⾮零元素的⽅法来进⾏压缩存储。
由于⾮零元素分布没有任何规律,所以在进⾏压缩存储的时侯需要存储⾮零元素值的同时还要存储⾮零元素在矩阵中的位置,即⾮零元素所在的⾏号和列号,也就是在存储某个元素⽐如aij的值的同时,还需要存储该元素所在的⾏号i和它的列号j,这样就构成了⼀个三元组(i,j,a[i][j])的线性表。
三元组可以采⽤顺序表⽰⽅法,也可以采⽤链式表⽰⽅法,这样就产⽣了对稀疏矩阵的不同压缩存储⽅式。
稀疏矩阵的存储⽅式 1.稀疏矩阵的三元组表⽰ 若把稀疏矩阵的三元组线性表按顺序存储结构存储,则称为稀疏矩阵的三元组顺序表。
顺序表中除了存储三元组外,还应该存储矩阵⾏数、列数和总的⾮零元素数⽬,这样才能唯⼀的确定⼀个矩阵。
typedef struct Triple{int row,col,e;}Triple;typedef struct TSMarix{Triple data[max+1];//data是⾮零元素三元组表,data[0]未⽤int m,n,len;//m:矩阵的⾏数,n:矩阵的列数,len:⾮零元素的个数}TSMarix; 稀疏矩阵的转置 ⾏列递增转置法---算法思想: 采⽤按照被转置矩阵三元组表A的序列(即转置后三元组表B中的⾏序)递增的顺序进⾏转置,并以此送⼊转置后矩阵的三元组表B中,这样⼀来,转置矩阵的三元组表B恰好是以“⾏序为主序”的 这种⽅法中,转置后的三元组表B仍按⾏序递增存放,必须多次扫描被转置矩阵的三元组表A,以保证被转置矩阵递增形式进⾏转置,因此要通过双重循环来完成#include <stdio.h>#include <stdlib.h>#define max 3typedef struct Triple{int row,col,e;}Triple;typedef struct TSMarix{Triple data[max+1];//data是⾮零元素三元组表,data[0]未⽤int m,n,len;//m:矩阵的⾏数,n:矩阵的列数,len:⾮零元素的个数}TSMarix;void CreateTSMarix(TSMarix *T){int i;printf("请输⼊矩阵的⾏数,列数,⾮零元素个数:\n") ;scanf("%d%d%d",&T->m,&T->n,&T->len);if(T->m<1||T->n<1||T->len<1||T->len>=max){printf("输⼊的数据有误!\n");exit(1);}printf("请输⼊⾮零元素的⾏下标,列下标,值(空格分开输⼊):\n");for(i=1;i<T->len+1;i++)scanf("%d%d%d",&T->data[i].row,&T->data[i].col,&T->data[i].e);}void TransposeTSMarix(TSMarix T,TSMarix *B)//B保存转置后的矩阵{B->n=T.m;//转置后B的列存储的T的⾏B->m=T.n;//转置后B的⾏存储的T的列B->len=T.len;//B的元素的个数和T的元素的个数⼀样不变int i,j,k;if(B->len>0){j=1;//转置后B元素中的下标for(k=1;k<=T.m;k++)//采⽤被转置矩阵的列序即转置后矩阵的⾏序增序排列{for(i=1;i<=T.len;i++){if(T.data[i].col==k)//从头到尾扫描表A,寻找col值为k的三元组进⾏转置{B->data[j].row=T.data[i].col;B->data[j].col=T.data[i].row;B->data[j].e=T.data[i].e;j++;}}}}}void Print(TSMarix T){int i;printf("元素的⾏下标,列下标,值为:\n");for(i=1;i<=T.len;i++){printf("\t%d\t%d\t%d\n",T.data[i].row,T.data[i].col,T.data[i].e);}}int main(){TSMarix T,B;printf("创建三元组表:\n");CreateTSMarix(&T);printf("输出三元组表:\n");Print(T);TransposeTSMarix(T,&B);printf("转置后的矩阵B为:\n");Print(B);return0;} ⼀次快速定位转置法---算法思想 1.待转置矩阵三元组表A每⼀列⾮零元素的总个数,即转置后矩阵三元组表B的每⼀⾏中⾮零元素的总个数 2.待转置矩阵每⼀列中第⼀个⾮零元素在三元组表B中的正确位置,即转置后矩阵每⼀⾏中的第⼀个⾮零元素在三元组表B 中的正确位置,需要增设两个数组,num[col]⽤来存放三元组表A第col列⾮零元素总个数(三元组表第col⾏⾮零元素总个数),position[col]⽤来存放转置前三元组表A中第col列(转置后三元组表B中第col⾏)中第⼀个⾮零元素在三元组表B中的存储位置(下标值)。
MATLAB矩阵求值和稀疏矩阵

MATLAB矩阵求值和稀疏矩阵⽅阵的⾏列式:det(A)矩阵线性⽆关的⾏数或列数,称为矩阵的秩。
rank(A)求3~20阶魔⽅矩阵的秩for n=3:20rank(magic(n))end矩阵的迹等于矩阵的对⾓线元素之和,也等于矩阵的特征之和。
trace(A):求矩阵的迹向量和矩阵的范数 矩阵或向量的范数⽤来度量矩阵或向量在某种意义下的长度。
(1)向量的3种常⽤范数 (1)绝对值之和 (2)平⽅和的平⽅根 (3)绝对值中最⼤的值norm(v)或norm(v,2)计算向量的2范数 norm(v,1)......1..norm(v,inf)......∞范数矩阵范数:1--范数:矩阵列元素绝对值之和的最⼤值2--范数:A矩阵的最⼤特征值的平⽅根。
∞--范数:所有矩阵⾏元素绝对值之和的最⼤值。
与向量范数⽅法相同矩阵的条件数:矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积条件数越接近1,矩阵性能越好,反之越差。
cond(A,1) 计算A的1-范数下的条件数cond(A)或cond(A,2)....2.....cond(A,inf)....∞...希尔伯特矩阵:hilb(n)矩阵的特征值与特征向量笔记打得我没脾⽓了...(感觉应该美⽩⼀下,⾃由点丑,⾃⼰能看清,哈哈嗝。
)矩阵S转稀疏矩阵存...⽅式的矩阵A:A=sparse(S)矩阵A转.....完全...S:S=full(A)(2)直接建⽴稀疏矩阵存储⽅式:sparse其他调⽤格式:sparse(m,n):⽣成mxn的素有元素都是零的稀疏矩阵sparse(u,v,s):其中u,v,s是三个等长向量。
s是要建⽴的稀缺存储矩阵的⾮零元素,u(i),v(i),分别是s(i)的⾏和列下标B=spconvert(A)A为⼀个mx3或mx4的矩阵A(i,1)表⽰第i个⾮零元素所在的⾏ A(i,2)表⽰....列A(i,3)表...的实部 A(i,4)表⽰....虚部若全为实数,则⽆需第四步A = [2, 2, 1; 2, 1, -1; 2, 4, 8];B = spconvert(A)B = (2,1) -1 (2,2) 1 (2,4) 3有规则稀疏矩阵:(A=spdiags(B,d,m,n)) 带状稀疏矩阵:[B,d] = spdiags(A) 单位稀疏矩阵:speye(m,n)返回mxn的稀疏存储单位矩阵。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建稀疏矩阵
创建稀疏矩阵
稀疏矩阵的创建需要用户来决定。用户需要判断在矩阵 稀疏矩阵的创建需要用户来决定。 中是否有大量的零元素,是否需要采用稀疏存储技术。 中是否有大量的零元素,是否需要采用稀疏存储技术。 如果某个矩阵以稀疏方式存储,则它参与运算的结果也将 如果某个矩阵以稀疏方式存储, 以稀疏方式存储,除非运算本身使得稀疏性消失。 以稀疏方式存储,除非运算本身使得稀疏性消失。 矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总 矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总 密度 的元素个数。对于低密度的矩阵, 的元素个数。对于低密度的矩阵,采用稀疏方式存储是一 种很好的选择。 种很好的选择。
例: B=rand(4,2);
S3=spdiags(B,[0 1],4,4)
其它稀疏矩阵创建函数
其它稀疏矩阵创建函数
S=speye(m,n) S=speye(size(A)) R=sprand(S)
% R has the same sparsity structure as S
S=sprand(m,n,density)
稀疏矩阵存储
稀疏矩阵的存储
Matlab 的两种存储矩阵的方式: 的两种存储矩阵的方式: 全元素存储(满矩阵)和稀疏存储(稀疏矩阵) 全元素存储(满矩阵)和稀疏存储(稀疏矩阵) 稀疏存储:仅存储非零元素及其下标 稀疏存储:仅存储非零元素及其下标 非零元素及其 设一个m*n的稀疏矩阵有 nnz 个非零元素,Matlab 需要 的稀疏矩阵有 个非零元素, 设一个 三个数组存储实型的稀疏矩阵, 三个数组存储实型的稀疏矩阵,第一个数组存储所有的非 零元素, 零元素,这个数组的长度为 nnz,第二个数组存储非零元 , 素所对应的行标, 素所对应的行标,长度也是 nnz,第三个数组存储指向每 , 一列开始的指针, 一列开始的指针,这个数组的长度为 n。这个矩阵的存储 。 包含nnz个浮点数和 个浮点数和nnz+n个整数 个整数. 包含 个浮点数和 个整数
满矩阵与稀疏矩阵
满矩阵与稀疏矩阵之间的转化 S=sparse(A)%将以任何形式存储的矩阵转换为 将以任何形式存储的矩阵转换为 稀疏矩阵形式。 稀疏矩阵形式。 A=full(S) )%将以任何形式存储的矩阵转换为满矩 将以任何形式存储的矩阵转换为满矩
阵(全元素)形式。 全元素)形式。
例: A=[0 0 5 0; 3 0 3 0 ; 0 0 0 1; 0 4 3 0]
稀疏矩阵的运算
对于单参数的其他函数来说,通常返回的结果和参数的形 对于单参数的其他函数来说,通常返回的结果和参数的形 单参数的其他函数来说 式是一样的 。(sparse 和 full 是例外) 是例外) 式是一样的,如 diag、max 等。( 、 对于双参数的运算或者函数来说, 对于双参数的运算或者函数来说,如果两个参数的形式 双参数的运算或者函数来说 一样,那么也返回同样形式的结果。 一样,那么也返回同样形式的结果。在两个参数形式不一 样的情况下,除非运算的需要,均以满矩阵 满矩阵的形式给出结 样的情况下,除非运算的需要,均以满矩阵的形式给出结 果。
% random, m-by-n, sparse matrix with % approximately density*m*n uniformly % distributed nonzero entries
S=bucky
% 一个内置的稀疏矩阵(邻接矩阵) 一个内置的稀疏矩阵(邻接矩阵)
查看稀疏矩阵
find 函数与稀疏矩阵 [i,j,s]= find(S) [i,j]= find(S)
中所有非零元素的下标和数值, 返回 S 中所有非零元素的下标和数值,S 可以是稀疏矩 阵或满矩阵。 阵或满矩阵。
稀疏矩阵的运算
稀疏矩阵的运算
Matlab 中对满矩阵的运算和函数同样可用在稀疏矩阵中。 中对满矩阵的运算和函数同样可用在稀疏矩阵中。 结果是稀疏矩阵还是满矩阵, 结果是稀疏矩阵还是满矩阵,取决于运算符或者函数及下列 几个原则: 几个原则: 当函数用一个矩阵作为输入参数,输出参数为一个标量 当函数用一个矩阵作为输入参数,输出参数为一个标量 矩阵作为输入参数 参数为一个 或者一个给定大小的向量 向量时 或者一个给定大小的向量时,输出参数的格式总是返回一 满矩阵形式 形式, 个满矩阵形式,如命令 size 等。 当函数用一个标量或者一个向量作为输入参数,输出参 当函数用一个标量或者一个向量作为输入参数,输出参 一个标量或者一个向量作为输入参数 矩阵时 输出参数的格式也总是返回一个满矩阵 满矩阵, 数为一个矩阵 数为一个矩阵时,输出参数的格式也总是返回一个满矩阵, 如命令 eye,rand 等。还有一些特殊的命令可以得到稀疏 , 矩阵, 矩阵,如命令 speye,sprand 等。 ,
S=sparse(A) whos Full(S)
直接创建稀疏矩阵
直接创建稀疏矩阵 S=sparse(i,j,s,m,n)
分别是矩阵非零元素的行和列指标向量 指标向量, 其中 i 和 j 分别是矩阵非零元素的行和列指标向量,s 分别是矩阵的行数 行数和 是非零元素值向量,m、n 分别是矩阵的行数和列数 非零元素值向量,
带状稀疏矩阵的创建 S=spdiags(B,d,m,n)
分别是矩阵的行数和列数; 其中 m 和 n 分别是矩阵的行数和列数;d 是长度为 p 的整数向量, 的对角线位置; 的整数向量,它指定矩阵 S 的对角线位置;B 是全元素 矩阵, 对角线位置上的元素, 矩阵,用来给定 S 对角线位置上的元素,行数为 min(m,n),列数为 p 。 ,
Hale Waihona Puke 例:设文本文件 T.txt 中有三列内容,第一列是一些行下标, 中有三列内容,第一列是一些行下标,
第二列是列下标,第三列是非零元素值。 第二列是列下标,第三列是非零元素值。 1 2 2 3 4 4 3 1 3 4 2 3 5 3 3 1 4 3
load T.txt S=spconvert(T)
带状稀疏矩阵的创建
例: A=eye(4); B=speye(4); [i,j]=find(A);
S1=A(i,j); whos S1=B(i,j); whos A(i,j)=2*B(i,j); whos B(i,j)=A(i,j)^2; whos
例: S2=sparse([1 2 2 3 4 4],[3 1 3 4 2 3],...
[5 3 3 1 4 3],4,4)
利用文件创建稀疏矩阵
利用文件创建稀疏矩阵
函数可以从包含一系列下 利用 load 和 spconvert 函数可以从包含一系列下 标和非零元素的文本文件中输入稀疏矩阵 中输入稀疏矩阵。 标和非零元素的文本文件中输入稀疏矩阵。
例: A=eye(4); B=speye(4);
S1=A+B; S2=A*B; S3=A\B; S4=A.*B; whos
稀疏矩阵的运算
在赋值语句的右侧的子矩阵索引保留参数的存储形式, 在赋值语句的右侧的子矩阵索引保留参数的存储形式,即: 对于 T=S ( i, j ),若 S 是稀疏矩阵,i, j 是向量或标量,则 T , 是稀疏矩阵, 是向量或标量, 也是稀疏矩阵。 也是稀疏矩阵。 在赋值语句的左侧的子矩阵索引不会改变左侧矩阵的存储 形式。 形式。
查看稀疏矩阵
通常的存储信息 whos 非零元素信息。 非零元素信息。 nnz(S) % 返回非零元素的个数 nonzeros(S) % 返回列向量,包含所有的非零元素 返回列向量, nzmax(S) % 返回分配给稀疏矩阵中非零项的总的存储空间 查看稀疏矩阵的形状 spy(S)
find 函数与稀疏矩阵
Matlab 稀疏矩阵操作
稀疏矩阵介绍
稀疏矩阵
阶矩阵, 对于一个 n 阶矩阵,通常需要 n2 的存储空间和正比于n3 的计算时间, 很大时, 的计算时间,当 n 很大时,进行矩阵运算时会占用大量的内 存空间和运算时间。 存空间和运算时间。 在许多实际问题中遇到的大规模矩阵中通常含有大量 0 元素,这样的矩阵称为稀疏矩阵。 元素,这样的矩阵称为稀疏矩阵。 Matlab 支持稀疏矩阵,只存储矩阵的非零元素,这在矩 支持稀疏矩阵,只存储矩阵的非零元素, 阵的存储空间和计算时间上都有很大的优点。 阵的存储空间和计算时间上都有很大的优点。 稀疏矩阵及其算法: 元素, 稀疏矩阵及其算法:不存储那些 0 元素,也不对它们进行 操作,从而节省内存空间和计算时间, 操作,从而节省内存空间和计算时间,稀疏矩阵计算的复杂 性和代价仅仅取决于稀疏矩阵的非零元素的个数。 性和代价仅仅取决于稀疏矩阵的非零元素的个数。