![MATLAB与数学实验(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/243/52152243/b_52152243.jpg)
1.2 基本运算
MATLAB的产生是由矩阵运算推出的,因此矩阵和数组运算是MATLAB最基本、最重要的功能.本章主要介绍MATLAB的数据类型,以及矩阵和数组的基本运算.
1.2.1 数据类型
MATLAB R2023定义了15种基本的数据类型,包括整型、浮点型、字符型和逻辑型等,用户也可以定义自己的数据类型.MATLAB内部的所有数据类型都是按照数组的形式进行存储和运算的.
数值型包括整数和浮点数,其中整数包括有符号数和无符号数,浮点数包括单精度型和双精度型.在默认情况下,MATLAB R2023默认将所有数值都按照双精度浮点数类型来存储和操作,用户如果要节省存储空间,可以使用不同的数据类型.
1.常数和变量
1)常数.MATLAB的常数采用十进制表示,可以用带小数点的形式直接表示,也可以用科学计数法表示,数值的表示范围是10-309~10309.
2)变量.变量是数值计算的基本单元,使用MATLAB变量时无须先定义,其名称是第一次合法出现时的名称,因此使用起来很便捷.
(1)变量的命名规则
●变量名区分字母的大小写.例如“A”和“a”是不同的变量.
●变量名不能超过63个字符,第63个字符后的字符被忽略.
●变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能有空格和标点符号.
●关键字(如if、while等)不能作为变量名.
在MATLAB R2023中,所有标识符(包括函数名、文件名)都遵循变量名的命名规则.
(2)特殊变量
MATLAB有一些自己的特殊变量,是由系统预先自动定义的,当MATLAB启动时驻留在内存中,常用特殊变量如表1-4所示.
表1-4 常用特殊变量
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/22_01.jpg?sign=1739242282-t4R7KMOlNyZGz7Q169vwxbQqIcaNiJCL-0-df27397995e1cd8a0d0a8cb52be4c72a)
2.整数和浮点数
(1)整数
MATLAB R2023提供了8种内置的整数类型,为了在使用时提高运行速度和存储空间,应该尽量使用字节少的数据类型,使用类型转换函数可以将各种整数类型强制相互转换.表1-5中列出了各种整数类型的数值范围和类型转换函数.
表1-5 整数的数据类型转换函数
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/22_02.jpg?sign=1739242282-rLEFAg5M59PiGVcflKnegJbf1w1OaJJU-0-961a6be3d6a992dc69ee401e65252325)
(2)浮点数
浮点数包括单精度型(single)和双精度型(double),其中双精度型为MATLAB默认的数据类型.表1-6中列出了各种浮点数的数值范围和类型转换函数.
表1-6 浮点数的数据类型转换函数
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/23_01.jpg?sign=1739242282-GpCiQ6wiizIfCzbFGcMqMvIB7DGsVB33-0-a5e77c2b612f941b5b0cf1e571b04fc8)
3.复数
MATLAB用特殊变量“i”和“j”表述虚数的单位,因此,注意在编程时不要和其他变量混淆.
复数的产生可以有几种方式:
●z=a+b*i或z=a+b*j.
●z=a+bi或z=a+bj(当b为常数时).
●z=r*exp(i*theta),其中相角theta以弧度为单位,复数z的实部a=r*cos(theta);复数z的虚部b=r*sin(theta).
●z=complex(a,b).
MATLAB中关于复数的运算函数如表1-7所示.
表1-7 复数的运算函数
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/23_02.jpg?sign=1739242282-6BCAIrSxFGzmF0b0rv8I9dWzN8905CRr-0-62f6e04526803f62fab6c03e6454d39a)
1.2.2 矩阵和数组的运算
1.矩阵的输入
下面介绍几种矩阵的常用输入方法.
(1)直接输入
这是一种最方便、最直接的方法,它适用于对象维数较少的矩阵.矩阵的输入应遵循以下基本规则:
●矩阵元素应用方括号“[]”括住.
●同行内的元素间用逗号“,”或空格隔开.
●行与行之间用分号“;”或回车键隔开.
●元素可以是数值或表达式.
例1-5 直接输入命令创建矩阵
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/23_03.jpg?sign=1739242282-IeSFiuMUIyK9Rtlx37d0mxQ7RCbmu6an-0-b9ba7895404c64d1786ff1db53cd87ab)
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/23_04.jpg?sign=1739242282-H1vL891cnhR5Loyxbfo5ZlPvj0FXioBM-0-46d73d6579997eba356593636513f35e)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/24_01.jpg?sign=1739242282-ZsMLSnbodOtxdjVZfScs1QSSf774LH5J-0-bc6cfd7572f5415cbbdf855f9a0f66ed)
(2)用矩阵编辑器输入
矩阵编辑器适用于维数较大的矩阵.在调用矩阵编辑器之前必须先定义一个变量,无论是一个数值还是一个矩阵均可.输入步骤如下:
●在命令行窗口创建变量A.
●在工作区可以看到多了一个变量A,双击变量A就可打开矩阵编辑器.
●选中元素可以直接修改元素的值,修改完毕后单击关闭按钮,这时变量就被定义并保存了.
(3)用矩阵函数生成矩阵
除了逐个输入元素生成所需矩阵外,MATLAB还提供了大量的函数来创建一些特殊的矩阵.
1)生成对角矩阵:
●A=diag(v,k)生成主对角线方向上的第k(整数)层元素是向量v的矩阵.规定:当k=0时,它表示矩阵的主对角线;当k>0时,它表示主对角线的平行位置上方的第k层;当k<0时,它表示主对角线的平行位置下方的第|k|层.
●v=diag(A,k)提取矩阵A中主对角线方向上第k(整数)层元素,得到的是向量v.
2)魔方矩阵(矩阵中每行、每列及两条对角线上的元素和都相等):magic(n)生成n阶魔方矩阵,其中n为大于2的正整数.
3)随机矩阵:rand(m,n)随机生成服从均匀分布的m×n矩阵,其元素为0~1之间的数.
此外,还有零矩阵、单位矩阵、元素全为1的矩阵等特殊矩阵,函数功能见表2-5.
表1-8 常用的矩阵函数及其功能
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/24_02.jpg?sign=1739242282-7379GPPamYfflCcyKSoJIEHBXJDF1z9N-0-7135fd93de9a519b07d4a481bfb064ad)
例1-6 利用函数生成矩阵
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/24_03.jpg?sign=1739242282-qKqXRN2fJzzo1oFiET0Yd5l2xd7qVj4H-0-cb75678b257da1afa5d93315652e66e5)
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_01.jpg?sign=1739242282-lOqOOh4AGabhu72GdbeIUzs6KuiIKMfJ-0-5097405da8e31727a72db0433ad64b79)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_02.jpg?sign=1739242282-Wzuk3dcFUYMw9n9V4Y3qdofzdEkrlCtD-0-a936a6663dc14c68a2a20cdddda67ad2)
例1-7 (1)生成一个3阶魔方矩阵A;(2)生成一个4阶单位矩阵B.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_03.jpg?sign=1739242282-dGu8LHrOmMmMDMFvO0ECYpyNG50Bj9Pl-0-3c8c8829adcf1be602a0b823acbd3f75)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_04.jpg?sign=1739242282-HGshwaTsb1iWxR0v8Y8JSFfGEhibEP7f-0-713e7d5d2bca2359d8772caeb0d83087)
例1-8 输入矩阵
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_05.jpg?sign=1739242282-1PdhNQvXoKg47itDp3r99rJOQNFyC5V5-0-e33567e66ef78eb401fc6425b2ac0669)
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_06.jpg?sign=1739242282-0bv03uz4C4q8m9JKEfsaZViQXnQO8aBS-0-eb7f29e513fa2db8fabb00827a9de61e)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_07.jpg?sign=1739242282-DPY7SYqeOnTYZco6XSB9qeIO1gO3ad3B-0-201b4afd5976a1f43da3788a14e48491)
例1-9 随机生成含有5个元素的行向量.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/25_08.jpg?sign=1739242282-7IkXQHKNCtUbaQjfLWCGjT8AzbLWJwsy-0-088f3d4784b24b42efa6f24dde262b0f)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/26_01.jpg?sign=1739242282-b3sB2c4NLzjrqf0vKMJbYq7pQbFPjwvH-0-8eca379bfa7c3ec84a32c972373f3aaa)
例1-10 随机生成数值在10~30之间的含有5个元素的行向量.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/26_02.jpg?sign=1739242282-saHWpDNSY64MK21VZYIHGDb1MnKu2mGM-0-127ad998b741441324e3feec3251a833)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/26_03.jpg?sign=1739242282-QE6X3gLsMUkQiuuX984rAFrROECFCeJb-0-0fdd98cff706adb9cdd8a4328f7c7de9)
例1-11 生成三对角矩阵
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/26_04.jpg?sign=1739242282-elwPzn2FoVvMc15GHKtT4oCF34krd1qO-0-47c3f7f0516b0ad79d3625efe79ca9d7)
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/26_05.jpg?sign=1739242282-WdcH1TdkfoBaWlnbqsQKJqXqK3D5GXt7-0-cb91043184966465c5602815cba1063f)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/26_06.jpg?sign=1739242282-kBkdCUaetx8D1ObzYe9hJvkhSyeqzwQk-0-0e1e89796e79af849027db59eacfc5ef)
(4)通过文件生成
有时需要处理一些没有规律的数据,如果在命令行窗口输入,清除后再次使用时需要重新输入,这就增加了工作量.为解决此类问题,MATLAB提供了两种解决方案:一种方案是直接将数据作为矩阵输入到M文件中;另一种方案是将数据作为变量保存到MAT文件中.
用M文件保存矩阵的方法是在M文件编辑器中按照正常输入矩阵的方法输入数据,然后将其保存成M文件.使用时在命令行窗口直接输入文件名即可.
例1-12 用M文件保存矩阵
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/27_01.jpg?sign=1739242282-MPfpvQ748xlnGZweENnM7frE8bJNUGp5-0-577550a3f2a851c6e549330293d808a6)
解 在M文件编辑器中输入以下矩阵,保存成文件shuju1.m:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/27_02.jpg?sign=1739242282-0GXLpRr8T8Mnw56DZ18d1QIAl8NmblJX-0-3e8c2fbc141331c796f5ed9061df56bb)
在命令行窗口直接输入文件名将显示矩阵信息:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/27_03.jpg?sign=1739242282-abWJPZScHYk6RB6xK4fhKlOvqSsSkJdu-0-ad1e3471c2845852530c2f87443e8e89)
(5)数组生成
数组作为特殊的矩阵,即1×n矩阵或n×1矩阵,除了可以作为普通的矩阵输入外,还有其他生成方式.
1)使用from:step:to生成数组,当step省略时,表示步长step=1.当step为负数时,可以创建降序的数组.
例1-13 使用from:step:to创建数组.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/27_04.jpg?sign=1739242282-1EdA047at2jI5bP3wEmTvvAwiC5yOWaJ-0-9126aa8eb9f49ea54fa6274d2a5fee0b)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/27_05.jpg?sign=1739242282-18wuHBSvEZ7YIuOhUHQdwiTjXhVRGp8k-0-b080dae0548b3d67f0b3287ef49e0d5c)
2)使用linspace和logspace函数生成数组.linspace用来生成线性等分数组,logspace用来生成对数等分数组.logspace函数可以用于对数坐标的绘制.
命令格式如下:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/27_06.jpg?sign=1739242282-v7tA3K7IhDv3nErawlwyMhOIkqCQDKOj-0-224a8997a4b19bc04f0f5b2a1da83fc3)
2.矩阵和数组的算术运算
矩阵的运算规则是按照线性代数运算法则定义的,但是有着明确而严格的数学规则,而数组运算是按数组的元素逐个进行的.
(1)矩阵运算
矩阵的基本运算包括加法(+)、减法(-)、乘法(×)、左除()、右除(/)和乘幂(^)等.另外还有其他运算,如求矩阵A的转置(transpose(A))、A的行列式(det(A))、A的秩(rank(A))等,本书后面的章节将对这些运算进行详细介绍.
(2)数组运算
数组运算又称点运算,其加、减、乘、除和乘方运算都是对两个尺寸相同的数组进行元素对元素的运算.设数组为
α=[a1,a2,…,an],β=[b1,b2,…,bn]
则对应的具体运算为
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/28_01.jpg?sign=1739242282-vmZgyIrK1LwwxrRA8f4JCbVMjoTqNMfK-0-282f5ee6c1d7d9c9301171dd866f93b7)
例1-14 数组运算示例.
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/28_02.jpg?sign=1739242282-oAvkmd3G4Q16n6k5Yr26oCeEsRKkK9Fo-0-1e55126216b9cc7a98f2081680708f28)
例1-15 计算sin(kπ/2)(k=±2,±1,0)的值.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/28_03.jpg?sign=1739242282-9Jtwh8C9ViSw6Jsr1iyDXfIEo6sLbAPr-0-b2d35fa25eb1aed947cae1f6c0246062)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/28_04.jpg?sign=1739242282-tHy7zLKEEf4cqJQnfk8r9uyqWytNqUaX-0-5dac8d8c1977549478c8ebdb6b717ac4)
从以上示例可以看出,数组运算是对应元素的运算.
3.关系运算和逻辑运算
MATLAB常用的关系操作符有<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、~=(不等于).关系运算的结果是逻辑值1(true)或0(false).常用的逻辑运算符是&(与)、|(或)、~(非)和xor(异或).
例1-16 已知矩阵,对它们进行简单的关系与逻辑运算.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_01.jpg?sign=1739242282-vH3H1dUnhTZEixKIrPEcA0REWMfMTXW3-0-227dba12ef7220cf4097ab25158e0ef1)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_02.jpg?sign=1739242282-pZegft9hxmxlRHBBkVI6FbUzjBUKDyww-0-47495be93aec997b9e1215cb76afc5c6)
1.2.3 字符串
MATLAB处理字符串的功能也非常强大,字符串用单引号('')括起的一串字符表示.
1.字符串的输入
1)直接赋值:用单引号('')括起字符来直接赋值创建字符串.
●输入英文字符:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_03.jpg?sign=1739242282-3DYcoZX6Gukty051lfYTNIHQIdRrCOnj-0-1ee128a956fe3b97f7cd1915b10d516e)
●输入中文字符:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_04.jpg?sign=1739242282-xmvAZ8C8jlVi4tbFRHlF0Bt6HUxX1L7G-0-4b1e3998d99d4d42477477b0a11252ec)
●使用两个单引号输入字符串中的单引号:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_05.jpg?sign=1739242282-XMZZcVib6sbDkrDvp8A42ed74krC7c11-0-267a86db16b1d081634cf2b496ba2a13)
2)多个字符串组合.
●用“,”连成长字符串:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_06.jpg?sign=1739242282-KDBljydtzY9J6YCQPC69W7A6uwGj3BFL-0-f8f80b426e9e9380018a565f1f0bbf29)
●用“;”构成m×n的字符串矩阵,每行字符串元素的个数可以不同,但每行字符的总数必须相同,否则系统报错.
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_07.jpg?sign=1739242282-mxRhuwgyxtAPmAsiLehzbI6E7iatCoiC-0-00532640c3b02b72a8a5109fd6e9eb5a)
2.字符串常用操作
MATLAB R2023可以对字符串进行查找、比较、运行等操作.
例1-17 使用字符串函数运算.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/29_08.jpg?sign=1739242282-qJE62lfoXeepIV8gapkfgsTBV4v6evB7-0-65e76d4d0469dff264296423960281f6)
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/30_01.jpg?sign=1739242282-Gkkb4keD59bHUXDk6wPldKDagsEMgZ3w-0-f7aab288a64e3cae77979afa6df3e26d)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/30_02.jpg?sign=1739242282-dmwskz2N2onClhzl3MD1Ay4ACgDsFNk8-0-ae0775cc1630b88da3b15960aaf81e05)
常用的字符串函数如表1-9所示.
表1-9 常用的字符串函数
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/30_03.jpg?sign=1739242282-pfLq4ijpRRbsVxzvqXKzddGdNrpRIAUP-0-2973865c290784fa9959210b7a1e33bf)