MATLAB基础与编程入门 张威 第3章

上传人:E**** 文档编号:89348014 上传时间:2019-05-23 格式:PPT 页数:169 大小:1.23MB
返回 下载 相关 举报
MATLAB基础与编程入门   张威 第3章_第1页
第1页 / 共169页
MATLAB基础与编程入门   张威 第3章_第2页
第2页 / 共169页
MATLAB基础与编程入门   张威 第3章_第3页
第3页 / 共169页
MATLAB基础与编程入门   张威 第3章_第4页
第4页 / 共169页
MATLAB基础与编程入门   张威 第3章_第5页
第5页 / 共169页
点击查看更多>>
资源描述

《MATLAB基础与编程入门 张威 第3章》由会员分享,可在线阅读,更多相关《MATLAB基础与编程入门 张威 第3章(169页珍藏版)》请在金锄头文库上搜索。

1、第三章 数 据 类 型,3.1 概述 3.2 MATLAB基本数值类型 3.3 逻辑类型和关系运算 3.4 字符串 3.5 元胞数组 3.6 结构 3.7 本章小结,3.1 概 述,MATLAB的早期版本只有非常简单的二维数组和字符类型的数据,目前的MATLAB版本中不仅有多达十几种的基本数据类型,在不同的专业工具箱中还有特殊的数据类型,并且MATLAB还支持面向对象的编程技术,支持用户自定义的数据类型。 MATLAB支持的基本数据类型见图3-1。,图3-1 MATLAB的数据类型,获取MATLAB的数据类型列表可以在MATLAB命令行窗口中键入help datatypes命令。 在图3-1中

2、所示的各种数据类型都可以用于创建向量、矩阵或者多维数组。用户自定义的数据类型也是图示的各种数据类型的组合。在不同的MATLAB工具箱中具有自定义的数据类型,例如控制系统工具箱中定义的LTI对象,在滤波器设计工具箱中定义的滤波器对象,在符号数学工具箱中定义的符号类型数据等。这些工具箱中包含的特殊数据对象也都使用这些基本的数据类型组合构成。,需要指出一点,MATLAB的基本数据类型是双精度数据类型和字符类型。MATLAB的M语言和其他高级编程语言不同的是,MATLAB没有具体的变量或对象声明和定义过程,任何数据类型的变量或对象都可以利用面向对象编程技术中构造函数的方法或者数据类型转换的方法来创建其

3、他数据类型对象和变量。MATLAB和Java语言、C+语言类似,所有数据类型就是相应的类,具有一定的面向对象的特点。MATLAB的不同数据类型的变量或对象占用的内存空间不尽相同,不同的数据类型的变量或对象也具有不同的操作函数。在本章中,将详细讲述MATLAB的基本数值类型、逻辑类型、字符串、元胞数组和结构的使用方法,其中,元胞数组是MATLAB中常用的一种独有的数据类型。,3.2 MATLAB基本数值类型,3.2.1 基本数值类型入门,表3-1 MATLAB的基本数值类型,说明: 表格中所指的字节数是指使用该数据类型创建数组或者矩阵时,每一个元素占用的内存字节数,稀疏矩阵则不同,由于稀疏矩阵使

4、用了特殊的存储数据方法,所以稀疏矩阵对象占用的内存字节数比较特殊。 复数数据类型也相对特殊,复数可以用表格中所示的各种数据类型创建,但是由于复数由实部数据和虚部数据组成,所以占用的字节数为构成复数的数据类型的两倍,例如复数z = 1+i,在MATLAB中占用了16个字节的内存。,例子3-1 使用不同的数据类型。 在MATLAB命令行窗口中,键入下面的指令: A = 1 2 3; class(A) ans = double whos Name Size Bytes Class A 1x3 24 double array ans 1x6 12 char array Grand total is 9

5、 elements using 36 bytes, B = int16(A); class(B) ans = int16 whos Name Size Bytes Class A 1x3 24 double array B 1x3 6 int16 array ans 1x5 10 char array Grand total is 11 elements using 40 bytes,在例子3-1中,使用了int16,即16位的有符号整数类型,作为示例,并且使用class函数获取不同变量或者对象的数据类型。向量B是从向量A通过数据类型转换得到的,可以看出,A和B向量包含同样的数据,但是由于两个

6、向量的数据类型不同,所以它们占据的内存字节数不同,其中双精度类型的向量A占用了24个字节,而16位整数类型的向量B仅占用了6个字节。,注意: MATLAB和C语言在处理数据类型和变量时不同。在C语言中,任何变量在使用之前都必须声明,然后赋值,在声明变量时就指定了变量的数据类型。但是在MATLAB中,任何数据变量都不需要预先的声明,MATLAB将自动地将数据类型设置为双精度类型,若需要使用其他类型的数据,则必须通过数据类型的转换完成。MATLAB的数据类型名称同样就是数据类型转换的函数,利用这些函数来完成相应的数据类型转化的工作。 关于数据类型转换函数的使用可以参阅相应的在线帮助。,例子3-2

7、使用不同的数据类型。 在MATLAB命令行窗口中,键入下面的指令: a = 1 2 3; b = 3 4 5; c = a+b; whos Name Size Bytes Class a 1x3 24 double array b 1x3 24 double array c 1x3 24 double array Grand total is 9 elements using 72 bytes int16(a)+int16(b) ? Error using = + Function + is not defined for values of class int16.,由于MATLAB系统默认

8、的运算都是针对双精度类型的数据或变量的,所以在进行两个int16类型的变量加法时,MATLAB报告了相应的错误。一般地,对于在表格3-1中所列的各种数据类型(稀疏矩阵除外)的变量, MATLAB没有提供相应的运算规则或者计算函数。如果需要为这些没有运算规则的数据类型创建相应的计算法则,则需要利用MATLAB的M语言进行面向对象的编程,通过重载运算符来完成相应的运算定义。 有关运算符重载请读者查阅有关面向对象的书籍资料,而M语言的面向对象编程方面的知识请参阅MATLAB的帮助文档。,3.2.2 整数类型数据运算 MATLAB运算的基本数据类型为双精度的数据类型,MATLAB还另外提供了一些函数可

9、以进行整数类型数据的运算,在表3-2中总结了这些函数。,表3-2 整数类型数据的运算函数,注意: 整数类型数据运算函数的操作数一般为无符号的整数,不同的函数会有所不同,函数运算的结果必须小于bitmax代表的数值。 提示:数据位运算 了解计算机中数据的二进制表达是进行二进制位运算的基础。在计算机中的任何数据都是由二进制数来保存的,计算机最初能够处理的也只有二进制的数据。对于整数可以使用原码、反码、补码来表示。,字节和位 字节这个概念对于计算机用户来讲并不陌生,计算机中的存储器就是由许许多多被称为“字节”(byte)的单元组成的。 一般地,内存的最小度量单位是位(bit),有些地方叫作比特。而一

10、个字节就是由8个二进制位组成的,其中,最右边的一位叫最低位,最左边的一位叫作最高位。所以在本章前面小节介绍的16位整数占用两个字节的内存,依次类推,32位整数就需要占用四个字节的内存。 在计算机中表示数据可以有不同的方法,一般有原码、反码和补码三种形式。 为了便于表述,这里所有的数字都将按照数字在八位计算机内的表示方式来表示。,原码 将最高位作为符号位(以数字0表示正,以数字1表示负),其他的数字位代表数值本身的绝对值,这种表示数字的方式叫作原码。 例如,数字7在八位计算机中的原码为 0000 0111;而数字-7在八位计算机中的原码为1000 0111。 如果这两个数字在我们日常使用的32位

11、计算机中用原码表示,则无非再多几个数字0。例如在32位的计算机中用原码表示数字7,则为0000 0000 0000 0000 0000 0000 0000 0111。,反码 用反码表示数字的规则是,如果是正数,则用这个数字的原码来表示,如果是负数,则保持符号位为1,然后将这个数字的原码按照每位取反,得到这个数字的反码。 例如,数字7在八位计算机中的反码就是它的原码,为000 0111;而数字-7在八位计算机中的反码是1111 1000。,补码 计算机中表示数据的一般方式是补码,补码是这样规定的: 一个正数的补码就是其原码,例如整数7在八位计算机中的补码是0000 0111。 对于负数的补码是将

12、数字的反码加上1,就得到了这个数字的补码。例如-7在8位计算机中的补码是1111 1001。 关于数字在计算机中二进制表示的详细解释请参阅相应的计算机原理方面的书籍。,MATLAB整数类型数据运算和C语言整数位运算比较类似,所不同的是MATLAB中没有相应的运算符,而只有这些函数可用,并且这些整数运算的数据都必须大于0。这里结合具体的示例讲解表3-2所列函数的用法。,例子3-3(a) 数据位“与”操作。 在MATLAB命令行窗口中,键入下面的指令: A = 86; B = 77; C = bitand(A,B) C = 68 a = uint16(A);b = uint16(B); c = b

13、itand(a,b) c = 68 whos,Name Size Bytes Class A 1x1 8 double array B 1x1 8 double array C 1x1 8 double array a 1x1 2 uint16 array b 1x1 2 uint16 array c 1x1 2 uint16 array Grand total is 6 elements using 30 bytes,请读者注意例子3-3(a)运算得到结果的数据类型,数据a、b为无符号的16位整数,所以进行操作的结果也是无符号的16位整数,但数据A、B为双精度类型的数据(注意这些数据都是非负

14、整数),结果运算的结果是双精度类型。 运算的过程大体如下:,例子3-3(b) 整数数据位的运算。 在MATLAB命令行窗口中,键入下面的指令: A = 86; dec2bin(A) ans = 1010110 B = bitset(A,6); dec2bin(B) ans = 1110110 C = bitset(A,7,0); dec2bin(C),ans = 10110 D = bitshift(A,-4); dec2bin(D) ans = 10101100000 E = bitshift(A, -4); dec2bin(E) ans = 101 a = uint16(A); e = b

15、itshift(A, -4); dec2bin(e) ans = 101, whos Name Size Bytes Class A 1x1 8 double array B 1x1 8 double array C 1x1 8 double array D 1x1 8 double array E 1x1 8 double array a 1x1 2 uint16 array ans 1x3 6 char array e 1x1 8 double array Grand total is 10 elements using 56 bytes,说明: dec2bin函数是将十进制整数转变成二进制整数字符串的函数,该函数将在本章3.4.4字符串转换函数一节详细讲述。 在例子3-3(b)中,使用了bitset函数和bitshift函数,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号