2.1 数据类型

数字与字符是数学运算中的基本组成部分。作为可以解决大部分数学问题的计算机软件-MATLAB,使用的语言也是由数字与字符组成,不同的数字与字符组成了数值、符号、函数。

MATLAB中定义了许多数据类型,根据不同的功能划分有不同的分类。

2.1.1 数值类型

MATLAB以矩阵为基本运算单元,而构成矩阵的基本单元是数值,数值即数学中常见的数字与字符,是MATLAB程序设计运行的基础。在程序设计过程中,用户根据不同的需求,选择对应的函数,进行数据转换。

数值类型包含整型、浮点数和复数3种类型。

1. 整数型

整型数据是不包含小数部分的数值型数据,用字母I表示。整型数据只用来表示整数,以二进制形式存储。下面介绍整形数据的分类。

•char:字符型数据,属于整形数据的一种,占用一个字节。

•unsigned char:无符号字符型数据,属于整形数据的一种,占用一个字节。

•short:短整形数据,属于整形数据的一种,占用两个字节。

•unsigned short:无符号短整型数据,属于整形数据的一种,占用两个字节。

•int:整形数据,属于整形数据的一种,占用四个字节。

•unsigned int:无符号整型数据,属于整形数据的一种,占用四个字节。

•long:长整型数据,属于整形数据的一种,占用四个字节。

•unsigned long:无符号长整型数据,属于整形数据的一种,占用四个字节。

2. 浮点型

浮点型数据只采用十进制,有两种形式:十进制数形式和指数形式。

(1)十进制数形式

由数字0~9和小数点组成。如0.0、0.25、5.789、0.13、5.0、300.0、-267.8230。

(2)指数形式

由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。

其一般形式为

a E n

其中,a为十进制数,n为十进制整数,表示的值为a×10n

2.1E5等于2.1×10的5次方,3.7E-2等于3.7×10的-2次方,0.5E7等于0.5×10的7次方,-2.8E-2等于-2.8×10的-2次方。

下面介绍常见的不合法的实数。

•345:无小数点。

•E7:阶码标志E之前无数字。

•-5:无阶码标志。

•53-E3:负号位置不对。

•2.7E:无阶码。

浮点型变量还可分为两类:单精度型和双精度型。

•float:单精度说明符,占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供7位有效数字。

•double:双精度说明符,占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。

3. 复数类型

把形如a+bi(ab均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。

当虚部等于零时,这个复数可以视为实数;当z的虚部不等于零而实部等于零时,常称z为纯虚数。

复数中的实数a称为复数z的实部(real part)记作Rez=a,实数b称为复数z的虚部(imaginary part)记作Imz=b

a=0且b≠0时,z=bi,将该复数称为纯虚数。

复数的四则运算规定如下。

•加法法则:(a+bi)+(c+di)=(a+c)+(b+d)i。

•减法法则:(a+bi)-(c+di)=(a-c)+(b-d)i。

•乘法法则:(a+bi)·(c+di)=(ac-bd)+(bc+ad)i。

•除法法则:(a+bi)/(c+di)=[(ac+bd)/(c2+d2)]+[(bc-ad)/(c2+d2)]i。

2.1.2 操作实例

例1:练习十进制数字的显示。

例1

>> 3.00000 
ans = 
     3 
>> 3 
ans = 
     3 
>> .3 
ans = 
    0.3000 
>> .06 
 
ans = 
    0.0600 

例2:练习指数数字的显示。

例2

>> 3E6 
ans = 
     3000000 
>> 3e6 
ans = 
     3000000 
>> 4e0 
ans = 
     4 
>> 0.5e5 
ans = 
      50000

例3:练习复数的显示。

例3

>> 1+2i 
ans = 
   1.0000 + 2.0000i 
>> 2-3i 
ans = 
   2.0000 - 3.0000i 
>> 5+6j 
ans = 
   5.0000 + 6.0000i 
>> 2i 
ans = 
   0.0000 + 2.0000i 
>> -3i 
ans = 
   0.0000 - 3.0000i 

2.1.3 逻辑类型

MATLAB中的逻辑类型包括true和false,分别由1和0表示。MATLAB语言进行逻辑判断时,所有非零数值均被认为真,而零为假。在逻辑判断结果中,判断为真时输出1,判断为假时输出0。

函数logical()可以将任何非零的数值转换为true(即1),数值0转换为false(即0)。

>> logical(5) 
ans = 
     1 
>> logical(0) 
ans = 
     0 

在算术、关系、逻辑三种运算符中,算术运算符优先级最高,关系运算符次之,而逻辑运算符优先级最低。在逻辑运算符中,“非”的优先级最高,“与”和“或”有相同的优先级。

MATLAB语言的逻辑运算符包括以下几种。

(1)—:逻辑与。两个操作数同时为1时,结果为1,否则为0。

>> logical(5)-logical(0) 
ans = 
     1 

(2)|:逻辑或。两个操作数同时为0时,结果为0,否则为1。

>> logical(5)-logical(0) 
ans = 
     1 
>> logical(0)-logical(0) 
ans = 
     0 

(3)~:逻辑非。当操作数为0时,结果为1,否则为0。

(4)xor:逻辑异或。两个操作数相同时,结果为0,否则为1。输入格式为:C = xor(A,B)。

>> xor(0,1) 
ans = 
     1 

(5)any:有非零元素则为真。输入格式为:B = any(A);B = any(A,dim)。

>> any(15) 
ans = 
     1 
>> any(logical(5),logical(5)) 
ans = 
     1

(6)all:所有元素均非零则为真。输入格式为:B = all(A);B = all(A,dim)。

>> all(15) 
ans = 
     1 

2.1.4 课堂练习——数值的逻辑运算练习

数值的逻辑运算练习

逻辑运算符号的应用。

操作提示。

练习使用逻辑运算符号。

2.1.5 结构类型

按照数据的结构进行分类,MATLAB中的数据主要包括:数值、字符、向量、矩阵、单元型数据及结构型数据。

1. 数值

这里的数值指单个的由阿拉伯数字及一些特殊字符组成的数值,而不是由一组数值组成的对象。

2. 字符

字符主要由26个英文字母及空格等一些特殊符号组成,根据储存格式不同,分为字符常量与字符串常量。

(1)字符常量是用单括号括起来的单个字符。如‘a’,可以用反斜杠后跟1~3位八进制数或1~2位十六进制数形式的ASCII码来表示相应字符,如\101表示字符‘A’。

(2)字符串常量是用一对双引号引起来的零个或者多个字符序列。如“Who are you”。字符串储存时,系统会自动在字符串的末尾加一个字符串结束的表示,即转义字符\0。

3. 向量

在数学中,几何向量也称为欧几里得向量,通常简称向量、矢量,指具有大小(magnitude)和方向的量。

4. 矩阵

m×n个数aij排成的mn列的数表称为mn列的矩阵,简称m×n矩阵。记作:

矩阵中m×n个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i, j)元,以数aij为(i, j)元的矩阵可记为(aij)或(aijm×nm×n矩阵A也记作Amn

元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。

(1)单元型数据

单元型变量是以单元为元素的数组,每个元素称为单元,每个单元可以包含其他类型的数组,如实数矩阵、字符串、复数向量。单元型变量通常由“{}”创建,其数据通过数组下标来引用。

(2)结构型数据

结构型变量是根据属性名组织起来的不同数据类型的集合。结构的任何一个属性可以包含不同的数据类型,如字符串、矩阵等。

2.1.6 定义类型

在MATLAB中,某量若保持不变,则称之为常量;反之,则称之为变量。以常量作为研究对象的数学称为常量数学或初等数学,它主要包括算术、初等代数、几何等学科。常量数学主要在形式逻辑的范围内活动,它虽然满足了一定生产力发展的需要,但又有一定的局限性。变量的引进以及它成为数学的研究对象,加速了变量数学的主要部分即微积分的产生。下面介绍变量与常量在MATLAB中的应用。

1. 常量

MATLAB语言中有一些经常使用的常量数据,其中一些常量在MATLAB中已经定义,比如pi;而有一些常量却无法直接使用(MATLAB没有直接定义,或者根本不知道被定义为什么常量名)。当这些没有办法直接调用,却要经常使用的常量被需要时,用户常常又记不清准确值,因此,在MATLAB中留有定义,实时可调用会极大地方便使用。

MATLAB语言本身也具有一些预定义的变量,这些特殊的变量称为常量。

(1)显示圆周率pi的值。

>> pi 
ans = 
3.1416 

这里“ans”是指当前的计算结果,若计算时用户没有对表达式设定变量,系统就自动将当前结果赋给“ans”变量。

(2)eps:浮点运算的相对精度。

>> eps 
ans = 
2.2204e-16 

eps是用来判断是否为0元素的误差限。一般情况下,它的值大约为2.2204e-16。

(3)Inf:表示无穷大,在MATLAB中允许表示的最大数是21034,超过该数值时,系统会将数据用无穷大Inf表示。

>> 1/0 
ans = 
Inf

(4)NaN:不定值,如0/0、∞/∞、0*∞。

>> 0/0 
ans = 
NaN 

(5)i(j):复数中的虚数单位。系统默认为单位虚数,可直接使用。若对该符号定义新值,则系统保留新值。

>> i 
ans = 
     0.0000 + 1.0000i 
>> j 
ans = 
     0.0000 + 1.0000i

(6)realmin:最小正浮点数。

>> realmin 
ans = 
     2.2251e-308 

(7)realmax:最大正浮点数。

>> realmax 
ans = 
     1.7977e+308 

2. 变量

变量是任何程序设计语言的基本元素之一,MATLAB语言当然也不例外。与常规的程序设计语言不同的是,MATLAB并不要求事先对所使用的变量进行声明,也不需要指定变量类型,MATLAB语言会自动依据所赋予变量的值或对变量所进行的操作来识别变量的类型。在赋值过程中,如果赋值变量已存在,则MATLAB将使用新值代替旧值,并以新值类型代替旧值类型。在MATLAB中变量的命名应遵循如下规则。

•变量名必须以字母开头,之后可以是任意的字母、数字或下画线。

•变量名区分字母的大小写。

•变量名不超过31个字符,第31个字符以后的字符将被忽略。

与其他的程序设计语言相同,MATLAB语言也存在变量作用域的问题。在未加特殊说明的情况下,MATLAB语言将所识别的一切变量视为局部变量,即仅在其使用的M文件内有效。

为任意变量定义参数值,程序显示如下。

>> a=1 
a = 
     1 

若要将变量定义为全局变量,则应当对变量进行说明,即在该变量前加关键字global。一般来说,全局变量均用大写的英文字符表示。

在定义变量时应避免与常量名相同,以免改变这些常量的值。如果已经改变了某个常量的值,可以通过“clear+常量名”命令恢复该常量的初始设定值。当然,重新启动MATLAB也可以恢复这些常量值。

2.1.7 操作实例

例1:练习直接赋值与变量赋值的不同之处。

例1

>> 5
ans =
5 %在工作区显示 0 >> a=5
a =
5 %在工作区显示 0

例2:练习常量的逻辑运算。

例2

>> ~pi 
ans = 
     0 
>> any(i) 
ans = 
     1 
>> all(realmin) 
ans = 
     1

例3:练习变量的赋值运算。

例3

>> i                                 %输入特殊符号 
ans = 
     0.0000 + 1.0000i                %显示特殊符号固定值 
>> i=5 
i = 
     5                               %为该符号重新赋值 
>> i 
i = 
     5                               %显示特殊符号存储值 
>> clear i                           %清除该符号存储值 
>> i 
ans = 
     0.0000 + 1.0000i                %显示符号当前存储值