1、2019/10/16,Application of MATLAB,1,第3章 Matlab 数据类型,主要内容 常量与变量 数值类型 逻辑类型 字符和字符串 元胞数组 结构体 函数句柄,2019/10/16,Application of MATLAB,2,3.1.1 MATLAB系统的特殊变量和常数,3.1 常数与变量,2019/10/16,Application of MATLAB,3,3.1 常数与变量,变量名由字母、数字和下划线组成; 变量名中英文字母大小写是有区别的; 变量名的最大长度是有规定的 不同版本的系统规定不同:19个字符、31或63个字符等 namelengthmax函数:系
2、统规定长度 isvarname函数:变量名的合法性 N = namelengthmax isvarname 8th_column,3.1.2 变量名,Matlab用字符i和j表示虚数单位,如果涉及到复数计算,应避免把i和j用作变量名,2019/10/16,Application of MATLAB,4,3.1 常数与变量,在MATLAB中创建变量不必声明变量的数据类型例创建一个A变量 A = 9 将变量的值赋给另一个变量前,必须确定该变量有值,否则会返回错误。例如 A = a? Undefined function or variable a. 如果变量已经存在,给它赋值会替换它的当前值,3.
3、1.3 创建变量,2019/10/16,Application of MATLAB,5,3.1 常数与变量,3.1.4 变量的数据类型,Matlab支持多种数据类型 所有类型数据都被存储在矩阵或数组中进行操作,变量数据类型,logical 逻辑型,char 字符/字符串,numeric 数值型,cell 元胞数组,structure 结构体,function handle函数句柄,Java classes Java类,int8, unit8, int16, uint16, int32, uint32, int64, uint64, 整数类型,single 单精度浮点型,double 双精度浮点
4、型,2019/10/16,Application of MATLAB,6,3.1 常数与变量,变量的数据类型,2019/10/16,Application of MATLAB,7,3.2 数值类型数据,数值类型包括有符号整数类型、无符号整数类型、单精度浮点类型和双精度浮点类型,2019/10/16,Application of MATLAB,8,3.2 数值类型数据,整型数据类型及其取值范围,3.2.1 整型数据类型,2019/10/16,Application of MATLAB,9,3.2 数值类型数据,int8:将值或变量指定为整型 class函数:变量数据类型 把数值转换为一种整型数据
5、类型时,matlab会将结果圆整到最近的整型值 对于小数位取5的情况,如果数值为正,则向上圆整,否则向下圆整 将大于整型数据类型最大值的数据转换为该整型时,matlab返回最大值。如果数据值小于数据类型的最小值,则返回最小值,3.2.1 整型数据类型,2019/10/16,Application of MATLAB,10,3.2 数值类型数据,两个相同类型的数据相加,结果仍为该整型例如x=int16(5)+int16(9)返回结果为x=14class(x)返回结果为ans=int16 如果结果大于数据类型的最大值或小于最小值,会返回最大值或最小值例如intwarning(on)int16(50
6、000)Warning: Out of range vonverted to intmin(int16) or intmax(int16)ans=32767,3.2.1 整型数据类型,2019/10/16,Application of MATLAB,11,3.2 数值类型数据,3.2.2 单精度浮点型数据类型,single命令将数值或变量指定为single型 single型数据所占内存为double型的一半 将double型数据转换为single型时,matlab将该数据圆整到最近的单精度浮点值 函数eps返回浮点数的精度。所谓精度,是指该浮点数与下一个浮点数之间的差值。eps(x)的值与x的
7、大小有关,x越大,eps(x)越大 双浮点数的精度比单浮点数的精度高一些,2019/10/16,Application of MATLAB,12,3.2 数值类型数据,对于数值变量,默认时matlab指定数据为double型 对于大部分数值计算任务而言,推荐使用double型 复数属于双精度浮点数的一种特殊类型,复数作为一个整体进行处理。 “-Inf”和“Inf”表示“负无穷”和“正无穷”,一旦运算结果超出浮点数的表示范围,系统会用“-Inf”和“Inf”表示计算结果 非数(NaN),是“Not a Number”的缩写,是一个既不是实数也不是复数的数值,matlab提供这样一个数值的目的是扩
8、大运算范围,对于0/0、Inf/Inf的运算结果可以有合理的解释,3.2.3 双精度浮点型数据类型,2019/10/16,Application of MATLAB,13,3.3 逻辑类型数据,Matlab用“0”和“1”分别代表“逻辑假”和“逻辑真”。 逻辑类型数据常以标量的形式出现,但有时也可以是逻辑数组。 在关系和逻辑运算表达式中所有输入非0的数都为“逻辑真”,只有0才为“逻辑假”;计算结果,如果值为1,表示“真”,如果值为0,表示“假”。,2019/10/16,Application of MATLAB,14,字符串又称为字符数组,由多个字符连接而成。 字符串一般用单引号括起来。例如,
9、Central South University。 字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码数值矩阵转换为字符串矩阵。 在字符串里的每个字符是数组里的一个元素,字符串的存储要求每个字符2个字节。,3.4 字符和字符串,2019/10/16,Application of MATLAB,15,利用单引号创建字符串例如创建字符串Chinacountry = China在命令窗口中输入whos命令,输出显示Name Size Bytes ClassCountry 1x5 10 char arra
10、y class和ischar函数测试变量数据类型class(country)返回结果为ans=charischar(country)返回结果为ans=1,3.4.1 创建字符串,3.4 字符和字符串,2019/10/16,Application of MATLAB,16,创建二维字符串时,确定每行具有相同的长度。例如 name = Li Yi; Hu Xu 根据不同长度的字符串创建二维字符串时,将短的那些字符串后面用空格对齐,使所有字符串的长度相同。例如 name=Liu Ying; Hu Xu 用char函数创建字符串数组,char函数自动以最长字符串的长度为标准,进行空格补齐。例如name
11、 = char(Liu Ying; Hu Xu) 从数组中提取字符串时,用deblank函数删除后面的空格。trimname= deblank(name(2,:)size(trimname),3.4 字符和字符串,3.4.1 创建字符串,2019/10/16,Application of MATLAB,17,3.4.2 类型转换,abs(str)返回一个向量,其元素是字符串中字符的ASCII值 char(x)根据指定的字符集将向量x中的整数转化成字符。这个命令是命令abs的逆操作。 num2str(f)将数值f转换成字符串 str2num(str)将字符串str转换为数字 lower(str)
12、将字符串中所有字母转换为小写字母 upper(str)将字符串中所有字符转化为大写字母,3.4 字符和字符串,2019/10/16,Application of MATLAB,18,3.4.3 比较字符串,strcmp函数比较字符串 strncmp函数可以比较字符串的前n+1个字符 对于字符串结构数组,这两个函数一个单元一个单元地进行比较 对于字符串,可使用关系运算符str1=hello; str2=help;C1=strcmp(str1, str2); C2= strncmp(str1, str2, 2); 因为str1和str2不相等,调用strcmp函数时返回0,而str1和str2前3
13、个字符相同,调用strncmp函数时返回1A=book;pen;rule; B=pencil; pen; pencilbox; strcmp(A,B)返回结果为ans=0 1 0A=face; B=cake; A=B;ans=0 1 0 1,3.4 字符和字符串,2019/10/16,Application of MATLAB,19,字符的聚合方法:使用聚合运算符 或sprintf函数num_chars = 28;s = There are int2str(num_chars) characters here s = sprintf(There are %d characters heren,
14、 num-chars) 用strcat函数也可以把两个或更多字符串组合在一起country = China;province = Sichuan strcat(country, , province),3.4.4 聚合字符串,用聚合方法创建字符串时,用sprintf函数比使用 好,特别是在组成复杂表达式的时候,该函数对输出格式可以有更多的控制,而且一般运行得更快。也可用strcat函数聚合字符串,但对于简单的聚合,使用sprintf和 更快。,3.4 字符和字符串,2019/10/16,Application of MATLAB,20,3.4 字符和字符串,isletter函数确定字符是否为字
15、母; isspace函数确定字符是否为空区(空格、空表间隔或空行)例如创建一个名为mystring的字符串,使用函isletter函数:mystring= Room 401;A=isletter(mystring);A=1 1 1 1 0 0 0 前四个字符是字母,所以返回值为1。,3.4.5 字符分类,2019/10/16,Application of MATLAB,21,3.4 字符和字符串,strrep函数进行标准的搜索和替代操作 findstr函数 strmatch函数在字符串或字符串单元数组的整个行中进行查找,看有没有以给定字符序列打头的字符串,它返回以该字符打头的行的行号。 lab
16、el = Sample 1, 04/28/03; newlabel = strrep(label, 28, 30) %把28改为30 position = findstr(amp, label) %字符串amp在label中出现的起始位置为label中第2个字符的位置。 maxstrings = strvcat(max;minimax;maximum); %strvcat沿垂直方向连接字符串,strcat沿水平方向连接字符串 strmatch(max,maxstrings),3.4.6 搜索和替换,2019/10/16,Application of MATLAB,22,元胞数组(单元数组)是一
17、种特殊的数组,这种数组的元素是单元,能包含其他matlab数组。例如,单元数组的一个单元可能包含一个实型矩阵,另一个单元又包含文本字符串数组,而第三个单元又包含值为复数的矢量,可以生成任意大小和形状的单元数组。 结构体和元胞数组为不同类型的数据提供了一种系统存储机制,它们主要在组织数据的方式上有所不同。在结构体中,从命名字段访问数据;在元胞数组中,通过矩阵索引操作访问数据。,3.5 元胞数组,2019/10/16,Application of MATLAB,23,3.5 元胞数组,通过赋值语句创建元胞数组 单元索引:按标准数组方式把单元索引号放到小括号中间,把单元地内容放在赋值语句的右端,用大
18、括号括起来。 内容索引:以标准数组标注方式把单元索引号以大括号括起来放在左侧,在赋值语句的右侧指定内容。 例利用单元索引方式和内容索引方式创建2x2的单元数组A A(1,1)=1 4 3; 0 5 8; 7 2 9; A(1,2)=Liu Zhong; A(2,1)=3+7i; A(2,2)=-pi:pi/10:pi; %单元索引方式 A1,1=1 4 3; 0 5 8; 7 2 9; A1,2=Liu Zhong; A2,1=3+7i; A2,2=-pi:pi/10:pi; %内容索引方式,创建元胞数组,2019/10/16,Application of MATLAB,24,3.6 结构体,
19、使用赋值语句 例如创建一个student结构数组, student.name=Liu Dan; student.ID=02; student.test=79 75 73;80 78 77.5; 80 85 85; student(2).name=Han Xu; student.ID=10; student.test=68 70 68; 78 88 81; 92 90 93; 使用struct函数 可以使用struct函数预分配一个结构数组,其基本形式为: str_array=student(field1,val1, field2,val2, ) 其中,变量为字段名和它们的对应值。,创建结构体,
20、2019/10/16,Application of MATLAB,25,2.7 函数句柄,函数句柄是一种matlab数据类型,保存函数的路径、视野、函数名及重载方式等。 使用函数句柄的好处主要有: 把函数获取的信息传给其它函数; 掌握重载函数的方法; 允许更广泛地获取子函数和私有函数; 保证函数计算的可靠性; 减小定义函数的字段个数; 改进重复操作; 在数组、结构体和元胞数组中操作句柄; 可以在调用中将函数句柄作为变量传递给另一个函数,2019/10/16,Application of MATLAB,26,3.7 函数句柄,在Matlab中,在函数名前用符号创建一个函数句柄。 用于句柄的函数名
21、最多只能有N个字符函数句柄的内容通过functions显示 f_h=plot functions(f_h) ans = function: plottype: overloadedfile: MATLAB built-in functionmethods: 1x1 struct,函数句柄的创建与显示,2019/10/16,Application of MATLAB,27,MATLAB用十进制数表示一个常数,可采用日常记数法和科学记数法两种表示方法 一般情况下,MATLAB内部每一个数据元素都是用双精度数来表示和存储的。数据输出时用户可以用format命令设置或改变数据输出格式 format命令
22、的格式为: format 格式符 其中格式符决定数据的输出格式,如long、short、hex、rat(输出有理数),3.8 数据输出格式,2019/10/16,Application of MATLAB,28,3.8 数据输出格式,2019/10/16,Application of MATLAB,29,3.8 数据输出格式,2019/10/16,Application of MATLAB,30,关于format命令的几点说明: format命令只影响数据的输出格式,而不影响数据的存储和计算 默认的输出格式是short 注意rat格式。如果在进行运算前执行format rat命令,则可以用分数形式显示运算结果,这样便于核对手算结果的正确性 在改变了输出格式后,为了以后还按默认的格式输出,应当再执行format short命令,3.8 数据输出格式,2019/10/16,Application of MATLAB,31,数据输出格式(续),即使在默认格式下,0也仅仅是输出0 显示格式是非常重要的,要熟悉几种重要的格式,3.8 数据输出格式,