美文网首页
MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作(3)

MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作(3)

作者: 德特数据 | 来源:发表于2018-10-24 12:06 被阅读0次

    本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968@qq.com。 出版社:人民邮电出版社, 页数:525。

    本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:156204968@qq.com

    2.2.2 数组及矩阵元素操作

    对矩阵元素的操作是矩阵操作的基本技巧,下面将介绍矩阵元素的表示方式、子矩阵块的寻访和赋值以及矩阵的特殊操作等一些基本操作。

    (1)矩阵元素的表示方式
    矩阵和多维数组都是由多个元素组成的,每个元素通过下标来标识。元素的标示方式有两种:全下标方式和单下标方式。

    全下标方式是指由行下标和列下标表示矩阵的元素,即指明是“第几行,第几列”位置上的元素。使用该标识方法比较直观,几何概念比较清晰,是最常使用的一种标识方式。例如一个m×n的A矩阵的第i行第j列的元素表示为A(i,j)

    单下标方式是指只用一个下标来指明元素在数组中的位置。通过单下标方式表示矩阵元素首先要把元素进行一维编号。对于二维数组,首先把二维数组的所有列按先左后右的次序首尾相接排成一维长列,然后自上往下对元素位置进行编号。通过该编号就可以直接获得指定位置的数组或矩阵元素。以m×n的矩阵A为例,若元素A(i,j)则对应的“单下标”为s=(j-1)×m+i。如果对于只有1行或1列的向量,直接用A(i)来表示该向量中第i个元素。

    【例2.8】矩阵元素的提取
    >> A=rand(4) %生成一个4×4的随机分布的矩阵A
    上述语句生成一个(4×4)的随机分布的矩阵A,具体如下:
    A = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057
    ①若要双下标方式提取矩阵A的第2行第3列对应的元素,可在命令窗口输入:
    >> A(2,3) %双下标方式提取矩阵A的第2行第3列对应的元素
    则提取到的矩阵A中的元素显示如下,读者可以对照上面的矩阵检查提取到的元素是否是对应位置上的元素。
    ans = 0.4447
    ②若要单下标方式提取第1行第3列对应的元素,可在命令窗口输入:
    >> A(15)
    则提取到的矩阵A中的元素为:
    ans = 0.1763

    注意:(1)如果在提取矩阵元素值时,矩阵元素的下标行或列(i,j)大于矩阵的大小(m,n),MATLAB会提示出错;
    (2)在给矩阵元素赋值时,如果行或列(i,j)超出矩阵的大小(m,n),MATLAB会自动扩充矩阵,扩充部分以0填充。

    (2)子矩阵块的寻访和赋值
    在理解和掌握了对矩阵元素标识的方法后,就很容易理解和掌握子矩阵的寻访和赋值操作。子矩阵是从对应矩阵中取出一部分元素构成,用全下标或单下标方式提取子矩阵或进行重新赋值,具体参见表2.3。

    格式 使用说明
    A(r,c) 由A的“r指定行”和“c指定列”上的元素组成
    A(r,:) 由A的“r指定行”和“全部列”上的元素组成
    A(:,c) 由A的“全部行”和“c指定列”上的元素组成
    A(:) 单下标方式寻访,由A的全部元素组成
    A(s) 单下标方式寻访,生成s指定的一维数组。s若是行数组(列数组),则A(s)就是长度相同的行数组(列数组)。
    A(L) “逻辑1”方式寻访,生成一维列数组,由与A同样大小的逻辑数组L中的“1”元素选出A的对应元素,按单下标次序排成长列组成
    A(r,c)=Sa 以双下标方式,对子数组A(r,c)进行赋值,Sa的行、列大小必须与A(r,c)的相同
    A(:)=D(:) 全元素赋值方式,保持A的行、列大小不变,要求A、D两个数组的总元素数相同,但行、列大小不一定相同。
    A(s)=Sa 以单下标方式对A的部分元素进行重新赋值,保持A的行、列大小不变。要求s单下标数组的长度必须与一维数组Sa的长度相等,但s、Sa不一定都是行数组或列数组。

    【例2.9】对矩阵A,以不同的方式进行寻访操作示例
    >> A=magic(4); %创建4×4的魔方矩阵A
    下面将对魔方矩阵A以不同的方式进行寻访操作,读者可以将下面各语句执行的结果与矩阵A中的元素进行比较,以加深对矩阵元素寻访操作的理解。
    ①若以单下标方式寻访矩阵A中编号为1和4对应的元素,可在命令窗口输入:
    >> B=A([1,4])
    结果显示如下:
    B = 16 4
    ②若以双下标方式寻访矩阵A中第1、3行和第2、3列对应的元素,可在命令窗口输入:
    >> B1=A([1 3],[2 3])
    寻访到的矩阵A中的元素如下:
    B1 = 2 3 7 6
    若以双下标方式寻访矩阵A中第1到3行和第2到3列上对应的元素,可在命令窗口输入:
    >> B2=A(1:3,2:3)
    寻访到的矩阵A中的元素如下:
    B2 = 2 3 11 10 7 6
    ④若要寻访矩阵A的第3列对应的所有元素,可在命令窗口输入:
    >> B3=A(:,3)
    结果显示如下:
    B3 = 3 10 6 15
    ⑤若要寻访矩阵A第1至3行的最后一个元素,可在命令窗口输入:
    >> B4=A(1:3,end) %end表示最后行或者列
    提取到的矩阵的元素显示如下:
    B4 = 13 8 12

    在实际使用过程中,经常会遇到寻找矩阵中大于某个值的元素等类似的问题,当遇到此类问题时采用逻辑矩阵的方法来提取子矩阵或进行重新赋值操作就很方便。所谓的逻辑矩阵就是该矩阵对应的各元素取值只能为1或0。使用逻辑矩阵寻访矩阵时,逻辑矩阵的大小和将要寻访矩阵的大小相同,可以用A(L)来提取矩阵A中的子矩阵,其中L为逻辑向量或逻辑矩阵,当L的元素为0时则不取该位置元素,为1则取该位置的元素。

    【例2.10】利用逻辑矩阵来提取矩阵
    >> A=rand(4) 生成一个4×4的随机矩阵A
    上述语句生成一个(4×4)的如下随机矩阵A:
    A = 0.9355 0.0579 0.1389 0.2722 0.9169 0.3529 0.2028 0.1988 0.4103 0.8132 0.1987 0.0153 0.8936 0.0099 0.6038 0.7468
    下面将利用逻辑矩阵对随机矩阵A进行寻访操作,读者可以将下面各语句执行的结果与矩阵A中的元素进行比较,以加深对利用逻辑矩阵对矩阵寻访操作的理解。
    ①若要提取矩阵A第一列上L1向量的值为1对应的元素,首先在命令窗口输入逻辑向量L1:
    >>L1=logical([1 0 1 1]) %生成行逻辑向量
    然后在命令窗口输入以下内容:
    >> A(L1)
    通过L1提取到的矩阵中的元素如下:
    ans = 0.9355 0.4103 0.8936
    ②利用矩阵B提取矩阵A中所有>0.5的元素。
    首生成矩阵B,可以在命令窗口输入以下内容:
    >> B=A>0.5;
    上述语句判断矩阵A中所有元素是否>0.5,如果该元素>0.5则返回矩阵对应的该位置显示1,否则显示0。然后利用矩阵B提取矩阵A中所有>0.5的元素。在命令窗口输入:
    >> A(B)’ %为了方便显示,转化为行向量
    结果显示如下:
    ans = 0.9355 0.9169 0.8936 0.8132 0.6038 0.7468

    【例2.11】矩阵的赋值
    可以采用单下标方式和双下标方式对矩阵的元素赋值,通过下面的操作可以看出,采用双下标方式比较直观和容易操作,仍然采用例2.10所示的随机矩阵A。
    ①采用双下标方式将矩阵A第1到2行和第1到3列对应的元素赋值为1。在命令窗口输入:
    >> A(1:2,1:3)=[1 1 1;1 1 1] %将A矩阵的1,2两行,1到3列对应元素赋值为1
    上述语句执行的结果如下,对比上面的矩阵A观察赋值后的变化。
    A = 1.0000 1.0000 1.0000 0.2722 1.0000 1.0000 1.0000 0.1988 0.4103 0.8132 0.1987 0.0153 0.8936 0.0099 0.6038 0.7468
    ②采用单下标方式将矩阵A的编号为12至15的四个元素赋值为1。对应为A矩阵的第4行第3列元素以及第4列的1到3行元素。在命令窗口输入:
    >> A(12:15)=[1 1 1 1] %将A矩阵的第12到15个位置赋值为1。
    上述语句执行的结果如下,对比上面的矩阵A观察赋值后的变化。
    A = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.4103 0.8132 0.1987 1.0000 0.8936 0.0099 1.0000 0.7468
    ③采用单下标方式A(:)=B的形式给矩阵A的所有元素赋值时,矩阵B的元素总数必须等于矩阵A的元素总数,但行列数不一定相等。例如:
    >> A=[1 2;3 4;5 6] %生成A矩阵
    >> B=[1 2 3;4 5 6] %生成B矩阵
    在命令窗口输入以下内容,利用矩阵B对矩阵A进行赋值。
    >> A(:)=B %用B对A进行赋值
    上述语句的执行结果如下:
    A = 1 5 4 3 2 6

    【例2.12】矩阵元素的删除
    删除操作就是把选定的矩阵元素赋值为空矩阵(用[]表示)。首先在MATLAB工作空间创建一个四阶的魔方阵,使用magic命令如下所示:
    >> A=magic(4) %生成四阶的魔方阵
    下面将对矩阵A进行删除操作,可以将以下各语句的执行结果与矩阵A进行比较,理解矩阵删除操作的执行情况。
    ①将矩阵A的第三列用空阵代替,即删除第三列上的元素。可在命令窗口输入:
    >> A(:,3)=[] %删除矩阵A的第三列元素
    删除第三列上所有元素后,矩阵如下:A = 16 2 13 5 11 8 9 7 12 4 14 1
    ②使用单下标删除矩阵相关操作和赋值语句基本相同,在命令窗口中输入:
    >> A=magic(4) %生成四阶的魔方阵
    >> A(15)=[] %删除A矩阵的第15个元素,此时A成为15个元素的行向量;

    注意: 使用矩阵元素删除操作时,不允许使用具体下标的形式删除某行或者某列中的单个元素,否则,无法形成矩阵。因此通常采用整行或者整列元素的删除方式。

    【例2.13】生成大矩阵
    在MATLAB中,可以通过方括号“[]”实现对已有的矩阵进行扩展,将小矩阵联接起来生成一个较大的矩阵。MATLAB提供了反转、提取、插入、重组等多种操作,在后面的相关章节会有所介绍,在这里只简单的介绍将两个比较小的矩阵合并为一个比较大的矩阵的操作。首先在MATLAB工作空间创建一个四阶的单位对角阵:
    >>A=eye(4) %生成对角单位阵列
    以单位矩阵A为基础,通过矩阵的合并生成比较大的矩阵。
    ①将矩阵A上下叠加生成新矩阵。在命令窗口中输入:
    >> B=[A;A] %上下重叠矩阵,相当于操作reshape(A,2,1)
    ②将矩阵A左右叠加生成新矩阵。在命令窗口中输入:
    >> C=[A A] %左右叠加矩阵,相当于操作reshape(A,1,2)

    (3)矩阵的特殊操作
    MATLAB提供了对矩阵的特殊操作,比较常用的有矩阵的上三角和下三角矩阵的提取、矩阵翻转和旋转等操作详见表2.4所示。

    函数名 功能
    triu(X) 产生X矩阵的上三角矩阵,其余元素补0
    tril(X) 产生X矩阵的下三角矩阵,其余元素补0
    flipud(X) 使矩阵X沿水平轴上下翻转
    fliplr(X) 使矩阵X沿垂直轴左右翻转
    Flipdim(X,dim) 使矩阵X沿特定轴翻转。dim=1,按行维翻转;dim=2,按列维翻转
    rot90(X) 使矩阵X逆时针旋转90º

    【例2.14】矩阵特殊操作的示例
    首先在MATLAB命令行窗口中输入以下命令,生成四阶的魔方阵:
    >> X=magic(4) %生成四阶的魔方阵
    下面将以矩阵X为基础,进行矩阵的三角矩阵提取、矩阵的翻转和旋转等各种操作。表2.4中已经详细地介绍了矩阵的相关操作函数,这里不一一举例演示相关函数的使用。提取矩阵X上三角矩阵操作,可在命令窗口中输入:
    >> triu(X) %提取矩阵的上三角矩阵,下三角元素为零
    提取得到的矩阵X的上三角矩阵如下:
    ans = 16 2 3 13 0 11 10 8 0 0 6 12 0 0 0 1

    作者:德特数据
    联系方式:156204968@qq.com

    相关文章

      网友评论

          本文标题:MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作(3)

          本文链接:https://www.haomeiwen.com/subject/qzvttqtx.html