![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=1739599828-da2MqO93ESGwY97Kn0VjqrU2UACUJO3h-0-ff37aaa9a174bd44261f0ec36724224c)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_3.jpg?sign=1739599828-pwmDzjZV3JeNM0sgYoI5QDtW7ErCyO7m-0-0e785de2d61cf7c2a5dd8896493c8304)
例3-2:访问数组示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_4.jpg?sign=1739599828-njYbVbzxxkpogkQ2z90nbLK4lZ6mu9m9-0-d840c0a5bab54fbdb4b707508a14fcf8)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_5.jpg?sign=1739599828-mqiNIqGgzgmp21AutHxqdctenYZd7weg-0-c7ea9bc9f0da82a047a745f3ce946a91)
例3-3:子数组的赋值示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_6.jpg?sign=1739599828-ex5gGJELRpPC3KIRWOdgimQybuOHvYTI-0-c2513fb6cc4ae45bf2509c3b0911422f)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_7.jpg?sign=1739599828-QdYe3L5lRtoAot6H8B5icYH2XlsR1S3w-0-4580f776ccbfb17a29fa549369ed9723)
在MATLAB中还可以通过其他各种方式创建数组,具体如下所示。
1.通过冒号创建一维数组
在MATLAB中,通过冒号创建一维数组的代码如下:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_8.jpg?sign=1739599828-CRT9B37oQVFikfhTngxA5d1OpQrDc8Mz-0-7cf028ce1637c24c463c872724b1315e)
其中,A是创建一维数组的第一个变量,step是每次递增或递减的数值,直到最后一个元素和B的差的绝对值小于或等于step的绝对值为止。
例3-4:通过冒号创建一维数组示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_9.jpg?sign=1739599828-2SiLpVaaKqNOgbpn3rh48KflQpmxH2Ky-0-3c5905ff306633176d0c8cb802f127ab)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_10.jpg?sign=1739599828-wSurW4whPfurwqquKUlz86qmexd2RQsg-0-72889057da74474ea0096e023ec21d74)
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=1739599828-Lhz4kVwKPKxDg4QvolehxiA4vyylWFiB-0-b24d13ec194b2d9ab46fe9d475e8ac4d)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_12.jpg?sign=1739599828-daSaVR1uegUxscDHtGAeBuwrqkwlfm6P-0-4268c13b2f4492dd83e98d7d7ca121f7)
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=1739599828-KwMZhz3pGbw1XLTIP5Xig1hZxyP7uGhl-0-87d3761df5852a596d0f6340bc22a326)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_14.jpg?sign=1739599828-qKyD8c000vE3iQRLdsoLIWV6plR9G8xY-0-a90dacb7222aec9cd2208e94144b31ed)
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=1739599828-WkEOVLKvWgWv0KbcVtAzHOfW3o1DWtSz-0-400e575835fd7ae517f0fc5c0296b9b5)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_16.jpg?sign=1739599828-iU8fxaNfwDwYYVg45c41wglvZ3gIhWey-0-e1740ab47d5f1f51dc2882f645089caf)
数组的乘除运算:通过格式“.*”或“./”可实现数组的乘除运算。但是运算规则要求数组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=1739599828-yw3PE3FXYk5uu42cBCAWPyzyWgEUmRrX-0-8340763f8935ca3fb2f45ebb0422024f)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_18.jpg?sign=1739599828-HBGQOXmGRebgIPV0tSJKj8PbJCEwAHJP-0-096584ac24283f564fdc2ae2602249d4)
例3-9:数组的除法运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_19.jpg?sign=1739599828-eM50D3fjMLgcg9G7Ok4KMQ5RsYTILdaB-0-149a23b129a9c6dfd655521591a9c634)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_20.jpg?sign=1739599828-VNNzd09G70xME0lU7OoXq6AWxejYicfC-0-3b77d55de3072b398e29392f5b46220b)
通过乘方格式“.^”实现数组的乘方运算。数组的乘方运算包括数组间的乘方运算、数组与某个具体数值的乘方运算,以及常数与数组的乘方运算。
例3-10:数组的乘方运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_21.jpg?sign=1739599828-Ye9suy9JzPH9my8jkQmr7OiQ3yGzh7rb-0-30ff948d05052ec1bfe1854a15924439)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_22.jpg?sign=1739599828-TxZIdcq6x4DOuG4SydvPwAGDsZlsWYyY-0-92eb76eed3855899d5206a2e51a9467e)
通过使用函数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=1739599828-f4Jft8A13dSxEKKpQsxvwhiaK8ZsMDPv-0-96305e71373a668f7d61c130acf63000)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_24.jpg?sign=1739599828-hrIK7h3LaDrE3COMb7iuUDYk5P9MNQbK-0-83b192d7ba3b970ba18bf3f81f360b7b)
2.数组的关系运算
在MATLAB中提供了6种数组关系运算符,即<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(恒等于)、~=(不等于)。
关系运算的运算法则如下:
● 当两个比较量是标量时,直接比较两个数的大小。若关系成立,则返回的结果为1,否则为0。
● 当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的关系运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0或1。
例3-12:数组的关系运算示例。
在命令行窗口中依次输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_25.jpg?sign=1739599828-DDSDhQiPzwZPgSe4PxNJ1z9qMC3ZtYoA-0-458fad0e3eb95d027ee8b828ef41891b)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_26.jpg?sign=1739599828-5yGNMrH88hsli4G0qxVIhxQQdZAmiwSK-0-74d8abed74da636eeb2d61bc343c661e)
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=1739599828-dL5mCL97tNHSXFhTntbpjM0beqkAOGoJ-0-4f6b21e2ad31c345bc54db37cfb5dedb)
输出结果:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt005_28.jpg?sign=1739599828-CthCp46IemIYWdcnI2OrowADA2NSrmtP-0-de3963378b1c7818782550411579c494)