
2.2 MATLAB基本数值类型
MATLAB的基本数据类型变量或者对象主要用来描述基本的数值对象,MATLAB的最基本数据类型是双精度类型和字符类型,不同数据类型的变量或对象占用的内存空间不同,也具有不同的操作函数。MATLAB还存在其他一些特殊数据如下:
(1)常量数据是指在使用MATLAB过程中由MATLAB提供的公共数据,数据可以通过数据类型转换的方法转换常量到不同的数据类型,还可以被赋予新的数值;
(2)空数组或空矩阵:在创建数组或者矩阵时,可以使用空数组或空矩阵辅助创建数组或者矩阵。
MATLAB基本数据类型如表2-3所示。
表2-3 基本数据类型

在MATLAB中,class函数可以用来获取变量或对象的类型、创建用户自定义的数据类型。
例如,在命令窗口输入:

运行结果如下:

MATLAB和C语言在处理数据类型和变量时的区别如下:在C语言中,任何变量在使用之前必须声明,然后赋值,在声明变量时就指定了变量的数据类型;在MATLAB中,任何数据变量都不需要预先声明,MATLAB将自动地将数据类型设置为双精度类型。
MATLAB系统默认的运算都是针对双精度类型的数据或变量,稀疏矩阵的元素仅能使用双精度类型的变量,spares类型的数据变量和整数类型数据、单精度数据类型变量之间的转换是非法的,在进行数据类型转换时,若输入参数的数据类型就是需要转换的数据类型,则MATLAB忽略转换,保持变量的原有特性。
【例2-33】 MATLAB处理数据类型和变量示例。
程序命令如下:

运行结果如下:

2.2.1 整数类型数据运算
在MATLAB中提供了整数类型数据的运算函数如表2-4所示。注意:参与整数运算的数据都必须大于0。
表2-4 整数类型数据的运算函数

【例2-34】 数据位“与”操作示例。
程序命令如下:

运行结果如下:

【例2-35】 数据位操作(bitset函数)示例。
程序命令如下:

运行结果如下:

【例2-36】 数据位操作(bitget函数)示例。
程序命令如下:

运行结果如下:

2.2.2 变量与常量
在MATLAB中,变量名可以有19个字符。字母A~Z、a~z、数字和下画线“_”可以作为变量名,但第一个字符必须是一个字母。预定义函数名也可以像一个变量名那样使用,但函数只有在变量由命令clear删除后才能使用,所以,不主张这样使用。
MATLAB是区分大小写字母的,如矩阵a和A是不一样的。MATLAB命令通常是用小写字母书写。例如,命令abs(A)给出了A的绝对值,但ABS(A)会导致在屏幕上显示如下错误信息:在变量使用之前,用户不需要指定一个变量的数据类型,也不必声明变量。
MATLAB有许多不同的数据类型,这对决定变量的大小和形式是非常重要的,特别适合于混合数据类型、矩阵、细胞矩阵、结构和对象。
对于每一种数据类型,均有一个名字相同的、可以把变量转换到那种类型的函数。在MATLAB中提供的常量如表2-5所示。
表2-5 MATLB的常量

eps、realmax、realmin三个常量具体的数值与运行MATLAB的计算机相关,不同的计算机系统可能具有不同的数值。例如:

运行结果如下:

MATLAB的常量数值是可以修改的,例如:

运行结果如下:

将inf应用于函数,计算结果可能为inf或NaN。进行数据转换时,Inf将获取相应数据类型的最大值,而NaN返回相应整数数据类型的数值0,浮点数类型则仍然为NaN。

运行结果如下:

MATLAB的常量是可以赋予新的数值的。一旦被赋予了新的数值,则常量代表的就是新值,而不是原有的值,只有执行clear命令后,常量才会代表原来的值。
【例2-37】 最小复数单位的使用示例。
程序命令如下:

运行结果如下:

2.2.3 数值
在MATLAB中,数值均采用十进制,可以带小数点及正负号。例如,以下写法都是合法的:

科学计数法采用字符e来表示10的幂。例如:

虚数的扩展名为i或者j。例如:

在采用IEEE浮点算法的计算机上,实数的数值范围大致为10e-308~10e308。
在MATLAB中输入同一数值时,有时会发现,在命令行窗口中显示数据的形式有所不同。例如,0.3有时显示0.3,但有时会显示0.300。这是因为数据显示格式是不同的。
在一般情况下,MATLAB内部每一个数据元素都是用双精度数来表示和存储的,数据输出时用户可以用format命令设置或改变数据输出格式。表2-6揭示了不同类型的数据显示格式。
表2-6 数据显示格式

【例2-38】 在不同数据格式下显示pi的值。
程序命令如下:

2.2.4 表达式
在MATLAB中,数学表达式的运算操作尽量设计地接近于习惯,不同于其他编程语言在有些情况下一次只能处理一个数据,MATLAB却允许快捷、方便地对整个矩阵进行操作。MATLAB表达式采用熟悉的数学运算符和优先级,如表2-7所示(表中运算符的优先级从上到下依次升高)。
表2-7 MATLAB的运算符优先级与表达式

MATLAB与经典的数学表达式也有所差别。例如,对矩阵进行右除与左除操作的结果是不同的。下面通过一个简单的例子演示复数矩阵的转置与共轭转置操作及其区别。
【例2-39】 求复数矩阵的转置及共轭转置。
程序命令如下:

运行结果如下:

2.2.5 空数组
空数组是指某一个维或者某些维的长度为0的数组。它是为了完成某些MATLAB操作和运算而专门设计的一种数组,利用空数组可以修改数组的大小,但不能修改数组的维数。
空数组不意味着什么都没有,空数组类型的变量在MATLAB的工作空间中是存在的。
使用空数组可以将大数组删除部分行或列,也可以删除多维数组的某一页。
【例2-40】 创建空数组示例。
程序命令如下:

运行结果如下:

【例2-41】 使用空数组删除示例。
程序命令如下:

运行结果如下:

2.2.6 逻辑运算
在MATLAB中,逻辑数据类型就是仅具有两个数值的一种数据类型,true用1表示,false用0表示。任何数值都可以参与逻辑运算,非零值看作逻辑真,零值看作逻辑假。
逻辑类型的数据只能通过数值类型转换,或者使用特殊的函数生成相应类型的数组或者矩阵。表2-8揭示了创建逻辑类型数据的函数。
表2-8 创建逻辑类型数据的函数

在使用true或者false函数创建逻辑类型数组时,若不指明参数,则创建一个逻辑类型的标量,在MATLAB中有些函数以is开头,这类函数是用来完成某种判断功能的函数。例如isnumeric(*)是判断输入的参数是否为数值类型,islogical(*)是判断输入的参数是否为逻辑类型。例如:

运行结果如下:

在MATLAB中,逻辑运算是指能够处理逻辑类型数据的运算,如表2-9所示。
表2-9 MATLAB的逻辑运算

参与逻辑运算的操作数不一定必须是逻辑类型的变量或常量,其他类型的数据也可以进行逻辑运算,但运算结果一定是逻辑类型的数据。例如:

运行结果如下:

逻辑“与”操作(&&)和“或”操作(||)均具有短路作用。例如进行a&&b&&c&&d运算时,若a为假(0),则后面的三个变量都不再被处理,运算结束,并返回运算结果逻辑假(0)。进行a||b||c||d运算时,若a为真(1),则后面的三个变量都不再被处理,运算结束,并返回运算结果逻辑真(1)。
【例2-42】 逻辑运算示例。
程序命令如下:

运行结果如下:

【例2-43】 函数any和all的使用示例(对向量)。
程序命令如下:

运行结果如下:

【例2-44】 函数any和all的使用示例(对矩阵)。
程序命令如下:

运行结果如下:

2.2.7 关系运算
在MATLAB中,关系运算是用来判断两个操作数关系的运算,表2-10列出了MATLAB的关系运算符。
表2-10 MATLAB的关系运算符

参与关系运算的操作数可以是各种数据类型的变量或者常数,但是运算结果是逻辑类型的数据。标量可以和数组(或矩阵)进行比较,比较时自动扩展标量,返回的结果是和数组同维的逻辑类型数组。若比较的是两个数组,则数组必须是同维的,且每一维的尺寸必须一致。
【例2-45】 利用()和各种运算符相结合完成复杂的关系运算。
程序命令如下:

运行结果如下:
