1、数学软件数学软件 Matlab 数据类型1第1页第1页n 变量与常量变量与常量 n 数值型数据数值型数据 n 逻辑型数据逻辑型数据n 字符与字符串字符与字符串 n 细胞(细胞(cell)n 结构型数据结构型数据n 句柄句柄主要内容主要内容2第2页第2页q 变量变量l 变量是任何程序设计语言变量是任何程序设计语言基本元素基本元素之一。之一。l Matlab 变量特点:变量特点:变量变量l 不要求事先申明(也无法申明)不要求事先申明(也无法申明)l 不需要指定变量类型:不需要指定变量类型:依据所赋值或对变量所进行操作来拟定变量类型依据所赋值或对变量所进行操作来拟定变量类型l 变量类型能够随时改变:
2、变量类型能够随时改变:在赋值过程中,假如变量已经存在,在赋值过程中,假如变量已经存在,Matlab 会用新值代会用新值代替旧值,并以替旧值,并以新数据类型代替旧变量类型新数据类型代替旧变量类型假如能够事先给数组分派空间,则能够提升程序执行效率假如能够事先给数组分派空间,则能够提升程序执行效率3第3页第3页l 必须必须以字母开头以字母开头,含字母(大小写)、数字和下划线,含字母(大小写)、数字和下划线l 变量名长度变量名长度不超出不超出 65 (Matlab6.5.1 版本以上版本以上)l 区别大小写区别大小写变量变量q 变量命名要求变量命名要求q Matlab 预定义常量预定义常量i,j虚数单
3、位虚数单位realmin 最小正浮点数最小正浮点数pi圆周率圆周率realmax 最大正浮点数最大正浮点数eps浮点运算相对精度浮点运算相对精度intmin最小整数最小整数Inf无穷大无穷大intmax最大整数最大整数NaN/nan 不定值不定值4第4页第4页Matlab 数据类型数据类型l numeric:数值:数值l char:字符:字符l logical:逻辑:逻辑l cell:单元、细胞、元胞:单元、细胞、元胞l struct:结构:结构l Matlab 惯用数据类型有:惯用数据类型有:5第5页第5页Matlab 数据类型数据类型MatlabRb 中数据类型中数据类型6第6页第6页l
4、为了提升数值计算精度,若没有指定数据类型,则所有数都为了提升数值计算精度,若没有指定数据类型,则所有数都被看作是双精度浮点数被看作是双精度浮点数l 使用整型数据或单精度数据能够节约内存空间使用整型数据或单精度数据能够节约内存空间数值型数值型数值型数据数值型数据整数整数浮点数浮点数带符号带符号无符号无符号单精度单精度双精度双精度7第7页第7页数据类型数据类型取值范围取值范围转换函数转换函数带符号带符号 8 位整型位整型-27,27 1int8带符号带符号 16 位整型位整型-215,215 1int16带符号带符号 32 位整型位整型-231,231 1int32带符号带符号 64 位整型位整型
5、-263,263 1int64无符号无符号 8 位整型位整型0,28 1uint8无符号无符号 16 位整型位整型0,216 1uint16无符号无符号 32 位整型位整型0,232 1uint32无符号无符号 64 位整型位整型0,264 1uint64整型数据整型数据q Matlab 提供四种带符号整型和四种无符号整型提供四种带符号整型和四种无符号整型8第8页第8页x1=11x2=15x3=16x4=127x5=255x6=255x7=0举例举例x1=int8(11);x2=int8(15.49);x3=int8(15.5);x4=int8(130);x5=uint8(255);x6=ui
6、nt8(256);x7=uint8(-1);9第9页第9页n 相同整型数据之间运算,结果为同类型整数相同整型数据之间运算,结果为同类型整数n 不同整型数据之间不能进行运算!不同整型数据之间不能进行运算!l 整型数据能够和整型数据能够和双精度标量双精度标量进行数值运算,进行数值运算,结果为整数结果为整数。在运算过程中在运算过程中保持浮点运算精度保持浮点运算精度,最后将结果转换成整型。,最后将结果转换成整型。整型数据不能与整型数据不能与双精度数组双精度数组进行运算进行运算整型数据运算规则整型数据运算规则q 整型数据运算规则:整型数据运算规则:x=int8(11);y=int8(5);z=x*y%O
7、Kx=int8(11);y=int16(5);z=x*y%ERROR!x=int8(11);y=1,2;z=x*y%ERROR!10第10页第10页 例:例:最大整数与最小整数最大整数与最小整数intmax(int8);intmin(int8);intmax(uint8);intmin(uint8);intmax;intmin;intmax(int32);intmin(int32);n intmax 和和 intmin 函数:查询不同整型数据所能表示最大整函数:查询不同整型数据所能表示最大整数和最小整数数和最小整数11第11页第11页l single:将数据转换成单精度浮点数将数据转换成单精度
8、浮点数l double:将数据转换成双精度浮点数:将数据转换成双精度浮点数operandsingledoubleint/uintcharlogicalsinglesinglesinglesinglesingledoublesingledoubleint/uintdoubledouble浮点数与其它类型数据运算表浮点数与其它类型数据运算表浮点数浮点数l 浮点数:浮点数:单精度单精度(占(占 4 个字节)和个字节)和双精度双精度(占(占 8 个字节)个字节)X12第12页第12页最大和最小浮点数最大和最小浮点数 例:例:realmax(single);realmin(single);realmax
9、(double);realmin(double);realmax;realmin;realmax(double);realmin(double);l realmax 和和 realmin:查询单精度和双精度所能表示最大浮:查询单精度和双精度所能表示最大浮点数和最小浮点数点数和最小浮点数 13第13页第13页l 直接输入:直接输入:l 使用使用 complex 函数函数复数复数q 复数输入办法复数输入办法z=3+4iz=complex(3,4)z=complex(3)z=complex(3,0)虚部与虚数单位之间不能留空格虚部与虚数单位之间不能留空格14第14页第14页整型数据相关函数整型数据相
10、关函数15第15页第15页浮点数相关函数浮点数相关函数16第16页第16页复数相关函数复数相关函数17第17页第17页其它相关函数其它相关函数18第18页第18页判断数据类型相关函数判断数据类型相关函数19第19页第19页q 字符串和字符数组字符串和字符数组l 字符串必须用字符串必须用单引号单引号括起来括起来l 字符串是由多个字符构成字符串是由多个字符构成字符行向量字符行向量字符串字符串字符与字符串运算是各种高级语言不可缺乏部分,字符与字符串运算是各种高级语言不可缺乏部分,Matlab含含有强大字符处理能力。有强大字符处理能力。str1=Matrix Laboratorystr2=M,a,t,
11、r,i,xl 字符数组必须是方,即每行字符个数必须相等字符数组必须是方,即每行字符个数必须相等str3=M,a,t;r,i,x20第20页第20页l 字符串中每个字符(包括空格)都是字符串一个元素字符串中每个字符(包括空格)都是字符串一个元素字符串字符串str=Matrix;str(3)size(str)str=Matrix;double(str(3);int16(str);l Matlab中字符是以中字符是以 ASCII 码存储,因而码存储,因而区别大小写区别大小写,可用,可用 double 等函数查看一个字符等函数查看一个字符 ASCII 码码21第21页第21页l 使用使用 char 函
12、数函数ASCII 码码 字符串字符串字符串输入字符串输入l 直接输入直接输入str1=Matrix;str2=Laboratory;str=str1,str2;str=str1;str2;/ERROR!str=char(77,97,116,108,97,98)str=char(str1,str2)l 生成一个字符数组,第一行为生成一个字符数组,第一行为 str1,第二行为,第二行为 str2l 数组列数数组列数=max(length(str1),length(str2)22第22页第22页字符与数转换字符与数转换q 字符串、字符数组与数值数组之间转换字符串、字符数组与数值数组之间转换l 按按
13、ASCII 码转换码转换l 字符字符 数:数:double、int8、int16、.l 数数 字符:字符:charl 直接将数转换成字符直接将数转换成字符l 字符字符 数:数:str2num(仅限于字符串由数字构成)(仅限于字符串由数字构成)l 数数 字符:字符:num2str、int2str、mat2stra=97,97.3;97.8,98;str1=char(a);str2=num2str(a);str3=int2str(a);str4=mat2str(a);23第23页第23页举例举例l char 输入参数范围为输入参数范围为 0,65535,当输入参数中有小数,当输入参数中有小数时,直
14、接将小数部分舍去。时,直接将小数部分舍去。l num2str 直接将每个数字转换成字符直接将每个数字转换成字符l mat2str 把整个矩阵转换成字符把整个矩阵转换成字符行向量行向量,包括矩阵中,包括矩阵中方方括号括号、空格空格 和和 分号分号(逗号自动清除)(逗号自动清除)a=1,2,3;b=num2str(a);c=2*a;%c=?d=2*b;%d=?l 数值数组转换为字符数组后,表面上看数值数组转换为字符数组后,表面上看象一个数值数组象一个数值数组,但此时元素是但此时元素是字符字符而不是而不是数数!24第24页第24页char、double、int8、int16 等是按等是按 ASCII
15、码码 进行转换进行转换str2num、num2str、int2str、mat2str是直接进行转换是直接进行转换25第25页第25页字符串合并字符串合并q 水平水平合并合并l 直接使用中括号直接使用中括号l 使用使用 strcat 函数函数 str1=hello,world!str2=strcat(hello,world!)l 使用使用 strcat 时,系统会自动清除时,系统会自动清除原字符串原字符串结尾处空格结尾处空格l 水平水平合并合并得到是一个更长字符串得到是一个更长字符串 26第26页第26页字符串合并字符串合并q 垂直垂直合并合并l 直接使用中括号直接使用中括号l 使用使用 str
16、vcat 函数函数 str3=Matrix ;Laboratorystr4=strvcat(Matrix,Laboratory)l 在中括号中用在中括号中用分号分号实现垂直实现垂直合并合并,必须确保每个字符串,必须确保每个字符串长长度相等,不然需用空格补齐度相等,不然需用空格补齐l 用用 strvcat 合并合并,系统会系统会自动为较短字符串自动为较短字符串补充补充空格空格l 垂直合并垂直合并得到是一个字符得到是一个字符数组数组 27第27页第27页字符串执行字符串执行q 执行字符串所表示表示式或命令:执行字符串所表示表示式或命令:evalstr=1+2;a=eval(str)str=A=ma
17、gic(3);eval(str)str1=figure(1);mesh(peaks(60);str2=figure(2);waterfall(peaks(60);eval(str1)eval(str2)28第28页第28页函函 数数功功 能能函函 数数功功 能能strcmp字符串比较字符串比较strrep字符串替换字符串替换strcmpi字符串比较:字符串比较:忽略大小写忽略大小写strncmpn比较字符串前比较字符串前n个字符个字符upper转换为大写转换为大写lower转换为小写转换为小写blanks产生空字符串产生空字符串deblankn删除字符串中空格删除字符串中空格strmatch查
18、找匹配字符串查找匹配字符串findstr 在一个字符串中查找在一个字符串中查找另一字符串另一字符串strjustn对齐字符数组,涉对齐字符数组,涉及左对齐,右对齐及左对齐,右对齐和居中和居中strtokn返回字符串中第一个分隔返回字符串中第一个分隔符符(空格,回车和空格,回车和Tab键键)前部分前部分字符串相关函数字符串相关函数29第29页第29页q 细胞变量表示办法类似于带有下标数组,但这些下标不是细胞变量表示办法类似于带有下标数组,但这些下标不是用圆括号括起来,而是使用用圆括号括起来,而是使用大括号大括号。q 普通数组中每个元素都必须含有相同数据类型,而细胞则普通数组中每个元素都必须含有相
19、同数据类型,而细胞则没有此要求。没有此要求。细胞数组细胞数组/单元单元/元胞元胞n Matlab 从从 5.0 版开始引入了一个新数据类型版开始引入了一个新数据类型 细胞细胞(cell),该结构能够把不同类型数据纳入到一个变量中。,该结构能够把不同类型数据纳入到一个变量中。30第30页第30页细胞数组举例细胞数组举例31第31页第31页l 用赋值语句直接定义用赋值语句直接定义 l 用用 cell 函数预先分派空间,然后对细胞每个元素逐一赋值函数预先分派空间,然后对细胞每个元素逐一赋值细胞变量定义细胞变量定义A=1 2;3 4;str=Matlab;M=1:4,A,str;cellplot(M)
20、M=cell(2,3);M1,1=1;M1,2=rand(2);M1,3=hello;M2,1=1:3;M2,2=Matrix;M2,3=5;cellplot(M)q 能够通过下列两种方式定义一个细胞变量能够通过下列两种方式定义一个细胞变量M=cell(m,n);%生成一个生成一个 m 行行 n 列列 细胞数组细胞数组32第32页第32页细胞变量元素引用细胞变量元素引用A=1 2;3 4;str=Matlab;M=1:4,A,str;N=hello,M;eye(2),magic(3);N1,1N1,2N1,21,2N1,21,2(2,1)l 要引用细胞中单个元素,必须使用要引用细胞中单个元素,必须使用大括号大括号 33第33页第33页相关函数相关函数celldisp%列出细胞变量内容列出细胞变量内容cellplot%用图形方式显示细胞变量内容用图形方式显示细胞变量内容iscell%判别一个变量是否为细胞变量判别一个变量是否为细胞变量A=1 2;3 4;str=Matlab;M=1:4,A,str;celldisp(M);cellplot(M);iscell(A)iscell(M)34第34页第34页