2.矩阵的寻访与赋值

在创建了矩阵之后,我们经常需要访问矩阵中的某一个或者一些元素,另外可能需要对其中的某些元素重新赋值或者删除某一部分元素。本节介绍如何进行矩阵的寻访与赋值。

2.1 矩阵的标识

本小节介绍单个元素标识和寻访的3种方式:全下标、单下标、逻辑1标识。

1.全下标标识

经典数学教科书在引述具体矩阵元素时,通常采用全下标标识法,即指出某一元素是在第几行第几列。这种标识方法的优点是:几何概念清楚,引述简单。全下标标识法在MATLAB的寻访和赋值中因为最为直观,所以它最为常用。

对于二维矩阵来说,全下标标识由两个下标组成:行下标、列下标。如A(3,5)表示二维矩阵A的第3行第5列。

这里值得注意的是,MATLAB中对下标的标识是从1开始的,就是和我们平时在数学中使用的说法是一致的。这和其他一些编程语言从0开始标识是不同的。

2.单下标标识

MATLAB尽管是以矩阵作为基本的计算单元,但是矩阵的后台存储并不是像显示出来的那样成长方形排列的,而是按照单下标标识作为一列存储到内存中。单下标标识就是“只用一个下标来指明元素在矩阵中的位置”。当然,这样做首先要对二维矩阵的所有元素进行“一维编号”。所谓“一维编号”就是:先设想把二维矩阵的所有列,按照先左后右的次序首尾相连排成一维长列,然后自上而下对元素位置进行编号。

单下标与全下标的转换关系:以m´n的二维矩阵A为例,若全下标的元素位置是“第a行,第b列”,那么相应的单下标则为c=(b-1)*m+a。

在MATLAB中,有两个函数可以实现全下标和单下标的转换。

sub2ind:    根据全下标换算出单下标。

ind2sub:    根据单下标换算出全下标。

单下标的优势是在特定情境下使用更为简洁,例如编制某些循环的时候只需要一个循环变量就可以了,另外比如需要将某数组赋值给另一维数不同的数组的时候。

3.逻辑1标识

在实际使用中,有时会遇到寻找矩阵中大于或者小于某值的元素的问题,这时就可以使用逻辑1标识法。逻辑1标识用一个基于原矩阵A相对位置的逻辑数组B来对矩阵A进行寻访。数据B中每一个true值也就是1表示相对位置的A中元素可以被寻访。如果需要通过逻辑1标识来对矩阵进行寻访,只需将符合条件的元素位置的标识设置为逻辑1即可。

采用逻辑1标识的程序在速度方面具有一定的优势。

2.2 矩阵的寻访

【例2-7】 二维矩阵的寻址。

>> a=[1 2 3; 4 5 6]          %  创建测试矩阵

1     2    3

4     5    6

>> A=a(2,2)            %  全下标寻访

>> b=a(4)              %  单下标寻访

>> B=a>5                    %  返回逻辑下标

0     0    0

0     0    1

>> c=a(B)              %  逻辑下标寻访

>> d=a(1,:)             %  通过使用冒号可以寻访全行元素

1     2    3

>> e=a(:,2)             %  通过使用冒号可以寻访全列元素

>> f=a(:)               %  单下标寻访

>> g=a(:,[1 3])              %  寻访地址可以是向量,以同时寻访多个元素

1     3

4     6

本例中的B=a>5和c=a(B),就是采用逻辑1标识法访问矩阵a中大于5的元素。

2.3  矩阵的赋值

在了解了矩阵的寻访方法以后,给矩阵中的特定元素赋值也就成了一个很简单的事情。下面举例来说明。

【例2-8】 二维矩阵的赋值。

>> a=magic(4)

16     2    3    13

5    11   10     8

9     7    6    12

4    14   15     1

>> a(3,4)=0    % 对单个元素进行赋值

16     2    3    13

5    11   10     8

9     7    6     0

4    14   15     1

>> a(:,1)=1   % 对第一列进行赋值

1     2    3    13

1    11   10     8

1     7    6     0

1    14   15     1

>> a(14)=16       % 采用全下标对第14个元素进行赋值

1     2    3    13

1   11    10     16

1     7    6     0

1    14   15    1

2.3.1 进行数组运算的常用函数

在MATLAB中有一些常用函数,这些函数在日常的编程计算过程中会经常遇到,一般是基本的数学概念在MATLAB中的函数表达方式。这些函数在MATLAB中可以同时作用于整个矩阵或者数组,应用起来非常方便,不需要再另写循环程序来对各元素分别进行计算。掌握这些函数是进一步学习的基础。MATLAB人性化的地方在于其自带函数基本是按照相对应的英文名称缩写而来,所以便于记忆。

2.3 函数数组运算规则的定义

对于(m´n)的数组

,函数的数组运算规则是指:

也就是说函数的数组运算是指将函数作用于矩阵中的每一个元素,并将最后的结果储存为与原矩阵行列数相同的矩阵。

2.3.2 进行数组运算的常用函数

本小节列出进行数组运算的常用函数。常用基本数学函数见表2-2,常用三角函数见表2-3,常用适用于向量的函数见表2-4。

表2-2         MATLAB常用的基本数学函数

函    数

说    明

函    数

说    明

纯量的绝对值或向量的长度

将实数x化为分数表示

复数z的相角

符号函数 当x<0时,sign(x)=-1; 当x=0时,sign(x)=0;  当x>0时,sign(x)=1

求x除以y的余数

复数z的实部

整数x和y的最大公因数

复数z的虚部

整数x和y的最小公倍数

复数z的共轭复数

自然指数

四舍五入至最近整数

无论正负,向0的方向取最近整数

以e为底的对数,即自然对数

舍去法取最近整数

以2为底的对数

进一法取最近整数

以10为底的对数

表2-3        MATLAB常用的三角函数

函     数

说     明

函     数

说     明

正弦函数

超越正弦函数

余弦函数

超越余弦函数

正切函数

超越正切函数

反正弦函数

反超越正弦函数

反余弦函数

反超越余弦函数

反正切函数

反超越正切函数

四象限的反正切函数

表2-4        适用于向量的常用函数

函     数

说     明

函     数

说     明

向量x的元素的最小值

向量x的欧氏长度,也就是范数

向量x的元素的最大值

向量x的元素总和

向量x的元素的平均值

向量x的元素总乘积

向量x的元素的中位数

向量x的累计元素总和

向量x的元素的标准差

向量x的累计元素总乘积

向量x的相邻元素的差

向量x和y的内积

对向量x的元素进行排序

cross(x, y)

向量x和y的外积

【例2-9】  数组运算示例。

1     2    4     9

16    25   36    49

>> b=sqrt(a)                   %  应用函数对矩阵中的每一个元素分别开方