MATLAB——矩阵相关

一、矩阵的创建

1、直接输入法

输入矩阵时要以中括号“[ ]”作为标识符号,矩阵的所有元素必须都在中括号内。矩阵的同行元素之间用空格或逗号分隔,行与行之间用分号或回车键分隔。

a = [1 2 3; 4 5 6]

c = [2  5
    6  7]

d = [3 6;
    6 9] 

2、函数创建法

(1)zeros:全为0的矩阵

①zeros(n):n行n列全为0的矩阵

②zeros(m,n):m行n列的矩阵

(2)ones:全为1的矩阵

用法与 zeros 相同

(3)eye:主对角线元素为 1 且其他位置元素为 0 

e = eye(4)

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

eye(4,3) 

     1     0     0
     0     1     0
     0     0     1
     0     0     0

eye(3,4)

     1     0     0     0
     0     1     0     0
     0     0     1     0

(4)rand:创建区间0和1内均匀分布的随机数

①  rand(n)可以创建一个n行n列的随机数矩阵;

②  rand(m,n)可以创建一个m行n列的随机数矩阵。

(5)randi:

randi ( [ imin , imax ] , m , n )

用来创建一个m行n列的随机数矩阵,该随机数矩阵中的每个元素都是从区间[imin,imax]内随机抽取的整数。

如果imin等于1,那么可以简写为randi(imax,m,n)

(6)randn:正态分布

①  randn(n)可以创建一个n行n列的随机数矩阵

②  randn(m,n)可以创建一个m行n列的随机数矩阵

(7)diag:创建对角矩阵或者获取矩阵的对角元素

diag(v,k) 将向量v的元素放置在第k条对角线上,其他位置元素为0。    k=0 表示主对角线,k>0 位于主对角线上方,k<0 位于主对角线下方。    如果k=0, 可以直接写成diag(v)。

diag([1,2,3]) 

     1     0     0
     0     2     0
     0     0     3

diag([1,2,3],-1)

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

diag([1,2,3],2)

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

  如果输入的第一个参数是矩阵,则表示获取矩阵的对角元素。    diag(A,k) 返回A的第k条对角线上元素的构成的列向量。    k表示对角线编号,我们将其指定为一个整数。    k=0 表示主对角线,k>0 位于主对角线上方,k<0 位于主对角线下方。如果k=0, diag(A, 0)可以直接写成diag(A)。

二、矩阵元素的引用

1、矩阵的表示方式

① 双下标索引

即用行和列进行表示   a(1,2)

a([1 3], [1 3 5])         第一三行、第一三五列的元素

a(1:2:end, 1:2:end)   奇数行且奇数列对应的元素

    size函数

size(A) 返回一个行向量,其元素是 A 的相应维度的长度。

s = size(A)    返回[4,6],表示有4行和6列

size(A,dim)返回在维度dim上的长度。dim=1表示行;dim=2表示列

size函数可以有两个返回值,第一个返回的元素用来保存行数;第二个返回的元素用来保存列数

       [r, c] = size(A)

A(:, n) 表示矩阵A的第n列的所有元素。
A(m, :) 表示矩阵A的第m行的所有元素。

②单下标索引(线性)

将矩阵的所有元素按照线性排为一列

A(:)    命令可以将A中的所有元素按照线性索引的方式重构成一个列向量

对向量也有同样的效果:a(:)

sub2ind和ind2sub两个函数可以进行对单下标和双下标之间进行转化(用到较少)

三、矩阵元素的修改和删除

1、修改矩阵元素

与向量相似,直接更改

双下标式:

A(2,3) = 10

A(3,:) = 100

A([1,3],[2,3]) = [8 88; 888 8888]

单下标式:

A(4) = 10

A(1:2:end) = 0

A([3,5,6]) = [8 88 888]

2、拓展矩阵

通过将一个或多个元素置于矩阵现有的行和列索引边界之外,可以将它们添加到矩阵中。MATLAB 会自动用 0 填充矩阵,使其保持为矩形。

A = [10  20  30; 60  70  80]

A(3,4) = 1 

    10    20    30     0
    60    70    80     0
     0     0     0        1

通过在现有索引范围之外插入新矩阵来扩展其大小

A(【2:3】,【5:6】)

3、删除元素

①  将等号右边改为【】

注:此办法只能删除矩阵的整行或者整列

② 过线性索引来删除矩阵的元素

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

使用线性索引不需要删除一整行或者一整列

四、矩阵的拼接和重复

1、拼接矩阵

包括横向拼接和纵向拼接

横向拼接要求矩阵的行数相同;纵向拼接要求矩阵的列数相同

(1)横向拼接

① 直接   [A, B] 或 [A  B]

② horzcat(A,B)   or    cat(2,A,B)

(2)纵向拼接

①  命令[A; B]

②  vertcat(A,B)    or    cat(1,A,B)

注:  cat 函数

cat(dim,A,B)表示沿维度 dim 方向将矩阵B拼接到矩阵A的末尾。

dim = 1时表示从上自下沿着行方向拼接,即纵向拼接,因此cat(1,A,B)等价于vertcat(A,B);

dim = 2时表示从左自右沿着列方向拼接,即横向拼接,因此cat(2,A,B)等价于horzcat(A,B);

2、重复矩阵

函数 repmat(A,m,n)对整个矩阵进行重复

对矩阵中的元素进行重复函数(了解即可):

repelem(A,m,n)

五、矩阵的重构和重新排列

1、reshape函数

reshape函数可以改变矩阵的形状,例如有一个矩阵A,它原来的大小是2行6列,我们需要将其形状变成3行4列,那么,我们可以使用命令:reshape(A, 3, 4).  

注: A和B中的元素个数是相同的。

reshape函数实际上是按矩阵的线性索引来重新组织矩阵元素的。也就是说,它先取矩阵A的第一列,然后是第二列,依此类推,再按新的维度重新组织这些元素。因此,转换后的B矩阵中的元素和A矩阵中的元素是完全相同的,即A(:)和B(:)的结果完全相同。

2、sort函数

用来对向量或者矩阵进行排序。如果是矩阵的话,可以对矩阵的每一行或每一列分别进行排序。

(1)对向量v排序:

                sort(v) 可以将向量v按照从小到大的顺序进行升序排列

                sort(v,'descend')可以将向量v按照从大到小的顺序进行降序排列

[sort_v , ind] = sort(v)    sort_v是排序后的向量,ind是排序后的向量中的每个元素在v向量中的索引

两个输出的向量的方向和sort函数中输入的v向量的方向一致,都是行向量

(2)对矩阵A 排序

sort(A,dim)

dim = 1时,沿着行方向(从上至下)对矩阵的每一列按照从小到大的顺序分别进行排序

dim = 2时,沿着列方向(从左至右)对矩阵的每一行按照从小到大的顺序分别进行排序

 注意:

(1)当dim=1时,sort(A,1)可以直接写成sort(A);

(2)默认是升序排列的,在最后面加一个输入参数'descend',变成从大到小的降序排列;

(3)可以有两个返回值,表示排序后的元素在原矩阵所在行或所在列中的索引。

3、sortrows函数

可以基于矩阵的某一列对矩阵进行排序,排序后得到的新矩阵的同一行元素不会改变。

详情见  D:\111数模\配套的MATLAB代码和资料\第3章配套代码(版本:2024年4月8日)

sort函数一般只用于对向量进行排序;如果是矩阵或者表格排序,我们一般使用sortrows函数

4、flip / fliplr / flipud函数

flip:翻转元素的顺序; fliplr:将数组从左向右翻转 ;flipud:将数组从上向下翻转

(1)flip(A)

如果 A 为向量,flip(A) 将沿向量的长度方向翻转元素顺序。

A = [5 2 7 8 9];  % 行向量
flip(A)

     9     8     7     2     5

如果 A 为矩阵,flip(A) 将反转每列元素的顺序。

C = [5 8 7;
     4 2 6; 
     3 5 8;
     6 4 1];
flip(C)

     6     4     1
     3     5     8
     4     2     6
     5     8     7

(2)flip(A,dim)

flip(A,dim) 沿维度 dim 翻转 A 中元素的顺序。

如A 为矩阵,

flip(A,1) 将沿着行方向对矩阵A上下翻转

C = [5 8 7;
     4 2 6; 
     3 5 8;
     6 4 1];
flip(C,1)   % 等价于flip(C) 或者  flipud(C)

     6     4     1
     3     5     8
     4     2     6
     5     8     7

flip(A,2) 将沿着列方向对矩阵A左右翻转。

 flip(C,2)   %  fliplr(C)

     7     8     5
     6     2     4
     8     5     3
     1     4     6

5、rot90函数

旋转矩阵

rot90(C)         逆时针方向旋转90度

rot90(C,2)      逆时针方向旋转90*2=180度

rot90(C,3)      逆时针方向旋转90*3=270度

rot90(C,-1)     逆时针旋转-90度;等价于顺时针旋转90度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值