![MATLAB R2022a完全自学一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/854/47548854/b_47548854.jpg)
2.1.1 数值类型
基本的数值类型主要有整数、单精度浮点数和双精度浮点数,如表2-1所示。
表2-1 数值类型数据的分类
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_38_1.jpg?sign=1739290951-1SL3DfGjX7dYJKgUlr33mAxYeL7fKrHU-0-5eb48388717e34e2d3e4033c34024eea)
MATLAB中数值类型的数据包括有符号和无符号整数、单精度浮点数和双精度浮点数。在未加说明与特殊定义时,MATLAB对所有数值均按照双精度浮点数类型进行存储和操作。
在需要时,可以指定系统按照整数类型或单精度浮点数类型对指定的数字或数组进行存储、运算等。相对于双精度浮点数类型,整数类型与单精度浮点数类型的优点在于节省变量占用的内存空间(当然,要在满足精度要求的前提下)。
○ 提示
MATLAB会自动进行内存空间的使用和回收,而不像C语言,必须由使用者一一指定。这些功能使得MATLAB易学易用,使用者可专心致力于编写程序。
1.整数类型
MATLAB中提供了8种内置的整数类型,这8种整数类型的存储占用位数、能表示的数值范围和转换函数均不相同,如表2-2所示。
不同的整数类型所占用的位数不同,因此能够表示的数值范围也不同。在实际应用中,应根据实际需要合理选择合适的整数类型。
由于MATLAB中数值的默认存储类型是双精度浮点数类型,因此,在将变量设置为整数类型时,需要使用相应的转换函数,将双精度浮点数类型转换为指定的整数类型。
表2-2 MATLAB中的整数类型
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_39_1.jpg?sign=1739290951-2gp1C3mHUzDcV7kktkBBxkX548akh65A-0-b225a7367b4fbb9a91bb3d36028fdd08)
在转换过程中,MATLAB默认将待转换数值转换为与之最接近的整数值,若小数部分为0.5,则转换后的结果为与该浮点数最接近的两个整数中绝对值较大的一个。
另外,这些转换函数还可以将其他数据类型转换为指定的数据类型。在不超出数值范围的情况下,任意两个整数类型之间也可以通过转换函数进行相互转换。同时,由于不同的整数类型能够表示的数值范围不同,因此,当运算结果超出相应的整数类型能够表示的数值范围时,就会出现错误,运算结果被置为该整数类型能够表示的最大值或最小值。
MATLAB中还包含了几类使用不同运算法则的取整函数,也可以把浮点数转换成整数。这些取整函数及相应的转换方式如表2-3所示。
表2-3 MATLAB中的取整函数及相应的转换方式
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_39_2.jpg?sign=1739290951-vkt0j18MLp0vCr3ayBt7YuC7sIb5HFvv-0-1d213dbc3b0ae61508acaa12709d6e62)
2.浮点数类型
MATLAB中提供了单精度浮点数类型和双精度浮点数类型,其在存储占用位数、能够表示的数值范围、数值精度各方面均不相同,具体如表2-4所示。
由表2-4可知,单精度浮点数类型的占用位数少,因此占用内存小,但能够表示的数值范围和数值精度都比双精度浮点数类型小(低)。
由于MATLAB中的默认数值类型为双精度浮点数类型,因此与创建整数类型数值一样,也可以通过转换函数来实现单精度浮点数类型数值的创建。
表2-4 MATLAB中的浮点数类型
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_40_1.jpg?sign=1739290951-JKOtE8G5VASzyW7sOnMPkpXPdjIkAh0p-0-a5f32d5bf6215a47984a34350c18a285)
双精度浮点数在参与运算时,返回值的类型依赖于参与运算的其他数据的类型。当参与运算的其他数据为逻辑类型、字符类型时,返回值为双精度浮点数类型;当参与运算的其他数据为整数类型时,返回值为相应的整数类型;当参与运算的其他数据为单精度浮点数类型时,返回值为相应的单精度浮点数类型。
○ 提示
在MATLAB中,单精度浮点数类型不能与整数类型进行算术运算。
例2-1:浮点数参与的运算。
在命令行窗口中输入命令,并依次显示输出结果。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_40_2.jpg?sign=1739290951-trfeJoMFUj7Q9tcdWO8aQRfGFByJ9Lyn-0-095ffb0d4c4fb447f7b7daf340b2d01e)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_40_3.jpg?sign=1739290951-a452UOTVWXOkk3WerQXLzWmwyKevY1Ex-0-f389b8afe894437664e0aa9742583e7f)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_40_4.jpg?sign=1739290951-8BJkKdMAjcPj85zPpBcBAzfLBADtjDaf-0-cd10f2bdbd21b6bbcef673400b9369cb)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_40_5.jpg?sign=1739290951-OgO8pFnbhGw7LrMpswhr0eNml8atVCUc-0-631130c68a6506f582354f3994a23077)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_40_6.jpg?sign=1739290951-fQtp3tPGeWf4UZHqwXMoEBOEGvAsTn0Q-0-40c5680803c46dd5c63357e82a7b9470)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_40_7.jpg?sign=1739290951-1UA1JLTCn9gdCARY1GtqOVPSAZrEfVp5-0-ae57463499bcc74f18f32e8375ec7523)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_1.jpg?sign=1739290951-v7WWkqBQE4iO0vzb8TFAKKh5c04KjC3v-0-f3b856ef03d66e173fb05d2dd61ec2a1)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_2.jpg?sign=1739290951-1amDFHW29tgkLtYa62QIrGcSXpXXRv17-0-587884f869ba5cc4e6fd557dabc73566)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_3.jpg?sign=1739290951-EUFdazz2KSMUAYM8iAh0YXk58ntWRRgo-0-bcecfdc8c580b1ed6aab6c099a56dc12)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_4.jpg?sign=1739290951-8W9MvfPnU4ZmPew14WRcYWaheyidVbVv-0-a598f94447fac3173322ee55bc95d142)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_5.jpg?sign=1739290951-BVMyOuEjFZmH8X0K3wu8DhCj95PlnPBH-0-51cf8cc67f3c7eaac0ecbf1eb7d2810f)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_6.jpg?sign=1739290951-XQskkrGiQTxTCePOhRmPPHm4igQg0hld-0-1f2aa06e4b337ba8700789be98d6f54b)
由于浮点数只占用一定的存储位数,其中只有有限位分别用来存储指数部分和小数部分,因此,浮点数类型能够表示的实际数值是有限且离散的,任何两个相邻的浮点数之间都有微小间隙,而处在间隙中的数值只能用这两个相邻的浮点数中的一个来表示。MATLAB中提供了eps函数,可以获取一个数值和最接近该数值的浮点数之间的间隙。
例2-2:浮点数的精度。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_7.jpg?sign=1739290951-C80KirHM6SaQJ5Dv5NnlQoukz3orE6xy-0-b304d72db91ecafc415c9e750df8483b)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_8.jpg?sign=1739290951-xiscPIszVHQpm17DOnmC9S4dPUHlRoqI-0-28ffdda5224d40d7af1afe70d5232d33)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_9.jpg?sign=1739290951-JlsFnH92D3Oxcx2iFRm1T0CPNbEpNNxn-0-bff4500df624c019e84fb9e91f3899f0)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_41_10.jpg?sign=1739290951-2dvHqHrTYMw1BKbSnfhHLFKQcpM3XUQ3-0-2e35250ec332a186d1ff1da6e97a88f4)
3.复数
复数包括实部和虚部两部分。MATLAB中默认使用字符i或j作为虚部标志。在创建复数时,可以直接按照复数形式进行输入或使用complex函数。MATLAB库函数中关于复数的相关函数如表2-5所示。
表2-5 MATLAB库函数中关于复数的相关函数
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_42_1.jpg?sign=1739290951-KYcsvwY8cvhtPAPW6IL8EbYoz10p9ER5-0-258b29e21d234d81ad9d5e83d46f9ccb)
4.无穷量和非数值量
MATLAB中使用Inf和-Inf分别代表正无穷量和负无穷量,NaN表示非数值量。正、负无穷量一般是由于运算溢出导致超出双精度浮点数类型能表示的数值范围而产生的;而非数值量则是由于0/0或Inf/Inf类型的非正常运算而产生的,这两种NaN彼此是不相等的。
除了异常运算结果,MATLAB还提供了特定函数Inf和NaN来创建指定数值类型的无穷量与非数值量,生成结果默认为双精度浮点数类型。还有一种特殊的指数类型的数据,叫作非数,通常表示运算得到的数值结果超出了运算范围。非数的实部用NaN表示,虚部用Inf表示。
例2-3:无穷量及非数值量的产生。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_42_2.jpg?sign=1739290951-UVV5OoAd1OBAXNqdNJeM32HGm6EKPjuv-0-cf8a02fcc41c2633de7084b0b1ac799d)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_42_3.jpg?sign=1739290951-5xeufi2I1cCy9mPgXqutxPRKe7uXs9eM-0-27566becc49ac23139ffcb276538c156)