第2章 MATLAB数值计算(6)

2019-08-31 19:40

语法:

reshape(p)

reshape(p,行 列 页 ……)

说明:第一个变量是待重组的数组p,后面的变量是重新生成数组的行数、列数、页数”。

【例2.18】用函数来生成多维数组。

a=[1 2;3 4]; b=[1 1;2 2];

c= cat(2,a,b) %沿着第二维连接生成数组c

c =

1 2 1 1 3 4 2 2 cat(3,a,b) %沿着第三维连接

ans(:,:,1) = 1 2 3 4 ans(:,:,2) = 1 1 2 2

repmat(a,[2 2 2]) %放置模块数组a

ans(:,:,1) =

1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 ans(:,:,2) =

1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4

reshape(c,[2 2 2]) %重组二维数组为2行2列2页的三维数组

ans(:,:,1) = 1 2 3 4 ans(:,:,2) = 1 1 2 2

2. 多维数组的标识

? 直接给出数组的维数 语法: ndims (p)

? 给出数组各维的大小

语法:

[m,n,…]=size(p) m=size(p,x)

%得出各维的大小 %得出某一维的大小

说明:p为需要得出大小的多维数组;m为行数,n为列数…;当只有一个输出变量时, x=1返回第一维(行数),x=2返回第二维(列数),以此类推。

? 返回行数或列数的最大值

语法: length(p)

说明:length(p)等价于max(size(p))。 【例2.19】得出矩阵的大小。

a=[1 2;3 4;5 6]

a =

1 2 3 4 5 6

ndims(a) %得出维数

ans = 2

size(a) %得出各维的大小

ans =

3 2

size(a,2) %得出列的大小

ans = 2

length(a) %得出最大维的大小

ans = 3

2.3稀疏矩阵

一个矩阵中如果包含很多元素值为0,则此矩阵可以只存储少量的非0元素,这个矩阵称为稀疏矩阵(Sparse Matrix)。

2.3.1稀疏矩阵的建立

稀疏矩阵大部分的元素都是0,因此只需储存非零元素的下标和元素值,这种特殊的存储方式可以节省大量的存储空间和不必要的运算。

1. 使用sparse函数产生稀疏矩阵

sparse函数用于创建稀疏矩阵,或将一个全元素矩阵直接转换成稀疏矩阵。 语法:

sparse(i,j,s,m,n) %直接创建稀疏矩阵

sparse(p) %由全元素矩阵p转换为稀疏矩阵

说明:i、j是非0元素的行、列下标;s是非0元素所形成的向量;m、n是s的行、列维数,可省略;i、j、s都是长度相同的向量,生成矩阵的元素s(k)下标分别是i(k)和j(k);p为全元素矩阵。

【例2.20】产生稀疏矩阵。

a=eye(3);

a(4,:)=[-5 -2 -3]

a =

1 0 0 0 1 0 0 0 1 -5 -2 -3

b=sparse(a) %创建稀疏矩阵

b =

(1,1) 1 (4,1) -5 (2,2) 1 (4,2) -2 (3,3) 1 (4,3) -3

c=sparse([1 4 2 4 3 4],[1 1 2 2 3 3],[1 -5 1 -2 1 -3]) %创建与b相同的稀疏矩阵

c =

(1,1) 1 (4,1) -5 (2,2) 1 (4,2) -2 (3,3) 1 (4,3) -3

与sparse函数相反,full函数可将稀疏矩阵转变为全元素矩阵。 语法:

full(p) %将稀疏矩阵p转变为全元素矩阵 【例2.20续】将稀疏矩阵转变为全元素矩阵。

full(b)

ans =

1 0 0 0 1 0 0 0 1 -5 -2 -3

2. 用spdiags函数创建稀疏矩阵

spdiags函数是用对角线元素来构建一个稀疏矩阵。 语法:

spdiags(D,k,m,n)

说明:矩阵D的每一列代表矩阵的对角线向量;k代表对角线的位置(0代表主对角线,-1代表向下位移一单位的次对角线,1代表向上位移一单位的次对角线,依此类推);m、n分别代表矩阵的行、列维数。

【例2.20续】用spdiags函数创建稀疏矩阵。

D=[3 2 9;2 4 9;1 1 4]

D =

3 2 9 2 4 9 1 1 4 d=[0 1 2];

s=spdiags(D,d,4,3) %构成4行3列的稀疏矩阵

s =

(1,1) 3 (1,2) 4 (2,2) 2 (1,3) 4 (2,3) 1 (3,3) 1 full(s)

ans =

3 4 4 0 2 1 0 0 1 0 0 0

程序分析:可以看出矩阵s的三个非零对角线向量分别是D的三个列向量。主对角线为“3 2 1”;向上位移一单位的次对角线为“2 4 1”,但其中“2” 被移掉了;向上位移两单位的次对角线为“9 9 4”,但其中“9 9” 都被移掉了。

3. 用spconvert函数从外部文件输入稀疏矩阵

可以将load命令和spconvert函数结合,将文本文件(如*.dat)调用到内存,然后将文本文件内容转换成稀疏矩阵。也可以直接用save或load命令将稀疏矩阵保存到MAT文件中或从MAT文件调用到内存中。

语法:

spconvert (Filename)

【例2.20续】用load命令和spconvert函数结合转换稀疏矩阵。 用文本编辑器生成ASCⅡ文本文件,spr.dat的内容可显示如下: 1 1 1 4 1 -5 2 2 1 4 2 -2 3 3 1 4 3 -3

其中:第1列、第2列分别代表稀疏矩阵的行、列下标,第3列则是元素值。

load spr.dat %装载文本文件

b= spconvert(spr) b =

(1,1) 1 (4,1) -5

%转换成稀疏矩阵

(2,2) 1 (4,2) -2 (3,3) 1 (4,3) -3 save spr b clear

load spr b b b =

(1,1) 1 (4,1) -5 (2,2) 1 (4,2) -2 (3,3) 1 (4,3) -3

%保存spr.mat文件 %装载spr.mat文件

2.3.2稀疏矩阵的存储空间

MATLAB提供了得出稀疏矩阵元素个数的函数: ? nnz:可返回稀疏矩阵的非零元素个数。

? nonzeros:返回一个包含所有非零元素的列向量。

? nzmax:返回最大的非零元素个数,当nnz>nzmax时,MATLAB会动态调整增加内存给nzmax,以储存新增的非零元素。

? spy:用图形观看稀疏矩阵的非零元素分布情况。

【例2.20续】查看稀疏矩阵的非零元素,图2.4所示为用spy函数得出的稀疏矩阵分布图。

图2.4 稀疏矩阵分布图 nnz(b) %得出非零元素个数 ans = 6


第2章 MATLAB数值计算(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年内蒙古财经大学会计专硕学制、学费、招生人数、网报数据、

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: