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