第三章数据类型
例3-1 使用不同的数据类型 >> A=[1 2 3]; >> class(A) ans = double
• whos 使用工作空间的浏览
>> whos Name A ans
Size
1x3 1x6
Bytes Class
24 12 double array char array
>> B=int16(A); >> class(B) ans = int16
• 例3-5 创建逻辑类型数组 >> A=eye(3); >> B=logical(A) B= 1 0 0 0 1 0 0 0 1 >> C=true(size(A)) C= 1 1 1 1 1 1 1 1 1 >> D=false([size(A),2]) D(:,:,1) = 0 0 0 0 0 0 0 0 0
>> eps ans = 2.2204e-016 >> realmax ans = 1.7977e+308 >> realmin ans =
2.2251e-308
• 例3-3 NaN和Inf运算示例 >> a=inf; >> class(a) ans =double • MATLAB中所有的数据默认类型均为双精度类 >> b=int16(a) 型,包括像NaN和Inf在内的上述若干常数。 b =32767 • 对NaN和Inf进行数据转化时要注意, Inf将获取 >> c=sin(a) 相应数据类型的最大值,而NaN往往返回相应整 c = NaN 数数据类型的数值0,浮点数类型则仍然为NaN。 >> sin(c) ans =NaN • 在运算中使用NaN可以避免因执行了0/0这类能 >> class(c) 够产生错误的应用程序中断,这样可以辅助调试 应用程序。 ans = double >> int64(c) ans = 0
特殊变量表
特殊变量 ans pi eps flops inf NaN i,j nargin nargout realmin realmax 取 值 用于结果的缺省变量名 圆周率 计算机的最小数,当和 1 相加就产生一个比 1 大的数 浮点运算数 无穷大,如 1/0 不定量,如 0/0 i=j= 1 所用函数的输入变量数目 所用函数的输出变量数目 最小可用正实数 最大可用正实数
第三章 数据类型
主要内容
3.1 MATLAB基本数值类型 3.2 逻辑类型 3.3 字符串 3.4 元胞数组 3.5 结构
• MATLAB的早期版本只支持非常简单的二维数组和字符类型的 数据,目前MATLAB的基本数据类型已达十几种。 • 在MATLAB命令窗口中键入help datatypes命令便会得到如下 显示: double logical cell struct single uint8 - Convert to double precision. - Convert numeric values to logical. - Create cell array. - Create or convert to structure array. - Convert to single precision. - Convert to unsigned 8-bit integer.
向量B是从向量A通过数据类型转换得到的,可 以看出,A和B向量包含同样的数据,但是由于两 个向量的数据类型不同,所以它们占据的内存字 节数不同,双精度类型A占24个字节,而16位整 数类型的向量B仅占用了6个字节。
>> whos Name
A B ans
Size
Bytes Class 24 double array 6 int16 array 10 char array
• 数据位运算 在计算机中的任何数据都是由二进制数来保存的,所以计 算机中数据的二进制表达是进行二进制位运算的基础。
注:二进制数据是用0和1两个数码来表示的数。它的基数为2,进位 规则是“逢二进一”,借位规则是“借一当二”。由18世纪德国数理 哲学大师莱布尼兹发现的。
• 字节和位 字节(Byte)是计算机信息技术用于计量存储容量和传输容量 的一种计量单位。1个字节等于8位二进制其中,最右的一 位叫最低位,最左的一位叫最高位。所以16位整数占用两 个字节的内存,32位整数占用四个字节的内存。
括号运算符的优先级最高,数组 转置次之,幂运算先于乘除,乘除 优先于加减 。
关系运算符
在MATLAB里共有六种关系运算符,关系运算符是用来判断操作数两 者关系的运算。 < 小于 > 大于 <= 小于等于 >=大于等于 == 等于 ~=不等于 关系运算符将生成一个0-1矩阵,当运算数相应元素为真时,对应位置上 生成1,否则为0。
D(:,:,2) =
0 0 0 0 0 0 0 0 0 >> whos Name Size A 3x3 B 3x3 C 3x3 D 3x3x2
Bytes Class 72 double array 9 logical array 9 logical array
逻辑类型的数组每一个元素仅占用一个字节的内存空间,所以尽管矩阵B 和矩阵A看上去一致,但是内存占用上有相当大的差距,并且属于不同的数 据类型,也就有不同的操作函数和方法。
基本语句
MATLAB语言的基本语句结构为:
变量名列表=表达式
等号左边的变量名列表为MATLAB语句的返回值,若一次返回多个结果, 则变量列表用[ ]括起来,各变量间用逗号分隔; 等号右边为表达式,可以是矩阵运算或函数调用,可以由分号(;)、逗号(,) 或回车结束。
数据类型
在MATLAB里共有六种数据类型,每一种类型可以是一维、二维和多维的。 双精度型(double) 字符型(char) 稀疏型(sparse) 存储型(storage) 细胞型(cell) 结构型(struct)
• 3-7 函数all和any使用示例 >> a=[1 0 1;1 0 0;1 1 0;1 1 1] a= 1 0 1 1 0 0 1 1 0 1 1 1 >> all(a) ans = 1 0 0 >> any(a) ans = 1 1 1
运算符 算术运算符
+ * .* ^ 加 减 矩阵乘法 数组乘法 矩阵幂 .^ \ / ./ : 数组幂 左除或反斜杠 右除或斜杠 数组除 冒号
净,于是c=2i。
逻辑数据类型
定义:所谓逻辑数据类型就是仅具有两个数值的一种数据类 型,其中,一个数值为TRUE,另一个数值为FALSE。
• MATLAB将所有非零值看做逻辑真,将零值看做逻辑假。一般地,
MATLAB用1表示逻辑真,0表示逻辑假。 • 逻辑运算就是能够处理逻辑类型数据的运算。在MATLAB能够处理 的逻辑类型运算和C语言比较类似。 • 创建逻辑类型矩阵或者数组的函数主要有三个,如下表: 函数 logical true false 说明 将任意类型的数组转变成为逻辑类型数组,其中, 非零元素为真,零元素为假 产生逻辑真值数组 产生逻辑假值数组
int16 int32 int64 inline
- Convert to signed 16-bit integer. - Convert to signed 32-bit integer. - Convert to signed 64-bit integer. - Construct INLINE object. - Function handle array. - Invoke a Java method. - Invoke a Java object constructor.
1x3 1x3 1x5
• 例3-2 >> A=[1 2 3]; >> B=[4 5 6]; >> C=A+B;
>> whos
Name A B C Size 1x3 1x3 1x3 Bytes Class 24 double array 24 double array 24 double array
• >> D=int16(A)+int16(B)
• D=
• 5 7 9
可以看出,两个整数类型的矩阵加法得到的结果 同样是整数类型的变量,而双精度矩阵与整数矩阵 进行加法运算时,MATLAB报告相应的错误。
• >> whos • Name
Size
Bytes Class
• A 1x3 24 double array • B 1x3 24 double array • C 1x3 24 double array • D 1x3 6 int16 array • >> E=C+D • ??? Error using ==> plus • Integers can only be combined with integers of the same class, or scalar doubles.
例3-6 逻辑运算示例 >> a=eye(3); >> b=a;b=(3,1)=1; >> b=a;b(3,1)=1; >> a&b ans = 1 0 0 0 1 0 0 0 1 >> whos Name Size a 3x3 ans 3x3 b 3x3
Bytes Class 72 double array 9 logical array 72 double array
MATLAB中的常量
常量 ans eps realmax realmin pi i,j Inf NaN 说明 最近运算的结果 浮点数相对精度 MATLAB能够表示的实数的最大绝 对值 MATLAB能够表示的实数的最小绝 对值 常数π 复数的虚部数据最小单位 无穷大 非数