1、数学软件实习,Matlab 数据类型,文件操作是一种重要的输入输出方式,Matlab 提供了一系列输入输出函数,专门用于文件操作。,Matlab文件操作主要有三个步骤:首先打开文件,然后对文件进行读写操作,最后要关闭文件。,Matlab中的输入输出函数是以C语言标准库函数中的输入输出函数为基础开发的,所以这些函数与C语言的输入输出函数相类似。,例:ex4file1.m,Matlab 文件操作介绍,变量,变量是任何程序设计语言的基本元素之一。,Matlab 并不要求对所使用的变量进行事先声明,也不需要指定变量类型,Matlab 会自动根据所赋予变量的值或对变量所进行的操作来确定变量的类型。,在赋
2、值过程中,如果变量已经存在,Matlab 会用新值代替旧值,并以新的变量类型代替旧的变量类型。,变量与常量,变量名长度不超过 65 ( Matlab6.5.1 版本以上 ),变量名必须以字母开头,可包含字母(大小写)、数字和下划线,变量的命名规则,变量名区分大小写,Matlab中经常使用的一些常量,Matlab 常量,Matlab 中有一些预定义的变量,这些特殊变量称为常量。,数据类型,numeric:数值char:字符logical:逻辑cell:单元、细胞、元胞struct:结构,Matlab 数据类型的最大特点是每一种类型都是以数组为基础,Matlab 事实上把每种类型的数据都作为数组来
3、处理。,Matlab 常用的数据类型有:,Matlab7.1 中的数据类型表,逻辑,字符,细胞,函数句柄,在缺省(默认)状态下,Matlab 将所有的数都看作是双精度的浮点数。,使用整型变量和单精度变量可以节约内存空间。,数值型,数值型数据包括,整数:带符号和无符号浮点数:单精度和双精度,整数,Matlab 提供四种带符号整型和四种无符号整型,x1=11,x2=15,x3=16,x4=127,x5=255,x6=255,x7=0,举例,x1=int8(11);,x2=int8(15.49);,x3=int8(15.5);,x4=int8(130);,x5=uint8(255);,x6=uint
4、8(256);,x7=uint8(-1);,相同整型数据之间的运算,结果为同类型的整数。,例:int8(12)*int16(3),X,整型数据可以和双精度标量进行数值运算,结果为整数。在运算过程中保持浮点运算精度,最后将结果转换成整型。,整型数据不能与不是标量的双精度数组进行运算,整型数据的运算,整型数据可以参与的运算有下面两种:,不同的整型数据之间不能进行运算,可以用 intmax 和 intmin 函数来查询不同整型所能表示的最大整数和最小整数。,例:,最大整数与最小整数,intmax(int8); intmin(int8);,intmax(uint8); intmin(uint8);,i
5、ntmax; intmin;,intmax(int32); intmin(int32);,single:将数据转换成单精度浮点数,double :将数据转换成双精度浮点数,浮点数与其它类型数据运算表,浮点数,浮点数包括单精度(占 4 个字节)和双精度(占 8 个字节),缺省为双精度。,浮点数转换函数,X,最大和最小浮点数,可以用 realmax 和 realmin 函数来查询单精度和双精度所能表示的最大浮点数和最小浮点数。,例:,realmax(single); realmin(single);,realmax(double); realmin(double);,realmax; realmi
6、n;,realmax(double); realmin(double);,直接输入:,使用 complex 函数,复数,可以通过以下方式定义复数,z=3+4i,z=complex(3,4),z=complex(3),z=complex(3,0),虚部与虚数单位之间不能留空格,整型数据相关函数,浮点数相关函数,复数相关函数,其它相关函数,判断数据类型相关函数,字符串和字符数组,字符串必须用单引号括起来,字符串是由多个字符组成的字符行向量,字符与字符串,字符与字符串运算是各种高级语言不可缺少的部分,Matlab具有强大的字符处理能力。,str1=Matrix Laboratory,str2=M,a
7、,t,r,i,x,字符数组必须是方的,即每行的字符个数必须相等,str3=M,a,t; r,i,x,字符串中的每个字符(包括空格)都是字符串的一个元素,字符与字符串,str=Matrix; str(3) % 从 1 开始数起 size(str),str=Matrix; double(str(3); double(str); % 查看每一个字符的ASCII码,Matlab中字符是以 ASCII 码存储的,因而区分大小写,可用 double 函数查看一个字符的 ASCII 码,使用 char 函数,ASCII 码 字符串,字符串的生成,直接赋值,str1=Matrix; str2=Laborato
8、ry; str=str1,str2;,str=char(77,97,116,108,97,98),str=char(str1,str2),生成一个字符数组,第一行为 str1,第二行为 str2,数值矩阵到字符数组: num2str、int2str、mat2str字符数组到数值数组:str2num,字符串与数值数组,字符串、字符数组与数值数组之间的转换,按 ASCII 码转换,字符数组到数值数组:double,数值数组到字符串:char,直接将转换数值数组转换成字符数组,举例,a=97,97.3;97.8,98; str1=char(a); str2=num2str(a); str3=int2
9、str(a); str4=mat2str(a);,char 的输入参数范围为 0,65535,当输入参数中有小数时,直接将小数部分舍去。,num2str 直接将每个数字转换成字符,mat2str 把整个矩阵转换成字符行向量,包括矩阵中的方括号、空格 和 分号(逗号自动去除),举例,str5=mat2str(97,97.3;97.8,98);,数值数组转换为字符数组后,表面上看象一个数值数组,但此时的元素是字符而不是数字!,a=1,2,3 b=num2str(a) c=2*a d=2*b,e=2*str2num(b),double、char 是按 ASCII码 进行转换,num2str、int2
10、str、mat2str、str2num 是直接进行转换,字符串的合并,水平合并,直接使用中括号,使用 strcat 函数,str1=hello , world!,str2=strcat(hello ,world!),使用 strcat 时,自动去除原字符串结尾处的空格,水平合并得到的是一个更长的字符串,字符串的合并,垂直合并,直接使用中括号,使用 strvcat 函数,str3=Matrix ; Laboratory,str4=strvcat(Matrix,Laboratory),在中括号中用分号实现垂直合并,必须保证每个字符串的长度相等,否则需用空格补齐,用 strvcat 合并,自动为较短
11、的字符串补充空格,垂直合并得到的是一个字符数组,运行字符串,运行字符串所表示的表达式或命令: eval,str=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(str2),字符串相关函数,细胞变量的表示方法类似于带有下标的数组,但这些下标不是用圆括号括起来,而是使用大括号。,普通数组中的每个元素都必须具有相同的数据类型,而细胞则没有此要求。,细胞数组,Matlab 从 5.0 版开始引入了
12、一种新的数据类型 细胞 ( cell ),该结构可以把不同类型的数据纳入到一个变量中。,细胞数组举例,用赋值语句直接定义,用 cell 函数预先分配存储空间,然后对细胞的每个元素逐个赋值。,细胞变量的定义,A=1 2; 3 4; str=Matlab; M=1:4, A, str; celldisp(M),cell(m,n),生成一个 m 行 n 列 的细胞数组。,可以通过以下两种方式定义一个细胞变量,举例,A=1 2; 3 4; str=Matlab; M=1:4, A, str; N=hello, M; celldisp(N);,A=1 2; 3 4; str=Matlab; M=cell
13、(1,3); M1,1=1:4; M1,2=A; M1,3=str; celldisp(M),细胞变量元素的引用,A=1 2; 3 4; str=Matlab; M=1:4, A, str; N=hello, M; eye(2),magic(3);,N1,1 N1,2 N1,21,2 N1,21,2(2,1),细胞变量的引用必须使用大括号。,相关函数,celldisp,输出细胞变量的内容。,cellplot,用图形方式显示细胞变量的内容。,iscell,判别一个变量是否为细胞变量。,举例,A=1 2; 3 4; str=Matlab; M=1:4, A, str; celldisp(M); cellplot(M); iscell(A) iscell(M),