1、1,数学软件 Matlab, 数据类型,2,变量与常量 数值型数据 逻辑型数据字符与字符串 细胞(cell)结构型数据句柄,内容提要,3,变量,变量是任何程序设计语言的基本元素之一,Matlab 变量的特点:,变量,不要求事先声明(也无法声明)不需要指定变量类型: 根据所赋的值或对变量所进行的操作来确定变量的类型变量的类型可以随时改变: 在赋值过程中,如果变量已经存在,Matlab 会用新值代替旧值,并以新的数据的类型代替旧的变量类型,如果能够事先给大数组分配空间,则可以提高程序的执行效率,4,必须以字母开头,含字母(大小写)、数字和下划线变量名长度不超过 65 ( Matlab6.5.1 版
2、本以上 )区分大小写,变量,变量命名要求,Matlab 预定义常量,5,数据类型,numeric:数值char:字符logical:逻辑cell:单元、细胞、元胞struct:结构,Matlab 常用的数据类型有:,6,Matlab7.x 中的数据类型表,逻辑,字符,细胞,函数句柄,7,为了提高数值计算的精度,若没有指定数据类型,则所有的数都被看作是双精度的浮点数使用整型数据或单精度数据可以节约内存空间,数值型,数值型数据,整数,浮点数,带符号,无符号,单精度,双精度,8,整型数据,Matlab 提供四种带符号整型和四种无符号整型,9,x1=11,x2=15,x3=16,x4=127,x5=2
3、55,x6=255,x7=0,举例,x1=int8(11);,x2=int8(15.49);,x3=int8(15.5);,x4=int8(130);,x5=uint8(255);,x6=uint8(256);,x7=uint8(-1);,10,相同整型数据之间的运算,结果为同类型的整数不同整型数据之间不能进行运算!,整型数据可以和双精度标量进行数值运算,结果为整数。在运算过程中保持浮点运算精度,最后将结果转换成整型。,整型数据不能与双精度数组进行运算,整型数据运算规则,整型数据运算规则:,x=int8(11); y=int8(5); z=x*y % OK,x=int8(11); y=int1
4、6(5); z=x*y % ERROR!,x=int8(11); y=1,2; z=x*y % ERROR!,11,例:,最大整数与最小整数,intmax(int8); intmin(int8);,intmax(uint8); intmin(uint8);,intmax; intmin;,intmax(int32); intmin(int32);,intmax 和 intmin 函数:查询不同整型数据所能表示的最大整数和最小整数,12,single:将数据转换成单精度浮点数,double:将数据转换成双精度浮点数,浮点数与其它类型数据运算表,浮点数,浮点数:单精度(占 4 个字节)和双精度(占
5、 8 个字节),X,13,最大和最小浮点数,例:,realmax(single); realmin(single);,realmax(double); realmin(double);,realmax; realmin;,realmax(double); realmin(double);,realmax 和 realmin :查询单精度和双精度所能表示的最大浮点数和最小浮点数,14,直接输入:,使用 complex 函数,复数,复数的输入方法,z=3+4i,z=complex(3,4),z=complex(3),z=complex(3,0),虚部与虚数单位之间不能留空格,15,整型数据相关函数
6、,16,浮点数相关函数,17,复数相关函数,18,其它相关函数,19,判断数据类型相关函数,20,字符串必须用单引号括起来,字符串是由多个字符组成的字符行向量,字符串,字符与字符串运算是各种高级语言不可缺少的部分,Matlab具有强大的字符处理能力,str1=Matrix Laboratory,str2=M,a,t,r,i,x,字符数组必须是方的,即每行的字符个数必须相等,str3=M,a,t; r,i,x,字符串和字符数组,21,字符串中的每个字符(包括空格)都是字符串的一个元素,字符串,str=Matrix; str(3) size(str),str=Matrix; double(str(
7、3); int16(str);,Matlab中字符是以 ASCII 码存储的,因而区分大小写,可用 double 等函数查看一个字符的 ASCII 码,22,使用 char 函数,ASCII 码 字符串,字符串的输入,直接输入,str1=Matrix; str2=Laboratory; str=str1, str2; str=str1; str2; / ERROR!,str=char(77,97,116,108,97,98),str=char(str1,str2),生成一个字符数组,第一行为 str1,第二行为 str2数组的列数=max(length(str1), length(str2),
8、23,字符与数的转换,字符串、字符数组与数值数组之间的转换,按 ASCII 码转换,字符 数:double、int8、int16、. 数 字符:char,直接将数转换成字符,字符 数:str2num (仅限于字符串由数字构成)数 字符:num2str、int2str、mat2str,a=97, 97.3; 97.8, 98; str1=char(a); str2=num2str(a); str3=int2str(a); str4=mat2str(a);,24,举例,char 的输入参数有效范围为 0,65535,当输入参数中有小数时,直接将小数部分舍去。,num2str 直接将每个数字转换成字
9、符,mat2str 把整个矩阵转换成字符行向量,包括矩阵中的方括号、空格 和 分号(逗号自动去除),a=1,2,3; b=num2str(a); c=2*a; % c=? d=2*b; % d=?,数值数组转换为字符数组后,表面上看象一个数值数组,但此时的元素是字符而不是数!,25,char、double、int8、int16 等是按 ASCII码 进行转换,str2num、num2str、int2str、mat2str 是直接进行转换,26,字符串的合并,字符串水平合并,直接使用中括号,使用 strcat 函数,str1=hello , world!,str2=strcat(hello ,w
10、orld!),使用 strcat 时,系统会自动去除原字符串结尾处的空格,水平合并得到的是一个更长的字符串,27,字符串的合并,字符串垂直合并,直接使用中括号,使用 strvcat 函数,str3=Matrix ; Laboratory,str4=strvcat(Matrix,Laboratory),在中括号中用分号实现垂直合并,必须保证每个字符串的长度相等,否则需用空格补齐,用 strvcat 合并,系统会自动为较短的字符串补充空格,垂直合并得到的是一个字符数组,28,字符串的执行,执行字符串所表示的表达式或命令: eval,str=1+2; a=eval(str),str=A=magic(
11、3); eval(str),str1=figure(1); mesh(peaks(60); str2=figure(2); waterfall(peaks(60); eval(str1) eval(str2),29,字符串相关函数,30,细胞变量的表示方法类似于带有下标的数组,但这些下标不是用圆括号括起来,而是使用大括号。,普通数组中的每个元素都必须具有相同的数据类型,而细胞则没有此要求。,细胞数组/单元/元胞,Matlab 从 5.0 版开始引入了一种新的数据类型 细胞 ( cell ),该结构可以把不同类型的数据纳入到一个变量中。,31,细胞数组举例,32,用赋值语句直接定义,用 cell
12、 函数预先分配空间,然后对细胞的每个元素逐个赋值,细胞变量的定义,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),可以通过以下两种方式定义一个细胞变量,M=cell(m,n); % 生成一个 m 行 n 列 的细胞数组,33,细胞变量元素的引用,A=1 2; 3 4; str=Matlab; M=1:4, A, str; N=hello, M; eye(2),ma
13、gic(3); N1,1 N1,2 N1,21,2 N1,21,2(2,1),要引用细胞中的单个元素,必须使用大括号,34,相关函数,celldisp % 列出细胞变量的内容,cellplot % 用图形方式显示细胞变量的内容,iscell % 判别一个变量是否为细胞变量,A=1 2; 3 4; str=Matlab; M=1:4, A, str; celldisp(M); cellplot(M); iscell(A) iscell(M),35,上机作业,1、已知 Chebyshev 多项式定义如下:,编程计算 T10(x) (注:Tn(x) 为 n 阶多项式),试用细胞数组实现(程序取名 m
14、101.m),2、阶梯问题:有一个长阶梯,若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;若每步上 7 阶,最后刚好一阶不剩。问该阶梯至少有多少阶?编程解决这个问题。(程序取名 m102.m),36,上机作业,3、哥德巴赫猜想:任何一个大于 2 的偶数都能表示成两个素数之和。试编程验证 3, 2000 中的偶数是否满足哥德巴赫猜想的论断,并将结果写入文本文件 m103.txt(程序取名 m103.m),4、由 0 到 9 共 10 个数字组成 4 个完全平方数(即是某个正整数的平方),要求它们分别是一位、二位、三位、四位的数字,且数位不重复(即 0 到 9 每个数字只能在这四个数字中出现一次)。例如:1 36 784 9025 9 16 784 3025 编程找出所有满足条件的数,并写入到文本文件 m104.txt 中。,(程序取名 m104.m),