《MATLAB R2012a超级学习手册》一2.2 基本矩阵操作

2.2 基本矩阵操作

MATLAB R2012a超级学习手册
MATLAB中最基本的数据结构是二维的矩阵。二维的矩阵可以方便地存储和访问大量数据。每个矩阵的单元可以是数值类型、逻辑类型、字符类型或者其他任何的MATLAB数据类型。

2.2.1 矩阵的构造

1.简单矩阵构造
最简单的构造矩阵方法是采用矩阵构造符[],构造一行的矩阵可以把矩阵元素放在矩阵构造符[]中,并以空格或者逗号来隔开它们,其代码设置如下。

row=[E1,E2,...,Em]或者row=[E1E2...Em]

如果矩阵是多行的,行与行之间用分号隔开,其代码设置如下。

A=[row1;row2;...;rown]

例如,一个4×4的矩阵可以用如下语句得到。

>>A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]

上述语句得到矩阵A如下。

A=
   1 2 3 4
   5 6 7 8
   9 10 11 12
   13 14 15 16

2.特殊矩阵构造
MATLAB还提供一些函数用来构造一些特殊的矩阵,这些函数如表2-4所示。

例如,要产生一个3×3的魔方矩阵,实现方法如下。

>>A=magic(3)

由上述语句得到如下矩阵。

A=
   8 1 6
   3 5 7
   4 9 2

3.向量的构造
向量在构造矩阵和对矩阵进行索引时是很有用的,因此MATLAB提供了专门用于产生向量的运算符“:”。

冒号可以用来构造步长为1的递增向量,其格式如下。

a:b

上式可用于产生如下所示的从a~b的以步长为1递增向量。

>>A=-2.5:2.5

由上述语句生成的结果如下。

A=
   -2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000

MATLAB也支持产生任意步长的向量,步长甚至可以是负数。例如以下代码产生的步长就为负数。

>>A=2:-0.5:-1

上述语句生成的结果如下。

A=
   2.0000 1.5000 1.0000 0.50000 -0.5000 -1.0000

2.2.2 矩阵大小的改变

1.矩阵的合并
矩阵的合并就是把两个或者两个以上的矩阵数据连接起来得到一个新的矩阵。前面介绍的矩阵构造符[]不仅可用于构造矩阵,同时还可以作为一个矩阵合并操作符。表达式C=[AB]在水平方向合并矩阵A和B,而表达式C=[A;B]在竖直方向合并矩阵A和B。

例如,输入如下代码。

>>A=eye(2,4);
>>B=ones(2,4);
>>C=[A;B]

由上述语句得到结果代码如下。

C=
   1 0 0 0
   0 1 0 0
   1 1 1 1
   1 1 1 1

除了使用矩阵合并符[]来合并矩阵外,还可以使用矩阵合并函数来合并函数。这些矩阵合并函数的函数描述和基本调用格式如表2-5所示。

例如下面的代码可进行合并操作。

>>A=ones(3);
>>B=eye(2);
>>C=blkdiag(A,B)

由上述语句得到输出代码如下。

C=
   1 1 1 0 0
   1 1 1 0 0
   1 1 1 0 0
   0 0 0 1 0
   0 0 0 0 1

2.矩阵行列的删除
要删除矩阵的某一行或者是某一列,只要把该行或者该列赋予一个空矩阵[]即可。例如一个魔方矩阵A,代码设置如下。

>>A=magic(3)

上述语句得到矩阵A如下。

A=
   8 1 6
   3 5 7
   4 9 2

如果想删除矩阵的第3行,则可以用如下语句。

>>A(3,:)=[]

由上述语句得到新的矩阵A如下。

A=
   8 1 6
   3 5 7

2.2.3 矩阵下标引用

1.矩阵下标访问单个矩阵元素
若A是一个2维矩阵,可以用A(i,j)来表示第i行第j列的元素。例如,假设A=magic(4),那么A(2,4)代表第2行第4列的数字。代码设置如下。

>>A=magic(4)
>>a=A(2,4)

由上述语句得到输出代码如下。

A=
   16   2   3  13
   5  11  10   8
   9   7   6  12
   4  14  15   1
a=
   8

也可以通过下标来改变矩阵的值,代码设置如下。

>>A(2,4)=100

由上述语句得到新的矩阵A如下。

A =
  16   2   3  13
   5  11  10  100
   9   7   6  12
   4  14  15   1

2.线性引用矩阵元素
在MATLAB中可以通过单下标来引用矩阵元素,引用格式为A(k)。通常这样的引用被用于行向量或列向量。但是这样的引用也可以用于二维矩阵。

MATLAB存储矩阵元素时并不是按照其命令行输出矩阵的格式来存储矩阵的。实际上,矩阵可以看成是按列优先排列的一个长列向量格式来存储的。例如下面的代码。

>>A = [1 4 7;2 5 8; 3 6 9]

由上述语句得到如下输出语句。

A =
   1   4   7
   2   5   8
   3   6   9

矩阵A实际上在内存中是被存储成以1、2、3、4、5、6、7、8、9排列的一个列向量。A矩阵的第1行第2列,也就是值为4的元素实际上在存储空间是第4个元素。要访问这个元素,就可以用A(1,2)格式,也可以用A(4)格式。后者也就是线性引用矩阵元素方法。

3.引用矩阵元素方式转换
如果有矩阵的下标,但是却想用线性引用矩阵元素方法来访问矩阵,就可以用sub2ind()函数来得到线性引用的下标。例如下面的代码可实现此功能。

>>A = [1 4 7;2 5 8; 3 6 9];
linearindex_A=sub2ind(size(A),1,2)
由上述语句得到输出代码如下。

linearindex_A=
   4

反之,如果想从线性引用的下标得到矩阵的下标可以用函数ind2sub(),例如下面的代码。

>> [A_rowA_col]=ind2sub(size(A),4)

由上述语句得到输出代码如下。

A_row=
   1
A_col=
   2

2.2.4 矩阵信息的获取

1.矩阵尺寸信息
矩阵尺寸函数可以得到矩阵的形状和大小信息。这些函数如表2-6所示。

下面例子用于表明如何使用矩阵尺寸信息获取函数。

矩阵A为一个随机阵,代码如下。

>>A=rand(3,4)

上述语句得到矩阵A如下。

A =
  0.9649  0.9572  0.1419  0.7922
  0.1576  0.4854  0.4218  0.9595
  0.9706  0.8003  0.9157  0.6557

求矩阵A的最长方向的长度,代码如下。

>>n=length(A)

上述语句得到的结果如下。

n=
  4

2.矩阵元素的数据类型和结构
获得矩阵元素的数据类型信息的函数如表2-7所示。

测试矩阵是否为某一种数据结构的函数如表2-8所示。

2.2.5 矩阵结构的改变

可以改变矩阵结构的函数如表2-9所示。

下面以一些例子来说明这些函数的用法,设矩阵A形式如下,并输入代码如下。

>>A = [1 4 7;2 5 8; 3 6 9];

得到代码如下。

A =
   1   4   7
   2   5   8
   3   6   9

例如,需要矩阵A的转秩,可以用下面语句来实现。

>>B=transpose(A)

得到代码如下。

B =
   1   2   3
   4   5   6
   7   8   9

例如,需要把矩阵以水平方向为轴做镜像,可以用下面语句来实现。

>>B=flipud(A)

得到代码如下。

B =
   3   6   9
   2   5   8
   1   4   7

2.2.6 稀疏矩阵

在MATLAB中可以用两种方式来存储矩阵,即满矩阵存储方式和稀疏矩阵存储方式,简称满矩阵和稀疏矩阵。

在很多情况下,一个矩阵只有少数的元素是非零的,而前面的章节中介绍的矩阵对于零值和非零值是花费同样空间来存储的。

因此,这种存储方式会浪费很多存储空间,有时还会减慢计算的速度。这种存储方式称为满矩阵存储方式。而稀疏矩阵在MATLAB内部是以非零元素和非零元素的行列指标数组来表示的。

说明:
稀疏矩阵提供了一种针对矩阵元素大多数都是零值矩阵的有效存储方式。
读者可以创建双精度类型、复数类型和逻辑类型的稀疏矩阵,所有MATLAB自带的数学函数、逻辑函数和引用操作均可以使用在稀疏矩阵上。

注意:
稀疏矩阵不能自动生成,定义在满矩阵的运算只能生成满矩阵,而不论多少个元素为零。
但是,一旦以稀疏矩阵来存储,那么稀疏矩阵的存储方式就会传播下去。即定义在稀疏矩阵上的运算生成稀疏矩阵,定义在满矩阵上的运算生成满矩阵。

1.稀疏矩阵的创建和查看
MATLAB提供转换函数可以从满矩阵得到稀疏矩阵,即sparse()函数,其调用格式为S=sparse(A),其中A为满矩阵。例如A=[0 0 5 0;8 0 0 0;0 1 0 0;0 0 0 7],代码如下。

>>A=[0 0 5 0;8 0 0 0;0 1 0 0;0 0 0 7];
A =
   0   0   5   0
   8   0   0   0
   0   1   0   0
   0   0   0   7
B=sparse(A)

由上述语句得到输出代码如下。

B =
   (2,1)    8
   (3,2)    1
   (1,3)    5
   (4,4)    7

MATLAB还提供一些函数用于创建特殊的稀疏矩阵。这些函数如表2-10所示。


MATLAB还提供一些函数,用于得到稀疏矩阵的定量信息和图形化信息。这些函数包括得到稀疏矩阵非零值信息和图形化稀疏矩阵。

查看稀疏矩阵非零值信息的函数如表2-11所示。

2.稀疏矩阵的运算规则
在MATLAB系统中的各种命令都可以用于稀疏矩阵的运算。有稀疏矩阵参加运算时,所得到的结果将遵循以下的规则。

把矩阵变为标量或者定长向量的函数总是给出满矩阵。
把标量或者定长向量变换到矩阵的函数(zeros()、ones()、eye()、rand()等)总是给出满矩阵。而能给出稀疏矩阵结果的相应的函数有speye()和sprand()等。
从矩阵到矩阵或者向量的变换函数将以原矩阵的形式出现,即定义在稀疏矩阵上的运算生成稀疏矩阵,定义在满矩阵上的运算生成满矩阵。例如chol(S)、max(S)和sum(S)等函数。
两个矩阵运算符(如+、−、*、、|)操作后的结果一般都是满矩阵,除非参加运算的矩阵都是稀疏矩阵,或者操作本身(如.*,&)保留矩阵的稀疏性。
参与的矩阵扩展(如[AB;CD])的子矩阵中,只要有一个是稀疏的,那么所得的结果也是稀疏的。
在矩阵引用中,将仍以原矩阵形式给出结果。若S矩阵是稀疏的,而Y矩阵是全元素的,不管I、J是标量还是向量,那么“右引用”Y=S(I,J)产生稀疏矩阵,而“左引用”S(I,J)=Y产生满矩阵。

时间: 2024-08-01 10:45:06

《MATLAB R2012a超级学习手册》一2.2 基本矩阵操作的相关文章

《MATLAB R2012a超级学习手册》一1.1 MATLAB介绍

1.1 MATLAB介绍 MATLAB R2012a超级学习手册 MATLAB是一种高效的工程计算语言,它将计算.可视化和编程等功能集于一个易于使用的环境. 1.1.1 MATLAB的产品构架 MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算.控制系统.信息处理等领域的分析.仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充,从而在不断深化对问题认识的同时,不断完善MATLAB产品以提高产品自身的竞

《MATLAB R2012a超级学习手册》一导读

前言 MATLAB R2012a超级学习手册 MathWorks公司在1984年推出了一套高性能的数值计算和可视化软件--MATLAB.MATLAB全称"矩阵实验室"(Matrix Laboratory),是由著名的线性代数软件包LINPACK和特征值计算软件包EISPACK中的子程序为基础发展而成的一种开放式程序设计语言. MATLAB集数值计算.矩阵运算和可视化图形于一体,可方便地应用于算法开发.数据采集.数学建模.系统仿真.数据分析.科学和工程绘图.应用软件开发等方面.MATLA

《MATLAB R2012a超级学习手册》一2.3 运算符和特殊符号

2.3 运算符和特殊符号 MATLAB R2012a超级学习手册 MATLAB中提供了丰富的运算符,满足各种应用.这些运算符包括算数运算符.关系运算符和逻辑运算符3种运算符. 2.3.1 算数运算符 MATLAB的算数运算符的用法和功能如表2-12所示. 当A和B都是标量时,表示标量A的B次方幂.当A为方阵,B为正整数时,表示矩阵A的B次乘积.B为负整数时,表示矩阵A的逆的B次乘积.当B为非整数时,有如下表达式. 其中{A^{{\lambda _1}}}.L.{A^{{\lambda _n}}}

《MATLAB R2012a超级学习手册》一2.4 字符串处理函数

2.4 字符串处理函数 MATLAB R2012a超级学习手册MATLAB能够很好地支持字符串数据,可以用两个不同的方式来表示字符串,即字符数组和字符串单元数组. 2.4.1 字符串的构造 通常可以用m×n的字符数组来表示多个字符串,只要这些字符串的长度是一样.当需要保存多个不同长度的字符串时,可以用单元类型来实现. MATLAB提供了很多字符串操作,包括字符串的创建.合并.比较.查找以及与数值之间的转换.下面介绍如何创建字符串的操作. 1.创建字符数组可以用一对单引号来表示字符串,例如下面的示

《MATLAB R2012a超级学习手册》一1.6 使用MATLAB R2012a帮助系统

1.6 使用MATLAB R2012a帮助系统 MATLAB R2012a超级学习手册MATLAB提供了非常完善的帮助系统,下面介绍MATLAB中3种类型的帮助系统. 1.命令窗口查询帮助系统常见的帮助命令如表1-5所示. (1)Help命令:在命令窗口用于显示MATLAB函数的帮助.调用格式如下. Help //在命令窗口列出所有基本的帮助主题 help / //列出所有运算符和特殊字符 help functionname //在命令窗口列出functionname M文件的描述及语法 hel

《MATLAB R2012a超级学习手册》一1.2 MATLAB R2012a的安装、退出与卸载

1.2 MATLAB R2012a的安装.退出与卸载 MATLAB R2012a超级学习手册本节将向读者介绍MATLAB R2012a软件的安装.退出及卸载.读者通过以下操作即可成功装载上MATLAB软件. 1.2.1 MATLAB R2012a的安装 随着MATLAB版本的更新,安装也越来越简便.对于MATLAB R2012a,读者只要按照安装界面的提示逐步进行即可.下面介绍在Windows系统下的安装过程. (1)安装前的准备:准备好安装密码(PLP):退出正在运行的其他版本的MATLAB:

《MATLAB R2012a超级学习手册》一第1章 MATLAB概述

第1章 MATLAB概述 MATLAB R2012a超级学习手册MATLAB(Matrix Laboratory,矩阵实验室)是一种专业的计算机程序,用于工程科学的矩阵数学运算.但在最近的几年内,它逐渐发展为一种极其灵活的计算体系,用于解决各种重要的技术问题.MATLAB程序执行MATLAB语言,并提供了一个极其广泛的预定义函数库,使得技术工作变得简单高效. 本章主要结构安排是在第一节中简要介绍MATLAB软件所要实现的功能及特点,第二节介绍MATLAB R2012a软件的安装.退出及卸载,随后

《MATLAB R2012a超级学习手册》一1.8 本章小结

1.8 本章小结 MATLAB R2012a超级学习手册本章详细介绍了MATLAB的安装及使用,并且概要地介绍了MATLAB软件的发展及在各个领域的应用,最后还介绍了MATLAB数值计算的功能,希望读者学好MATLAB.用好MATLAB,不断地将科学计算与产品应用相结合. 接下来的章节作者将与广大读者一起同行,畅游MATLAB,帮助不同需求的读者尽快掌握MATLAB,并且能够顺利地通过MATLAB开发出新的产品或者是得到理想的科研成果.

《MATLAB R2012a超级学习手册》一2.5 本章小结

2.5 本章小结 MATLAB R2012a超级学习手册本章主要介绍了MATLAB软件的基础知识,包括数据类型.基体矩阵操作.运算符和特殊符号和字符串处理函数等.本章为独自编写用户程序和了解其他MATLAB基本程序作铺垫,因为每一个MATLAB程序都应让其他熟悉MATLAB编程的人容易理解.因此,有一个好的编程习惯十分重要. 说明:编写清晰.易理解.可维护强的程序要比编写简单的程序要难得多.一个程序员必须发展这方面的能力以做好自己的工作,还有程序必须避免一些常见的错误.