(一)矩阵和数组

在预备篇中,我们介绍了矩阵和数组的基础概念,在本章,我们将来具体的介绍矩阵和数组的建立、修改、使用等等一系列内容

一、矩阵的输入

在MATLAB中的矩阵表示应遵循的以下基本常规:

  1. 使用方括号([])括起来矩阵内的元素,方括号内部的元素按行或列排列。
  2. 使用分号(;)分隔行,每一行的元素可以通过一个分号进行分隔。
  3. 使用逗号(,)或空格分隔列,每一列的元素可以通过一个逗号或空格进行分隔。
  4. 元素可以是数值或者表达式

(一)通过显式元素列表输入矩阵

对于比较小的简单矩阵,可以通过显式元素列表直接输入矩阵。
有以下输入方式:

a=[1 2;3 4;5 6]
a=[1,2;3,4;5,6]
a=[1 2
3 4
5 6]

(二)通过语句生成矩阵

对于较复杂的矩阵有以下几种生成方式:

(1)用from:step:to方式生成行向量

from:to
from:step:to

例:

a=2:5
%a =2     3     4     5
a=[1:2:6;2:2:7]
%a =1     3     5
%   2     4     6
a=4:-1:3
%a =4     3
a=3:-1:4
%a =
% 空的 1×0 double 行向量

(2)用linspace和logspace函数方式生成向量

linspace

linspace 函数可以生成指定范围内的等间距元素值,并返回一个向量。

V = linspace(start, stop, n)
%start:起始值。stop:结束值。n:向量中的元素数量。

例:

A = linspace(1, 10, 5);  % 生成一个从1到10之间,包含5个等间距的元素的向量
%A =
%    1     3     5     7    10
A=[linspace(1, 10, 5);linspace(6, 15, 5);linspace(12, 21, 5);linspace(99, 108, 5)]%(format rat)
%A =
%      1             13/4           11/2           31/4           10       
%      6             33/4           21/2           51/4           15       
%     12             57/4           33/2           75/4           21       
%     99            405/4          207/2          423/4          108  
logspace

logspace 函数可以生成指定范围内的对数空间元素值,并返回一个向量。

V = logspace(start, stop, n)
%start:起始值的对数。stop:结束值的对数。n:向量中的元素数量。

例:

B = logspace(0, 2, 4);  % 生成一个从10^0到10^2之间,包含4个对数间距的元素的向量
%“四个对数间距”:即,第一个元素是 10^0^ = 1,第二个元素是 10^(1/3)^≈ 2.1544,第三个元素是 10^(2/3)^ ≈ 4.6416,最后一个元素是 10^2^ = 100,因此,生成的向量是 [1, 2.1544, 4.6416, 100]。
B = logspace(1, 6, 6)% 生成一个从10^1到10^6之间,包含6个对数间距的元素的向量
%B =10         100        1000       10000      100000     1000000

注意,根据 linspace 和 logspace 函数的语法,返回的结果都是向量,可以是行向量(默认)或列向量。

(3)用特殊函数方式生成特殊矩阵

矩阵类型功能语法解释
零矩阵所有元素都为零的矩阵Z = zeros(m, n)m:矩阵的行数;n:矩阵的列数
单位矩阵主对角线上的元素都为1,其余元素都为0的矩阵I = eye(n)n:矩阵的维度(行数和列数相等)
对角矩阵对角矩阵是一个只有主对角线上有非零元素,其余元素都为零的矩阵D = diag(v)v:包含主对角线上元素的向量
全一矩阵所有元素都为1的矩阵O = ones(m, n)m:矩阵的行数。n:矩阵的列数
随机矩阵产生均匀分布的随机矩阵,取值范围为0.0~1.0R = rand(m, n)m:矩阵的行数;n:矩阵的列数
随机矩阵产生正态分布的随机矩阵R = randn(m, n)m:矩阵的行数;n:矩阵的列数
魔方矩阵矩阵的行、列和对角线上元素的和相等E=magic(n)n:方阵的阶数
逻辑矩阵全为true(1)或全为false(0)Q=true(m,n);Q=false(m,n)m:矩阵的行数;n:矩阵的列数

注:以上函数中,需要两个参数的函数如若只输入一个参数n,则默认为n阶方阵。

二、矩阵的元素

(一)矩阵的元素表示

(1)、矩阵中单个元素的表示

在输入一个矩阵之后,要进行处理时,可能会涉及对矩阵中单个元素进行处理的情况,那么然后让软件获取这个数据就是一件比较关键的事情。
在MATLAB中,矩阵的元素有两种用下标表示的方式,一种是用该元素的行和列的编码来表示;另一种是用该元素的顺序来表示。

  • 1、全下标方式
    一个矩阵A中第m行n列的元素记作A(m,n)。而A(m,n)=N,意味将A(m,n)修改为N。
    在提取矩阵元素时,如果所使用的行数或列数大于矩阵的行数或列数,MATLAB会自动报错;而在赋值时如果所使用的行数或列数大于矩阵的行数或列数,矩阵会被自动扩充,扩充部分用0填充。
  • 2、单下标方式
    在矩阵中,矩阵元素可以按照列从左向右的顺序从上到下依次标号1、2、3、……
    在m行n列的矩阵A中,A(i,j)对应的单下标为(j-1)*m+i
    例如矩阵A:
1(1)8(4)5(7)9(10)
8(2)6(5)9(8)8(11)
7(3)1(6)5(9)0(12)

其中A(2,3)==A(8)==9;A(1,2)==A(4)==8
不仅如此,单下标方式也可以取出多个值,如A(7:9),取出A矩阵中编号7~9的元素。

(2)、矩阵中子矩阵的产生

在MATLAB中,可以通过利用矩阵下标来产生子矩阵,即子矩阵是从对应矩阵中取出一部分元素构成的。参照上一节中,对矩阵元素的表示,我们可以采用2+1中方式来产生子矩阵。

1.全下标方法:
  1. a([1 3]),[2 3]):原始矩阵中第 1 行第 3 行,并且只选择每行中的第 2 列第 3 列。

  2. a(1:3,2:3):始矩阵中第 1 行第 3 行,并且只选择每行中的第 2 列第 3 列。

  3. a(:,3):原始矩阵中的第 3 列的所有元素。

  4. a(3,:):原始矩阵中的第 3 行的所有元素。

  5. a(1:3,end):原始矩阵中从第 1 行到第 3 行的最后一列的元素(end意为最大值)。

  6. a(end,1:3):原始矩阵中最后一行的从第 1 列到第 3 列的的元素。

综上所述,括号中,逗号前为列的范围,逗号后为行的范围,确定了行和列的范围,子矩阵自然确定。

2.单下标方法:
  • a([1 3;2 6]):取单下标为1、3和2、6的元素构成子矩阵
3.逻辑矩阵:

逻辑矩阵通过建立逻辑数组,取出相应元素组成矩阵。
首先要建立逻辑数组:

a=[false,true,true]
%或a=[0,1,1]
b=[true,false,true]
%或b=[1,0,1]

逻辑数组元素的值不一定,都是要在矩阵行列数的范围之内,不能超出矩阵的大小。
在数组中为true(1)的位置是要取得的,为false(0)的位置是不取的。
然后将逻辑数组按照全下标方式组合:

A(a,b)

此时,就取出了A矩阵中第2、3行的第1、3列的元素

(二)矩阵的赋值

在我们表示了矩阵中的某个元素或者某个子矩阵后,可以直接对其进行赋值修改。

  1. 全下标方式
A(i,j)=B

给A矩阵的部分元素赋值,则B矩阵的行列数必须等于A矩阵中相应位置的行列数,等号左右侧的大小必须相同。

  1. 单下标方式
A(s)=b
A(s:n)=b

b为向量,元素个数必须等于A矩阵的元素个数,但是,有一个例外情况是,如果b只有一个元素,那么A中被赋值的位置均将被赋值为b元素的值。a(1:3)=2a矩阵中1~3号元素竣备赋值为2。

  1. 全元素方式
A(:)=B

给A矩阵的所有元素赋值,则B矩阵的所有元素总数必须等于A矩阵的元素总数,但是行列数不一定相等,即将A、B 矩阵中的元素单下标相等的一一对应赋值。

如果要实现A=B,那么A、B矩阵的行列数必须相同。

  1. 矩阵的扩增

当我们对矩阵中的某个元素进行赋值时,如果该元素的位置超出了目前矩阵的大小,那么该矩阵会自动扩增至该元素所在的行和列,并将多出来的位置,填充0。
该方式适用于全下表,因为单下标所指示的位置通常没有明确的行和列。

(三)矩阵的删除和连接

在MATLAB中可以对矩阵的单个元素、子矩阵块或所有元素进行删除操作,方法是将其赋值为空矩阵([])。同时,我们也可以将一些相似的矩阵连接起来形成一个较大的矩阵。

一、矩阵元素的删除

  1. 删除一列/行元素
 a(:,3)=[]
 %删除第三列元素
 a(3,:)=[]
 %删除第三行元素
  1. 删除单个元素
a(1)=[]
%按单下标方式删除一个元素,剩余的元素展开为行向量
  1. 删除所有元素
a=[]
%将a矩阵变为空矩阵

二、矩阵的连接(生成大矩阵)

在MATLAB中,我们可以通过方括号“[]”将小矩阵连接起来生成一个较大的矩阵。

[a;a]%将两个a矩阵上下连接成一个大矩阵
[a a]%将两个a矩阵左右连接成一个大矩阵
[a(1:2,1:2) 10*a(1:2,2:3)]%将a矩阵选取子矩阵经计算后再左右连接

值得注意的是,相连接的两个矩阵一定要在行或列上相等,否则将报错。

(四)矩阵的翻转

在线性代数中,我们可以求一个矩阵的转置,在MATLAB中,相对应的,我们可以将一个矩阵通过编写语句转动或转置。

  1. flipud(A):将矩阵 A 上下翻转,即交换行的顺序。

功能:将矩阵的上下顺序颠倒。

  1. fliplr(A):将矩阵 A 左右翻转,即交换列的顺序。

功能:将矩阵的左右顺序颠倒。

  1. rot90(A, k):将矩阵 A 逆时针旋转 90 度。

功能:将矩阵按逆时针方向旋转指定的角度。参数 k 控制旋转的次数,默认为 1。

  1. flipdim(A,dim):使矩阵沿特定轴翻转。

功能:dim=1时,同 flipud(A);dim=2时,同fliplr(A)

  1. transpose(A) 或 A.':将矩阵 A 进行转置,即将行变成列,列变成行。

功能:交换矩阵的行和列。

  1. triu(A):返回一个与矩阵 A 大小相同的上三角矩阵。

功能:提取矩阵 A 的上三角部分,下三角部分的元素被置为零。

  1. tril(A):返回一个与矩阵 A 大小相同的下三角矩阵。

功能:提取矩阵 A 的下三角部分,上三角部分的元素被置为零。

三、多维数组

上文介绍了矩阵,也可以视为一种由行和列组成的二维数组,但数组的结构并不只局限于二维,也可以推广到三维进行分层,即在二维数组的基础上增加了一维称为“页”。以此类推我们也可以推广出四维甚至更高维的数组。以下,以三维数组为例进行讲解。

(一)多维数组的创建

  1. 通过全下标元素赋值方式创建
    在二维数组(矩阵)中,我们可以用全下标方式A(m:n;a:b)的方式表示A中的子矩阵,此时我们可以在括号内再加一个逗号表示多一个维度,通过赋值的方式创建多维数组。
A(:,:,2)=[1 2;3 4]

此时给数组A的第二页赋值了矩阵[1 2;3 4],第一页便自动用零填充为[0 0;0 0]。
如果赋值的是一个标量,那么该页便会基于有元素的一页的行列数,元素均为该标量。

  1. 通过函数ones、zeros、rand、randn直接创建
rand(2,3,4)

结果为
ans(:,:,1) =

0.8147    0.1270    0.6324
0.9058    0.9134    0.0975

ans(:,:,2) =

0.2785    0.9575    0.1576
0.5469    0.9649    0.9706

ans(:,:,3) =

0.9572    0.8003    0.4218
0.4854    0.1419    0.9157

ans(:,:,4) =

0.7922    0.6557    0.8491
0.9595    0.0357    0.9340
  1. 利用函数生成

(二)多维数组的标识

四、矩阵和数组运算

在线性代数中,我们了解到了计算矩阵行列式的值;求秩、转置、逆;矩阵与矩阵之间进行计算等等矩阵、行列式的运算,在MATLAB中,也有一系列的方程或语句能够达成该种运算目的。

(一)矩阵运算的函数

  • det(X):计算矩阵行列式。

  • rank(X):求矩阵的秩,得出的行列式不为0的最大方阵的边长。

  • inv(X):求逆矩阵
    (当且仅当det(X)!=0,inv(X)成立)(当det(X)=0或值极小接近于零时,计算inv(X)时,其精度很低MATLAB会提示精度较低)。

  • [v,d]=eig(X):计算矩阵的特征值和特征向量。如果方程Xv=vd存在非零解,则v为特征向量,d为特征值。

  • diag(X):产生X矩阵的对角矩阵。
    (当X为一维行向量时,diag(X)产生以X中元素为对角线元素,其余部分用零填充的对角矩阵;而X为二维矩阵时,diag(X)产生其对角线元素的竖行矩阵,如果行列数不等,则为从左往右的min(行数,列数)*min(行数,列数)方阵的对角线)

  • [l,u]=lu(X):方阵分解为一个准下三角方阵和一个上三角方阵的乘积。l为准下三角方阵,必须交换两行才能成为真正的下三角阵。u为上三角方阵。

  • [Q,R]=qr(X):将m*n阶矩阵分解为一个正交方阵Q和一个与X同阶的上三角矩阵R的乘积,方阵Q的边长为矩阵X的n和m中的较小值,且其行列式值为1。

(二)矩阵和数组的算术运算

一、加(减)法运算

矩阵和数组的加(减)法运算法则完全一致,将两个矩阵或数组中的元素一一对应相加,则相加(减)的两个矩阵行列数应对应相等。
表达式为:A+B A-B
如果A和B 中有一个是标量,则需将该元素与矩阵的每一个元素相加(减),例如矩阵A+2,即为将矩阵A中的每一个元素都加2。

二、乘法运算

矩阵的乘法和数组的乘法略有不同
矩阵的乘法法则正如我们在线性代数中学习的,乘号前的矩阵的行元素逐个与乘号后的矩阵的列元素相乘之和,如此得出的新矩阵便为矩阵的乘法,当其中一个元素为标量时,同数组乘法。
而数组的乘法只需要将两数组对应位置的元素相乘即可。

  • 矩阵乘法A*B
  • 数组乘法A.*B

数组相乘要求两数组行列数对应完全一致,矩阵相乘要求两矩阵行列对称相等

三、除法运算

矩阵和数组的除法都可以分为左除和右除两种,即除以和被除以。

  • 矩阵除法A\B A/B
    A\B=A-1xB,为AX=B的解
    A\B=AxB-1,为X
    A=B的解
    (A-1代表矩阵的逆)
  • 元组除法A.\B A./B
    A、B两数组必须大小相同,除非其中有一个是标量。

四、乘方

  1. 矩阵的乘方A^B(A可以为矩阵或向量)
  • 当A为矩阵时,必须为方阵
    B为正整数时,A的B次幂
    B为负整数时,A的逆矩阵的B次幂
    B为矩阵时,出错
    B为非整数时,涉及特征值和特征向量的求解,A^B=W*D^B/W(将A拆分为W*D/W,D为对角阵)
  • A为标量时
    B为矩阵时,将A分解为W*D/W,D为对角阵,A^B=W*diag(D.^B)/W
  1. 数组的乘方A.^B
  • A为矩阵,B为标量时,将数组A自乘B次
  • A为矩阵,B为矩阵时,A、B数组必须大小相同,将A中的元素自乘B中相对应位置元素次
  • A为标量,B为矩阵时,将A^B(i,j)构成新矩阵的第i行j列元素

(三)矩阵和数组的转置

  • 矩阵的转置A'
    若A为复数矩阵,则为共轭转置,实数矩阵则不是。
  • 数组的转置A.'
    复数矩阵,实数矩阵均不是共轭转置

注:共轭转置,将矩阵的每个元素取共轭,然后再对矩阵进行转置。
例:

A = [1 + 2i, 3 - i;4 + 5i, 6 - 7i]
A'= [(1 + 2i)^*, (4 + 5i)^*;
       (3 - i)^*, (6 - 7i)^*]
     = [1 - 2i, 4 - 5i;
        3 + i, 6 + 7i]^T
     = [1 - 2i, 3 + i;
        4 - 5i, 6 + 7i]

(四)矩阵和数组的数学函数

1.数组的算术运算函数:
包括abs、sqrt、三角函数【sin()、cos()、tan()】、
反三角函数【asin()、acos()、atan()】、双曲三角函数【sinh()、cosh()、tanh()】、exp、log、log10等
2.矩阵中与数组函数不同的:
expm、logm、sqrtm······

(五)关系操作与逻辑操作

(待续,不是非常重要)

(六)运算的优先级

运算的优先级从高到低依次为:

  1. 括号:()、[]、{}。括号可以用来改变运算符的优先级。
  2. 数组转置 (.‘)、数组幂 (.^ )、矩阵转置 (’)、矩阵幂 (^)
  3. 乘法、除法和取余:、/、\、.、./、.、%。
  4. 加法和减法:+、-。
  5. 冒号 :。
  6. 关系运算符:<、>、<=、>=、==、~=(不等于)。
  7. 逻辑运算符:&(与)、|(或)、~(非)。
  8. 逻辑与: &
  9. 逻辑或: |
  10. 先决与 :&&
  11. 先决或:||

表达式中存在多个运算符时,根据优先级,高优先级的运算符会先进行计算。如果有相同优先级的运算符,则按照结合性(从左到右或从右到左)进行计算。

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab中,可以使用多种方式进行矩阵数组的操作。可以使用直接输入法,利用M文件建立矩阵,或使用矩阵编辑器Matrix Editor完成输入和修改。直接输入法是将矩阵元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格分隔。可以通过索引和切片来访问和修改矩阵数组中的元素,也可以进行基本的数学运算和逻辑运算。 在Matlab中,还可以使用一些内置函数来创建矩阵数组。例如,可以使用zeros函数创建一个全零矩阵,使用ones函数创建一个全一矩阵,使用eye函数创建一个单位矩阵。可以使用rand和randn函数生成随机矩阵数组。还可以使用linspace和logspace函数生成等差数列或等比数列。 Matlab还提供了丰富的矩阵数组操作函数,如求和、差、积、转置、逆等。可以使用这些函数来进行数值计算和数据处理操作。可以使用reshape函数改变矩阵数组的形状,使用concatenate函数进行矩阵数组的拼接,使用sort函数对矩阵数组进行排序。 总而言之,在Matlab中,可以使用直接输入法、M文件、矩阵编辑器以及内置函数来进行矩阵数组的创建和操作。这些操作包括索引、切片、数学运算、逻辑运算、形状改变、拼接和排序等。这些功能使得在Matlab中进行数值计算和数据处理变得更加高效和方便。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Matlab 数组矩阵操作指南](https://download.csdn.net/download/weixin_41784475/88226798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [matlab矩阵数组的操作](https://download.csdn.net/download/qq_38470315/87699904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [MATLAB矩阵数组操作指南](https://download.csdn.net/download/weixin_41784475/88226776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值