《MATLAB数据类型.ppt》由会员分享,可在线阅读,更多相关《MATLAB数据类型.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据类型数学软件数学软件MATLAB常数和变量常数和变量数组和矩阵数组和矩阵字符串和多维数组字符串和多维数组结构和单元数组结构和单元数组数据类型数据类型q 变量变量u 变量是任何程序设计语言的变量是任何程序设计语言的基本元素基本元素之一。之一。u Matlab 并不要求对所使用的变量进行事先声明,并不要求对所使用的变量进行事先声明,也不需要指定变量类型,也不需要指定变量类型,Matlab 会自动根据所赋予变会自动根据所赋予变量的值或对变量所进行的操作来确定变量的类型。量的值或对变量所进行的操作来确定变量的类型。u 在赋值过程中,如果变量已经存在,在赋值过程中,如果变量已经存在,Matlab 会
2、用会用新值代替旧值,并以新值代替旧值,并以新的变量类型代替旧的变量类新的变量类型代替旧的变量类型型。变量与常量变量命名规则变量命名规则变量名的第一个字符必须是一个英文字母,最多变量名的第一个字符必须是一个英文字母,最多可包括可包括31个字符;个字符;x1,x2,x3,alpha,变量名可由英文字母、数字和下划线混合组成;变量名可由英文字母、数字和下划线混合组成;变量名不得包含空格和标点变量名不得包含空格和标点,但可以有下连字符但可以有下连字符变量名和函数名对字母的大小写敏感变量名和函数名对字母的大小写敏感;X,x,Z,z 是不同变量是不同变量常量名 常量值常量名常量值i,j虚数单位realmi
3、n最小的正浮点数pi圆周率realmax最大的正浮点数eps浮点运算相对精度NaN不定值Inf无穷大Matlab中经常使用的一些常量中经常使用的一些常量Matlab 常量q Matlab 中有一些预定义的变量,这些特殊变量称为常量。常常 数数返返 回回 值值ans默认变量名,保存最近的结果默认变量名,保存最近的结果eps浮点相对精度浮点相对精度realmax最大浮点数最大浮点数realmin最小浮点数最小浮点数pi圆周率圆周率i,j虚数单位虚数单位inf无限值无限值NaN不合法的数值值,非数值不合法的数值值,非数值computer计算机类型计算机类型versionMATLAB版本字符串版本字符
4、串例例2.a=abs(3+4i)a=5huge=exp(log(realmax)huge=1.7977e+308toobig=pi*hugeToobig=inf例例1 1.计算有理数计算有理数 2000/21 ans=95.2381数据类型l numeric:数值l char:字符l logical:逻辑l cell:单元、细胞、元胞l struct:结构q Matlab 数据类型的最大特点是每一种类型都是以数组为基础,Matlab 事实上把每种类型的数据都作为数组来处理。q Matlab 常用的数据类型有:常用的数据类型有:Matlab7.1 中的数据类型表中的数据类型表逻辑逻辑字符字符细胞
5、细胞函函数数句句柄柄数据类型数据类型举举 例例描描 述述逻辑型数组逻辑型数组Magic(4)10包含包含1、0或或true、false字符型数组字符型数组Hello长度长度16位,即为字符串位,即为字符串Int8、unit8int16、unit16Uint8(magic(3)长度为长度为8位、位、16位的有符号位的有符号和无符号整型数组和无符号整型数组single3*1038 单精度数值型数组单精度数值型数组double3*103005+6i双精度数值型数组双精度数值型数组单元数组单元数组17helloeye(2)包含其他数组。将不同大小包含其他数组。将不同大小有关系的数据集中到一起有关系的数
6、据集中到一起结构数组结构数组a.day=12;a.color=red;a.mat=magic(3);具有字段名。包含其他数组。具有字段名。包含其他数组。与单元数组类似与单元数组类似MATLAB用用format命令来控制输出格式,命令来控制输出格式,format short 短格式短格式 3.146format long 长格式长格式 3.14159265358979format short e 短格式短格式e 3.1416e+000format long e 长格式长格式e 3.141592653589793e+000format rat 分数格式分数格式 355/113format bank
7、 银行格式银行格式 3.14计算机浮点数记法计算机浮点数记法5.11108 5.11e+80.0000015=1.510-6 1.5e-6,2.4560000=2.456107 2.456e+7q 在缺省(默认)状态下,在缺省(默认)状态下,Matlab 将所有的数都将所有的数都看作是双精度的浮点数。看作是双精度的浮点数。q 使用整型变量和单精度变量可以节约内存空间。使用整型变量和单精度变量可以节约内存空间。数值型(numeric)q 数值型数据包括l 整数:整数:带符号带符号和和无符号无符号l 浮点数:浮点数:单精度单精度和和双精度双精度数据类型取值范围转换函数带符号 8 位整型-27,27
8、 1int8带符号 16 位整型-215,215 1int16带符号 32 位整型-231,231 1int32带符号 64 位整型-263,263 1int64无符号 8 位整型0,28 1uint8无符号 16 位整型0,216 1uint16无符号 32 位整型0,232 1uint32无符号 64 位整型0,264 1uint64整数q Matlab 提供四种带符号整型和四种无符号整型x1=11x2=15x3=16x4=127x5=255x6=255x7=0举例x1=int8(11);x2=int8(15.49);x3=int8(15.5);x4=int8(130);x5=uint8(
9、255);x6=uint8(256);x7=uint8(-1);u 相同整型数据之间的运算,结果为同类型的整数。例:int8(12)*int16(3)Xu 整型数据可以和双精度标量进行数值运算,结果为整数。在运算过程中保持浮点运算精度,最后将结果转换成整型。整型数据不能与不是标量的双精度整型数据不能与不是标量的双精度数组数组进行运算进行运算整型数据的运算q 整型数据可以参与的运算有下面两种:不同的整型数据之间不能进行运算不同的整型数据之间不能进行运算q 可以用 intmax 和 intmin 函数来查询不同整型所能表示的最大整数和最小整数。例:最大整数与最小整数intmax(int8);int
10、min(int8);intmax(uint8);intmin(uint8);intmax;intmin;intmax(int32);intmin(int32);l single:将数据转换成单精度浮点数l double:将数据转换成双精度浮点数operandsingledouble int/uintcharlogicalsinglesinglesinglesinglesingledoublesingledouble int/uintdoubledouble浮点数与其它类型数据运算表浮点数与其它类型数据运算表浮点数q 浮点数包括单精度(占 4 个字节)和双精度(占 8 个字节),缺省为双精度。q
11、 浮点数转换函数X最大和最小浮点数q 可以用 realmax 和 realmin 函数来查询单精度和双精度所能表示的最大浮点数和最小浮点数。例:realmax(single);realmin(single);realmax(double);realmin(double);realmax;realmin;realmax(double);realmin(double);u 直接输入:u 使用 complex 函数复数q 可以通过以下方式定义复数可以通过以下方式定义复数z=3+4iz=complex(3,4)z=complex(3)z=complex(3,0)虚部与虚数单位之间不能留空格虚部与虚数单
12、位之间不能留空格整型数据相关函数浮点数相关函数复数相关函数其它相关函数判断数据类型相关函数创建数组向量的三种常用方法创建数组向量的三种常用方法:1.增量法(增量法(利用冒号生成向量)利用冒号生成向量)利用冒号生成向量)利用冒号生成向量)x=i:j 如果如果如果如果 ij,生成以生成以生成以生成以i为初值为初值为初值为初值,j为终值为终值为终值为终值,1为为为为步长的有限等差数列步长的有限等差数列步长的有限等差数列步长的有限等差数列;x=i:j:k 如果如果如果如果 ik,生成以生成以生成以生成以i为初值为初值为初值为初值,k为终值为终值为终值为终值,-,-j为步长的有限等差数列为步长的有限等差
13、数列为步长的有限等差数列为步长的有限等差数列;只需要用空格或逗号间隔数组元素,再用方括号括起来。只需要用空格或逗号间隔数组元素,再用方括号括起来。如:如:X=0 2 3 6 7 8x=linspace(2,8)将生成将生成将生成将生成100100个数个数个数个数,以以以以2 2开始开始开始开始,以以以以8 8结束结束结束结束。y=linspace(2,8,10)y=linspace(2,8,10)将生成将生成将生成将生成1010个数个数个数个数,以以以以2 2开始开始开始开始,以以以以8 8结束结束结束结束。3.利用利用利用利用logspace(a,b)生成等比向量生成等比向量生成等比向量生成
14、等比向量例例3.3.用用dot()、cross()进行向量点积运算进行向量点积运算a=1:4;b=3:6;c=dot(a,b)c=50a=1:3;b=2:4;cross(a,b)ans=-1 2 -12.利用利用linspace(a,b)生成等差向量生成等差向量如:如:A=10:15 A=10 11 12 13 14 152/18创建矩阵的常用方法创建矩阵的常用方法:1.1.直接输入法直接输入法直接输入法直接输入法;2.;2.函数法函数法函数法函数法;3.3.矩阵编辑器矩阵编辑器矩阵编辑器矩阵编辑器;4.4.数据文件数据文件数据文件数据文件法法法法直接输入法三条规则:直接输入法三条规则:矩阵元
15、素必须在方括号矩阵元素必须在方括号 之内之内;同一行相邻元素间用同一行相邻元素间用逗号逗号或或空格空格分隔分隔;矩阵的行与行之间必须用矩阵的行与行之间必须用分号分号分隔分隔.例例4.三阶三阶Hilbert矩阵矩阵 A=1 1/2 1/3;1/2 1/3 1/4;1/3 1/4 1/5A=1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.20006/18C=产生空阵产生空阵r=rand 产生随机数产生随机数R=rand(3,4)产生产生3 4阶随机矩阵阶随机矩阵E=eye(3)产生产生3阶单位矩阵阶单位矩阵B=zeros(3,4)
16、产生产生3 4阶全阶全“0”矩阵矩阵D=ones(3,4)产生产生3 4阶全阶全“1”的矩阵的矩阵X=magic(3)产生产生3阶幻方阶幻方Y=vander(4)产生产生4阶范德蒙矩阵阶范德蒙矩阵函数法构造特殊矩阵函数法构造特殊矩阵索引生成索引生成A=5 7 8;0 1 9;4 3 6;/创建一个二维数组创建一个二维数组A(:,:2)=1 0 4;3 5 6;9 8 7;/为为A添加第三维添加第三维MATLAB函数生成函数生成B=randn(4,3,2);/创建正态分布随机数的创建正态分布随机数的432的数组的数组类似的函数有类似的函数有ones(),zeros()等等cat函数生成函数生成B
17、=cat(dim,A1,A2)/按指定的维数将多个数组聚合按指定的维数将多个数组聚合q 字符串和字符数组字符串和字符数组n 字符串必须用字符串必须用单引号单引号括起来括起来n 字符串是由多个字符组成的字符串是由多个字符组成的字符行向量字符行向量字符与字符串(char)q 字符与字符串运算是各种高级语言不可缺少的部分,Matlab具有强大的字符处理能力。str1=Matrix Laboratorystr2=M,a,t,r,i,xn 字符数组必须是方的,即每行的字符个数必须相等字符数组必须是方的,即每行的字符个数必须相等str3=M,a,t;r,i,xq 字符串中的每个字符(包括空格)都是字符串的
18、一个元素字符与字符串str=Matrix;str(3)size(str)str=Matrix;double(str(3);double(str);q Matlab中字符是以 ASCII 码存储的,因而区分大小写,可用 double 函数查看一个字符的 ASCII 码q 使用使用 char 函数函数ASCII 码码 字符串字符串字符串的生成q 直接赋值str1=Matrix;str2=Laboratory;str=str1,str2;str=char(77,97,116,108,97,98)str=char(str1,str2)l 生成一个字符数组,第一行为生成一个字符数组,第一行为 str1,
19、第二行为第二行为 str2l 数值矩阵到字符数组:数值矩阵到字符数组:num2str、int2str、mat2strl 字符数组到数值数组:字符数组到数值数组:str2num字符串与数值数组q 字符串、字符数组与数值数组之间的转换字符串、字符数组与数值数组之间的转换u 按 ASCII 码转换l 字符数组到数值数组:doublel 数值数组到字符串:charu 直接转换举例a=97,97.3;97.8,98;str1=char(a);str2=num2str(a);str3=int2str(a);str4=mat2str(a);l char 的输入参数范围为 0,65535,当输入参数中有小数时
20、,直接将小数部分舍去。l num2str 直接将每个数字转换成字符l mat2str 把整个矩阵转换成字符行向量,包括矩阵中的方括号、空格 和 分号(逗号自动去除)举例str5=mat2str(97,97.3;97.8,98);l 数值数组转换为字符数组后,表面上看象一个数值数组,但此时的元素是字符而不是数字!a=1,2,3b=num2str(a)c=2*ad=2*be=2*str2num(b)字符串的合并q 水平合并u 直接使用中括号直接使用中括号u 使用使用 strcat 函数函数 str1=hello,world!str2=strcat(hello,world!)l 使用 strcat
21、时,自动去除原字符串结尾处的空格l 水平合并得到的是一个更长的字符串 字符串的合并q 垂直合并u 直接使用中括号直接使用中括号u 使用使用 strvcat 函数函数 str3=Matrix ;Laboratorystr4=strvcat(Matrix,Laboratory)l 在中括号中用分号实现垂直合并,必须保证每个字符串的长度相等,否则需用空格补齐l 用 strvcat 合并,自动为较短的字符串补充空格l 垂直合并得到的是一个字符数组 运行字符串q 运行字符串所表示的表达式或命令:evalstr=1+2;a=eval(str)str=A=magic(3);eval(str)str1=fig
22、ure(1);mesh(peaks(60);str2=figure(2);waterfall(peaks(60);eval(str1)eval(str2)函 数功 能函 数功 能strcmp比较字符串strrep替换字符串strcmpi忽略大小写比较字符串strncmp 比较字符串的前n个字符upper转换为大写lower转换为小写blanks产生空字符串deblank 删除字符串中的空格strmatch 查找匹配的字符串findstr在一个字符串中查找另一字符串strjust对齐字符数组,包括左对齐,右对齐和居中strtok返回字符串中第一个分隔符(空格,回车和Tab键)前的部分字符串相关函
23、数q 细胞变量的表示方法类似于带有下标的数组,但这些下标不是用圆括号括起来,而是使用大括号。q 普通数组中的每个元素都必须具有相同的数据类型,而细胞则没有此要求。细胞数组(cell)q Matlab 从 5.0 版开始引入了一种新的数据类型 细胞(cell),该结构可以把不同类型的数据纳入到一个变量中。细胞数组举例u 用赋值语句直接定义 u 用 cell 函数预先分配存储空间,然后对细胞的每个元素逐个赋值。细胞变量的定义A=1 2;3 4;str=Matlab;M=1:4,A,str;celldisp(M)cell(m,n)l 生成一个 m 行 n 列 的细胞数组。q 可以通过以下两种方式定义
24、一个细胞变量举例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(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,1N1,2N1,21,2N1,21,2(2,1)l 细胞变量的引用必须使用大括号。相关函数celldispl 输出细胞变量的内容。cellplotl 用图形方式显示细胞变量的内容。iscelll
25、 判别一个变量是否为细胞变量。举例A=1 2;3 4;str=Matlab;M=1:4,A,str;celldisp(M);cellplot(M);iscell(A)iscell(M)3、获取数据、获取数据str=student(2).namestudent(3).test(2,2)=87IDs=student.ID/包含所有的包含所有的ID字段字段4、操作字段、操作字段student(2).gender=boy;/为数组的每个结构添加字段为数组的每个结构添加字段student=rmfield(student,name);/删除给定字段删除给定字段mean(student(2).test);/
26、计算计算test数组的行均值数组的行均值total=sum(student.ID);所有所有ID字段求和字段求和调用字段的数组调用字段的数组1、使用赋值语句创建结构数组、使用赋值语句创建结构数组student.name=Lu dan;/可包含任何类型的数据可包含任何类型的数据student.ID=02;student.test=79 75 73;80 78 77.5;80 85 85;student(2).name=Han xu;/扩展结构数组扩展结构数组student(2).ID=10;student(2).test=68 70 68;78 88 81;92 90 93;2、使用、使用struct函数函数str_array=struct(field1,val1,field2,val2,)