![MATLAB R2020a完全自学一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/483/34667483/b_34667483.jpg)
3.1 数组运算
数组运算是MATLAB计算的基础。由于MATLAB面向对象的特性,这种数值数组成为MATLAB最重要的一种内建数据类型,而数组运算就是定义这种数据结构的方法。本节将系统地列出具备数组运算能力的函数名称,为兼顾一般性,以二维数组的运算为例,读者可推广至多维数组和多维矩阵的运算。
下面介绍在MATLAB中如何创建数组,以及数组的常用操作等,包括数组的算术运算、关系运算和逻辑运算。
3.1.1 数组的创建和操作
在MATLAB中一般使用方括号“[ ]”、逗号“,”、空格和分号“;”来创建数组,数组中同一行的元素使用逗号或空格进行分隔,不同行之间用分号进行分隔。
例3-1:创建空数组、行向量、列向量示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_2.jpg?sign=1739314459-u3PymCgu8ZzPgbleO82lVfruaLNFQ5Fk-0-85da748f10a2de62966feb6d99ce17d6)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_3.jpg?sign=1739314459-THUoQEFuajYj6cQkucRy1A5j5BmMYGPd-0-cb958b32076b4a1a6f53ace51b37b1dd)
例3-2:访问数组示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_4.jpg?sign=1739314459-hl7hYeEIkgbbtY2FLrvUcdY5IQHwPMu9-0-846ebcd6890832b4a0e49e7940801335)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_5.jpg?sign=1739314459-XYxd8UJsc7rYoITJh3EJhjcVbzgxNVwI-0-692959b5dbd75ee1845caa246c0a3dff)
例3-3:子数组的赋值示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_6.jpg?sign=1739314459-pyx2PDPK0e5cXR685ltd3BrH0Dpe06Kh-0-3ada0278cd9ef6d54d1693580060a692)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_7.jpg?sign=1739314459-PgAuNCDkWSjgAm2L9mCgbdRs3rZC2H24-0-82c441ace02ecf580e5bf959ad84bb90)
在MATLAB中还可以通过其他各种方式创建数组,具体如下所示。
1.通过冒号创建一维数组
在MATLAB中,通过冒号创建一维数组的代码如下:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_8.jpg?sign=1739314459-DNgR0u4jrBUqUHW2qpTF4QhYDvKVrsg3-0-ac5046f529cccf3b7664a5fa6d9a55d3)
其中,A是创建一维数组的第一个变量,step是每次递增或递减的数值,直到最后一个元素和B的差的绝对值小于或等于step的绝对值为止。
例3-4:通过冒号创建一维数组示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_9.jpg?sign=1739314459-EoW5n5gP3GG3kJZD92DzCuqub6mG7RkS-0-2d240c08b302b04c5aad1da98dd03c8b)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_10.jpg?sign=1739314459-fvHIZOt9xTCpW7oWugUXgaPwclhwtwgg-0-7dc8360ac4eeed15f018214226d8f8f0)
2.通过logspace()函数创建一维数组
在MATLAB中常用logspace()函数创建一维数组,该函数的调用方式如下。
● y=logspace(a,b):该函数创建行向量y,第一个元素为10a,最后一个元素为10b,形成总数为50个元素的等比数列。
● y=logspace(a,b,n):该函数创建行向量y,第一个元素为10a,最后一个元素为10b,形成总数为n个元素的等比数列。
例3-5:通过logspace()函数创建一维数组示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_11.jpg?sign=1739314459-xUxut8a0VGkJYc2D2bGAzoY38c0WzRpA-0-e2876517e644a52672b4c27d27049181)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_12.jpg?sign=1739314459-w6u0qh3cHr0y9c9GCMI9aXuJxr7cp0FQ-0-ac0532aeae31b5978e5453ba86c97b92)
3.通过linspace()函数创建一维数组
在MATLAB中常用linspace()函数创建一维数组,该函数的调用方式如下。
● y=linspace(a,b):该函数创建行向量y,第一个元素为a,最后一个元素为b,形成总数为100个元素的线性间隔向量。
● y=linspace(a,b,n):该函数创建行向量y,第一个元素为a,最后一个元素为b,形成总数为n个元素的线性间隔向量。
例3-6:通过linspace()函数创建一维数组示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_13.jpg?sign=1739314459-eIsiaefqIhiMcXMUBcJPUp84NX4nf8rt-0-8d7d68a028316b9d911ccecc3eff8e9f)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_14.jpg?sign=1739314459-omSirwAaV1A7yxSIkFeUynsEvsOfakNm-0-1ff3d283e76b5ab49871ce495f10539a)
3.1.2 数组的常见运算
1.数组的算术运算
数组的运算是从数组的单个元素出发,针对每个元素进行的运算。在MATLAB中,一维数组的算术运算包括加、减、乘、左除、右除和乘方。
数组的加减运算:通过格式A+B或A-B可实现数组的加减运算。但是运算规则要求数组A和B的维数相同。
○提示
如果两个数组的维数不相同,则将给出错误的信息。
例3-7:数组的加减运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_15.jpg?sign=1739314459-GYdGGvsxn7w2xos6L2XszoBC23hIj4yL-0-53f2bcf08d1de6803b7e637f7a525887)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_16.jpg?sign=1739314459-eNqTHb2WTciESyrZ018mFJpsOd7sLNzj-0-fb88d011c5b1f2124106e734579b7d80)
数组的乘除运算:通过格式“.*”或“./”可实现数组的乘除运算。但是运算规则要求数组A和B的维数相同。
乘法:数组A和B的维数相同,运算为数组对应元素相乘,计算结果与A和B是相同维数的数组。
除法:数组A和B的维数相同,运算为数组对应元素相除,计算结果与A和B是相同维数的数组。
右除和左除的关系:A./B=B.\A,其中A是被除数,B是除数。
○提示
如果两个数组的维数不相同,则将给出错误的信息。
例3-8:数组的乘法运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_17.jpg?sign=1739314459-6P8722dw9HiFltJ3JHx8sVZwwWr2bILR-0-3954ddd09543c714ce53db5e748fdf89)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_18.jpg?sign=1739314459-jl6j4SeJngQCcs9YVp34cv28FlvfGgfs-0-bfd01c06302f0b8eca91aff84fedaae3)
例3-9:数组的除法运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_19.jpg?sign=1739314459-aHZV7NxhKTIXcQ404pDqRghUxgFFfyX4-0-fd0b4fb11f443a34771f878ffbf0f4e1)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_20.jpg?sign=1739314459-lOkDEMfyoDVmdNq2xo7Z9a8cleXwmyNZ-0-450e79bd47b6bb56f8a8e7adbe00a427)
通过乘方格式“.^”实现数组的乘方运算。数组的乘方运算包括数组间的乘方运算、数组与某个具体数值的乘方运算,以及常数与数组的乘方运算。
例3-10:数组的乘方运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_21.jpg?sign=1739314459-7m05Rt39FNAKZfxFvOZyYUSBynk8DAW0-0-8841417ffaff3a3323dd072dd967be15)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_22.jpg?sign=1739314459-ONMBvlAuMU89lTkwBEeZxLSMwxZxVAY8-0-baa180e6f5472be73eca7b505e432cbb)
通过使用函数dot()可实现数组的点积运算,但是运算规则要求数组A和B的维数相同,其调用格式如下:
● C=dot(A,B)。
● C=dot(A,B,dim)。
例3-11:数组的点积运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_23.jpg?sign=1739314459-LxVNWBLIUjT9UjdQkKZPcnyd3K9j7uWe-0-ff704073c98a21cd7cbf5705a604eade)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_24.jpg?sign=1739314459-4waG1rKtN37gwaHJPaUCuSm7WStGhaXA-0-f390729c14f6b0f5d0d3305aecfbc05c)
2.数组的关系运算
在MATLAB中提供了6种数组关系运算符,即<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(恒等于)、~=(不等于)。
关系运算的运算法则如下:
● 当两个比较量是标量时,直接比较两个数的大小。若关系成立,则返回的结果为1,否则为0。
● 当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的关系运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0或1。
例3-12:数组的关系运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_25.jpg?sign=1739314459-6W3NNHwQN2oL1mVK23a02tzZGLwnrqGg-0-7c93b4c32c8c6947393a516a6d2ce51b)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_26.jpg?sign=1739314459-dJLvFsPKyc2nhzSYwPTXo79XkiYxeeop-0-7c214fcc1f32c2733620ac1e8ca1b913)
3.数组的逻辑运算
在MATLAB中提供了3种数组逻辑运算符,即&(与)、|(或)和~(非)。逻辑运算的运算法则如下:
● 如果是非零元素则为真,用1表示;如果是零元素则为假,用0表示。
● 当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的逻辑运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0或1。
● 在进行与运算(a&b)时,a、b全为非零,则为真,运算结果为1。在进行或运算(a|b)时,只要a、b有一个为非零,则运算结果为1。在进行非运算(~a)时,若a为0,则运算结果为1;若a为非零,则运算结果为0。
例3-13:数组的逻辑运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_27.jpg?sign=1739314459-FDoL2sIp5RbfBxCzl1AYqBg2y9vzafBC-0-3bd2b77a4a449dac44f177dce6216ac4)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_28.jpg?sign=1739314459-Ni79Ho3AP3wj4EbB55okY9zvd5J7iKVc-0-b35f5a0f070d7fbc09aa5122d2ea7da5)