2.2 Matlab学习笔记之数据与运算-矩阵的表示

MATLAB矩阵的表示

矩阵是MATLAB最基本的数据对象,MATLAB的大部分运算或命令都是在矩阵运算的意 义下执行的。在MATLAB中,不需要对矩阵的维数、大小和类型进行说明,MATLAB 会根据 用户所输入的内容自动进行配置。

一、矩阵的建立
1.利用直接输入法建立矩阵

最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。

具体方法是,将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔不同行的元素之间用分号分隔。例如:

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


A =

     1     2     3
     4     5     6
     7     8     9

又如,建立复数矩阵:

>> B=[2+3i,5;3-5j,6j]  

B =

   2.0000 + 3.0000i   5.0000 + 0.0000i
   3.0000 - 5.0000i   0.0000 + 6.0000i
2.利用已建好的矩阵建立更大的矩阵

大矩阵可由已建好的小矩阵拼接而成。

例如:

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

>>B=[-1,-2,-3;-4,-5,-6;-7,-8,-9];

>>C=[A,B;B,A] 

C =

     1     2     3    -1    -2    -3
     4     5     6    -4    -5    -6
     7     8     9    -7    -8    -9
    -1    -2    -3     1     2     3
    -4    -5    -6     4     5     6
    -7    -8    -9     7     8     9
二、冒号表达式

在MATLAB 中,利用冒号表达式可以产生行向量,一般格式如下:

e1:e2:e3

其中,e1为初始值,e2 为步长,e3 为终止值。

冒号表达式可以产生一个由e1开始到e3 结束, 以步长e2 自增的行向量。例如:

>> t=0:1:5 

t =

     0     1     2     3     4     5

在冒号表达式中如果省略e2不写,则步长为1。例如,t=0:5与t=0:1:5等价。

在MATLAB中,还可以用**linspace**函数产生行向量,其调用格式如下:

linspace(a,b,n)

其中,a 和b 是生成向量的第1个和最后一个元素,n 是元素总数当n省略时,自动产生100 个元素

三、矩阵元素的引用
1.矩阵元素的引用方式

在很多情况下,需要对矩阵的单个元素进行操作。

矩阵元素可以通过下标(Subscript)来引用,下标必须为正整数。例如,A(3,2)表示A 矩阵第3行第2列的元素,如果要将该元素赋 为200,则可以通过下面的命令来完成:

>>A(3,2)=200

这时将只改变该元素的值,而不影响其他元素的值。

如果给出的行下标或列下标大于原来矩阵的行数和列数★,则MATLAB将自动扩展原来的矩阵,并将扩展后未赋值的矩阵元素置为0。 例如:

>> A=[1,2,3;4,5,6];
>> A(4,5)=10

A =

     1     2     3     0     0
     4     5     6     0     0
     0     0     0     0     0
     0     0     0     0    10

也可以采用矩阵元素的序号(Index) 来引用矩阵元素。矩阵元素的序号就是相应元素在内 存中的排列顺序,即线性索引号。

在 MATLAB 中,矩阵元素按列存储★,即首先存储矩阵的第 一列元素,然后存储第二列元素, ……,一直到矩阵的最后一列元素。

>> A=[1,2,3;4,5,6];
>> A(3)

ans =

     2

显然,序号与下标是一一对应的,以m×n 矩 阵A 为 例,*矩阵元素A(i,j)的序号为(j-1)m+i。


矩阵元素的序号与下标可以利用 sub2indind2sub 函数实现相互转换。

sub2ind 函数将矩阵中指定元素的行、列下标转换成存储的序号,其调用格式如下:

D=sub2ind(S,I,J)

其中,S 表示要转换的矩阵的行数和列数,是行数和列数组成的向量,通常用size 函数获取;I 是要转换矩阵的行下标,J 是要转换矩阵的列标。I 、J 的行列数必须相同。D 为对应下标元素的序号,其行列数与I 、J 相同。例如:

>> A=[1:3;4:6] 

A =

     1     2     3
     4     5     6

>> D=sub2ind(size(A),[1,2;2,2],[1,1;3,2])

D =

     1     2
     6     4

命令中的size(A)函数返回包含两个元素的向量,分别是A 矩阵的行数和列数。从执行结果 可以看出,A(1,1)的序号为1,A(2,1)的序号为2,A(2,3)的序号6,A(2,2)的序号为4。

ind2sub 函数用于把矩阵元素的序号转换成对应的下标,其调用格式如下:

[I,J]=ind2sub(S,D)

其中,S 表示要转换的矩阵的行数和列数;D 是序号,返回值为序号所对应元素的行下标和列下标。例如:

>> [I,J]=ind2sub([3,3],[1,3,5]) 

I =

     1     3     2


J =

     1     1     2

命令执行结果表明,3×3矩阵的第1、3、5个元素的下标分别为(1,1)、(3,1)、(2,2)。

有关求矩阵大小的函数还有length(A), 给出矩阵A 最长维的长度;ndims(A), 给出矩阵A 的维数;numel(A), 给出矩阵A 元素的个数。

2.利用冒号表达式获得子矩阵★

子矩阵是指由矩阵中的一部分元素构成的矩阵。若用冒号表达式作为引用矩阵时的下标, 这时就可以获得一个子矩阵。

也可以直接用单个的冒号来作为行下标或列下标,它代表全部行或全部列。

例如,A(i,j)表示A 矩阵第i 行、第j 列的元素,A(i,:)表示A矩阵第i 行的全部元素,A(:,j)表示A矩阵第j 列的全部元素。

同样,A(i:i+m,k:k+m)表示 A 矩阵第 i~i+m 行内且在第 k~k+m 列中的所有元素,

A(i:i+m,:)表示A 矩阵第i~i+m行的全部元素,

A(:,k:k+m) 表示A 矩 阵 第k~k+m 列的全部元素。

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

A =

     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
    16    17    18    19    20

>> A(1,:)

ans =

     1     2     3     4     5

>> A(:,2:4)

ans =

     2     3     4
     7     8     9
    12    13    14
    17    18    19
 
>> A(2:3,4:5)

ans =

     9    10
    14    15

>> A(2:3,1:3:5)

ans =

     6     9
    11    14

>> A(2:3,[1 3 5])

ans =

     6     8    10
    11    13    15

还可以利用一般向量和end 运算符来表示矩阵下标,从而获得子矩阵。end 表示某一维的末尾元素下标。

>> A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20]; 
>> A(end,:)  

ans =

    16    17    18    19    20
四、利用空矩阵删除矩阵的元素★

空矩阵是指没有任何元素的矩阵,即在建立矩阵时,中括号中为空。例如:

X=[]

将某些元素从矩阵中删除,采用将其置为空矩阵的方法是一种有效的方法

>> A=[1,2,3,0,0;7,0,9,2,6;1,4,-1,1,8]

A =

     1     2     3     0     0
     7     0     9     2     6
     1     4    -1     1     8

>> A(:,[2,4])=[]

A =

     1     3     0
     7     9     6
     1    -1     8
五、改变矩阵的形状

reshape(A,m,n) 函数在矩阵总元素保持不变的前提下,将矩阵A 重新排成m×n 的二维矩阵。

注意:reshape 函数只是改变原矩阵的行数和列数,即改变其逻辑结构,但并不改变原矩阵元素个数及其存储顺序。

A( : ) 将矩阵A 的每一列元素堆叠起来,成为一个列向量,从而改变了矩阵的形状。

>> x=[23,45,65,34,65,34,98,45,78,65,43,76]; 
>> y=reshape(x,3,4)  

y =

    23    34    98    65
    45    65    45    43
    65    34    78    76
    
>> z=reshape(y,2,6)   

z =

    23    65    65    98    78    43
    45    34    34    45    65    76


>> B=A(:)

B =

     1
     7
     1
     3
     9
    -1
     0
     6
     8

在这里, A(:) 产生一个6×1的矩阵,等价于 reshape(A,6,1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值