《第2章 MATLAB数据及其运算(许).ppt》由会员分享,可在线阅读,更多相关《第2章 MATLAB数据及其运算(许).ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2章章 MATLAB数据及其运算数据及其运算2.1 数据类型数据类型2.2 矩阵描述矩阵描述2.3 数据运算数据运算2.4 字符串字符串2.5 单元数组单元数组2.6 结构型变量结构型变量1 矩阵是矩阵是MATLAB最基本、最重要的数据对象,大部最基本、最重要的数据对象,大部分运算或命令都是在矩阵运算的意义下执行的。向量分运算或命令都是在矩阵运算的意义下执行的。向量和单个数据都可以作为矩阵的特例来处理。和单个数据都可以作为矩阵的特例来处理。l常量和变量常量和变量l浮点数和复数浮点数和复数l字符串字符串l数组数组l结构体结构体(Structure)和单元和单元(Cell)数据类型。数据类型。
2、l逻辑型数据。在逻辑型数据。在MATLAB中,以数值中,以数值1(非零非零)表示表示“真真”,以数值,以数值0表示表示“假假”。2.1 MATLAB数据类型数据类型2.1.1 常量常量o在在MATLAB中有一些特定的变量,已经被预定义了某个特中有一些特定的变量,已经被预定义了某个特定的值,这些变量被称为常量。定的值,这些变量被称为常量。MATLAB 7中的常量主要中的常量主要有有pi、inf和和eps等。等。在使用时,应尽量避免对这些变量重在使用时,应尽量避免对这些变量重新赋值。新赋值。常常 量量常量的功能常量的功能常常 量量常量的功能常量的功能ansans用作结果的默认变量名用作结果的默认变
3、量名narginnargin函数的输入参数个数函数的输入参数个数beepbeep使计算机发出使计算机发出“嘟嘟嘟嘟”声声nargoutnargout函数的输出参数个数函数的输出参数个数pipi圆周率圆周率varaginvaragin可变的函数输入参数可变的函数输入参数个数个数epseps浮点数相对误差浮点数相对误差varagoutvaragout可变的函数输出参数可变的函数输出参数个数个数infinf无穷大无穷大realminrealmin最小的正浮点数最小的正浮点数NaNNaN或或nannan不定数不定数realmaxrealmax最大的正浮点数最大的正浮点数i i或或j j复数单位复数单位
4、bitmaxbitmax最大的正整数最大的正整数2.1.2 变量变量o变量是变量是MATLAB 7的基本元素之一,的基本元素之一,MATLAB 7语言不要求对所使用的变量进行事先说明,而且语言不要求对所使用的变量进行事先说明,而且无需指定变量的类型,系统会根据该变量被赋予无需指定变量的类型,系统会根据该变量被赋予的值或对该变量所进行的操作来自动确定变量的的值或对该变量所进行的操作来自动确定变量的类型。类型。o变量名是以字母开头,后接字母、数字或下划线变量名是以字母开头,后接字母、数字或下划线的字符序列,但不允许出现标点符号,最多的字符序列,但不允许出现标点符号,最多63个个字符字符o变量名区分
5、大小写变量名区分大小写2.1.3 浮点数浮点数o几乎在所有的情况下,几乎在所有的情况下,MATLAB 7的数据都是以双精度数值来的数据都是以双精度数值来表示的,这些双精度数在系统内部用二进制来表示。表示的,这些双精度数在系统内部用二进制来表示。o有很多实数不能被精确地表示,对能够表示的值也有一个限制,有很多实数不能被精确地表示,对能够表示的值也有一个限制,并且还存在一个浮点相对误差限并且还存在一个浮点相对误差限o所谓相对误差限是指所谓相对误差限是指MATLAB 7语言能够区分两个不同大小的语言能够区分两个不同大小的数时,这两个数之间的最小差值。数时,这两个数之间的最小差值。数据数据类类型型存存
6、储储空空间间表示范表示范围围类类型型转换转换函数函数单单精度型精度型singlesingle4 4字字节节3.402823.4028210103838 +3.40282+3.4028210103838single()single()双精度型双精度型doubledouble8 8字字节节1.797691.797691010308308 +1.79769+1.797691010308308double()double()浮点数举例浮点数举例n例例2-1 下边下边3个式子的计算结果是相同的,但是由个式子的计算结果是相同的,但是由于这些数字都是使用二进制存储的,在使用双精于这些数字都是使用二进制存储的
7、,在使用双精度数来表达这些数时,往往就会出现一些误差度数来表达这些数时,往往就会出现一些误差 o a=0.33-0.5+0.17oa=o 2.7756e-017o b=0.33+0.17-0.5ob=o 0o c=0.17-0.5+0.33oc=o 5.5511e-0172.1.4 复数复数oMATLAB 7语言对复数的处理也是十分简便的,语言对复数的处理也是十分简便的,在处理复数问题时,不需要进行其他任何的附加在处理复数问题时,不需要进行其他任何的附加操作。操作。o a2=pi+3.14joa2=o 3.1416+3.1400ioo b=4*(1+3/sqrt(-1)ob=o 4.0000-
8、12.0000io 复数举例复数举例o a=1+2*ioa=o 1.0000+2.0000io b=3-4iob=o 3.0000-4.0000io c=pi+sin(pi/2)*ioc=o 3.1416+1.0000io d=a+bod=o 4.0000-2.0000i2.2 矩阵描述矩阵描述o将矩阵的元素用方括号括起来,按矩阵行的顺序将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。分隔,不同行的元素之间用分号分隔。A=1 2 3;4 5 6;7 8 9;C=A,eye(size(
9、A);ones(size(A),A 1 2 3 1 0 0 4 5 6 0 1 0 7 8 9 0 0 1 1 1 1 1 2 3 1 1 1 4 5 6 1 1 1 7 8 9o冒号表达式冒号表达式 冒号表达式可以产生一个行向量,一般格式冒号表达式可以产生一个行向量,一般格式是:是:e1:e2:e3其中其中:e1为初始值,为初始值,e2为步长,为步长,e3为终止值。为终止值。在在MATLAB中,还可以用中,还可以用linspace函数产生行函数产生行向量。其调用格式为:向量。其调用格式为:linspace(a,b,n)其中其中a和和b是生成向量的第一个和最后一个元素,是生成向量的第一个和最后
10、一个元素,n是元素总数。是元素总数。显然,显然,linspace(a,b,n)与与a:(b-a)/(n-1):b等价。等价。矩阵的表示矩阵的表示o通过下标引用矩阵的元素,例如通过下标引用矩阵的元素,例如:A(3,2)=200:A(3,2)=200采用矩阵元素的序号来引用矩阵元素。矩阵元采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序。素的序号就是相应元素在内存中的排列顺序。在在MATLABMATLAB中,矩阵元素按列存储,先第一列,中,矩阵元素按列存储,先第一列,再第二列,依次类推。例如再第二列,依次类推。例如:A=1,2,3;4,5,6;A=1,2,3;4,5,
11、6;A(3)A(3)ansans=2=2矩阵元素矩阵元素序号序号(Index)与下标与下标(Subscript)是一是一一对应一对应的,以的,以mn矩阵矩阵A为例,矩阵元素为例,矩阵元素A(i,j)的的序号为序号为(j-1)*m+i。其相互转换关系也可。其相互转换关系也可利用利用sub2ind和和ind2sub函数求得。函数求得。(1)(1)利用冒号表达式获得子矩阵利用冒号表达式获得子矩阵 A(:,jA(:,j)表示取表示取A A矩阵的第矩阵的第j j列全部元素;列全部元素;A(iA(i,:),:)表示表示A A矩阵第矩阵第i i行的全部元素;行的全部元素;A(i,jA(i,j)表示表示取取A
12、 A矩阵第矩阵第i i行、第行、第j j列的元素。列的元素。A(i:i+mA(i:i+m,:),:)表示取表示取A A矩阵第矩阵第i ii+mi+m行的全部行的全部元素;元素;A(:,k:k+mA(:,k:k+m)表示取表示取A A矩阵第矩阵第k kk+mk+m列的全列的全部元素,部元素,A(i:i+m,k:k+mA(i:i+m,k:k+m)表示取表示取A A矩阵第矩阵第i ii+mi+m行内,并在第行内,并在第k kk+mk+m列中的所有元素。列中的所有元素。矩阵的拆分矩阵的拆分矩阵的拆分矩阵的拆分 (2)(2)利用空矩阵删除矩阵的元素利用空矩阵删除矩阵的元素 在在MATLABMATLAB中
13、,定义中,定义为空矩阵。给变量为空矩阵。给变量X X赋赋空矩阵的语句为空矩阵的语句为X=X=。注意,。注意,X=X=与与clear clear X X不同,不同,clearclear是将是将X X从工作空间中删除,而从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为空矩阵则存在于工作空间中,只是维数为0 0。o1基本算术运算基本算术运算 MATLABMATLAB的基本算术运算有:的基本算术运算有:(加加)、(减减)、*(乘乘)、/(/(右除右除)、(左除左除)、(乘方乘方)。3/5=0.6000 35=1.66672点运算点运算 在在MATLABMATLAB中,有一种特殊的运算,因为其运
14、算符是在中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有有关算术运算符前面加点,所以叫点运算。点运算符有.*.*、././、.和和.。两矩阵进行点运算是指它们的对应元两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。素进行相关运算,要求两矩阵的维参数相同。2.3 数据运算数据运算3.关系运算关系运算 6 6种关系运算符:种关系运算符:(小于小于)、=(大于大于)、=(=(大于或等于大于或等于)、=(=(等于等于)、=(=(不等于不等于)。两个维数相同的矩阵比较,是对两矩阵两个维数相同的矩阵比较,是对两矩阵相同位置相同位置的元的元素按标
15、量关系运算规则逐个进行,运算的结果是一个维数素按标量关系运算规则逐个进行,运算的结果是一个维数与原矩阵相同的矩阵,它的元素由与原矩阵相同的矩阵,它的元素由0 0或或1 1组成。组成。标量与矩阵比较时,把标量与矩阵比较时,把标量与矩阵的每一个元素标量与矩阵的每一个元素按标按标量关系运算规则逐个比较,运算的结果是一个维数与原矩量关系运算规则逐个比较,运算的结果是一个维数与原矩阵相同的矩阵,它的元素由阵相同的矩阵,它的元素由0 0或或1 1组成。组成。4.逻辑运算逻辑运算&(&(与与)、|(|(或或)和和(非非)。在算术、关系、逻辑运算中,在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算算术运
16、算优先级最高,逻辑运算优先级最低。优先级最低。5.MATLAB常用数学函数常用数学函数 数学函数使用说明:数学函数使用说明:(1)(1)三角函数以三角函数以弧度弧度为单位计算。为单位计算。(2)abs(2)abs函数可以求实数的绝对值、复数的模、字符串的函数可以求实数的绝对值、复数的模、字符串的ASCIIASCII码值。码值。(3)(3)用于取整的函数有用于取整的函数有fixfix、floorfloor、ceilceil、round round (4)(4)求余的函数求余的函数remrem与与modmod函数。函数。rem(x,yrem(x,y)和和mod(x,ymod(x,y)要求要求x,y
17、x,y必须为相同大小的实矩阵或标量。必须为相同大小的实矩阵或标量。mod(23,-3)=-1,rem(23,-3)=2mod(23,-3)=-1,rem(23,-3)=2mod(23,3)=rem(23,3)=2mod(23,3)=rem(23,3)=2例例2-2 建立建立5阶方阵阶方阵A,判断,判断A的元素是否能被的元素是否能被3整除。整除。A=24,35,13,22,63;23,39,47,80,80;.90,41,80,29,10;45,57,85,62,21;37,19,31,88,76 P=rem(A,3)=0 其中,其中,rem(A,3)是矩阵是矩阵A的每个元素除以的每个元素除以3
18、的余的余数矩阵。此时,数矩阵。此时,0被扩展为与被扩展为与A同维数的零矩同维数的零矩阵,阵,P是进行等于是进行等于(=)比较的结果矩阵。比较的结果矩阵。例例2-32-3 在在0,30,3区间,求区间,求y=y=sin(xsin(x)的值。要求:的值。要求:(1)(1)消去负半波,即(消去负半波,即(,2,2)区间内的函数值置)区间内的函数值置0 0。(2)(2)(/3,2/3/3,2/3)和()和(7/3,8/3 7/3,8/3)区间内)区间内取值均为取值均为sin/3 sin/3。先根据自变量向量先根据自变量向量x x产生函数值向量产生函数值向量y y,然后按要,然后按要求对求对y y进行处
19、理。处理的思路有两个:一是从自变进行处理。处理的思路有两个:一是从自变量着手进行处理,二是从函数值着手进行处理。量着手进行处理,二是从函数值着手进行处理。方法方法1:x=0:pi/100:3*pi;y=sin(x);y1=(x2*pi).*y;%消去负半波消去负半波q=(xpi/3&x7*pi/3&x=0).*y;%消去负半波消去负半波 p=sin(pi/3);y2=(y=p).*p+(y=10=10&A=20)A=a&ch str=今天,是今天,是2005年年10月月25日,日,我们班一起去上海旅游。我们班一起去上海旅游。str=今天,是今天,是2005年年10月月25日,日,我们班一起去上
20、海旅游。我们班一起去上海旅游。str(6)ans=0常见字符串的操作 函函 数数 名名函函 数数 用用 途途函函 数数 名名函函 数数 用用 途途strcatstrcat链接字符串链接字符串strvcatstrvcat垂直链接字符串垂直链接字符串strcmpstrcmp比较字符串大小比较字符串大小strncmpstrncmp比较字符串的前比较字符串的前n n个字符个字符findstrfindstr在在其其他他的的字字符符串串中中寻寻找找该该字字符串符串strjuststrjust证明字符数组证明字符数组strmatchstrmatch查找可能匹配的字符串查找可能匹配的字符串strrepstrr
21、ep用其他字符串代替改串用其他字符串代替改串strtokstrtok查找字符串中的记号查找字符串中的记号blanksblanks生成空的字符串生成空的字符串deblankdeblank删除字符串内的空格删除字符串内的空格ischarischar字符串检验字符串检验iscellstriscellstr字符串的单元检验字符串的单元检验isletterisletter字母检验字母检验isspaceisspace空格检验空格检验stringsstringsstringsstrings函数的帮助函数的帮助字符串的合并字符串的合并 strcat函数用于将字符串水平连接合并成一个新字符串,合函数用于将字符串
22、水平连接合并成一个新字符串,合并的同时会将字符串尾的空格删除。语法格式如下:并的同时会将字符串尾的空格删除。语法格式如下:strcat(s1,s2,)%将将s1,s2合并成一个长字符串合并成一个长字符串 char(s1,s2,)%将将s1,s2合并成一个字符数组合并成一个字符数组 strvcat(s1,s2,)%将将s1,s2合并成一个字符数组合并成一个字符数组s1=a+b,;s2=C+D;strcat(s1,s2)=a+b,C+D char(s1,s2)=a+b,C+D strvcat运行结果与运行结果与char相同相同o str1=a+b,ostr1=oa+b,o str1=strrep(
23、str1,*2)%将将,用用*2替换替换ostr1=oa+b*2o a=5o b=2o eval(str1)%执行字符串执行字符串str1oans=o 9o str2=upper(c+d)%将字符串转换为大写字母将字符串转换为大写字母ostr2=oC+D2.4.2 字符串的运算字符串的运算字符串的运算主要是指判断字符串是否相等,字符串的运算主要是指判断字符串是否相等,通过字符的运算来比较字符,字符串中字符的通过字符的运算来比较字符,字符串中字符的分类、查找与替换、字符串与数值的转换和数分类、查找与替换、字符串与数值的转换和数组与字符串的转换等。组与字符串的转换等。(1)判断字符串是否相等)判断
24、字符串是否相等 有两个函数可以用来判断两有两个函数可以用来判断两个输入的字符串是否相等。个输入的字符串是否相等。nstrcmp函数:比较两个字函数:比较两个字符串是否相等,当相等时,符串是否相等,当相等时,系统将返回值系统将返回值1,不相等,不相等时,返回值时,返回值0;nstrncmp函数:比较两个函数:比较两个输入字符串的前几个字符输入字符串的前几个字符是否相等,当相等时,系是否相等,当相等时,系统将返回值统将返回值1,不相等时,不相等时,返回值返回值0。o words1=人民文学人民文学;o words2=人民的同志人民的同志;o N=strcmp(words1,words2)oN=o
25、0o Y=strncmp(words1,words2,3)oY=o 0o x=strncmp(words1,words2,1)ox=o 1(2)字符串中字符的分类)字符串中字符的分类 字符串中的字符通常可以分为空白字符、字母字符和其字符串中的字符通常可以分为空白字符、字母字符和其他类型的字符。用户可以用他类型的字符。用户可以用isletter和和isspace两个函数来对两个函数来对字符串中的字符进行分类字符串中的字符进行分类。orealstring= orealstring= o A=isspace(realstring)oA=o Columns 1 through 11 o 0 0 0 0
26、 0 0 0 0 0 0 0o Columns 12 through 16 o 0 0 0 1 1.(3)查找与替换)查找与替换 查找与替换是字符串操作中的一项重要内容,查找与替换是字符串操作中的一项重要内容,MATLAB 7语言提供了语言提供了findstr、strfind和和strrep等函数来实现查找与替换操作。等函数来实现查找与替换操作。o s1=我们班的班长是是赵洁我们班的班长是是赵洁!;o s2=strrep(s1,赵洁赵洁,黄远黄远)os2=o我们班的班长是是黄远我们班的班长是是黄远!o s3=strrep(s2,黄远黄远!,谁?谁?)os3=我们班的班长是是谁?我们班的班长是是
27、谁?2.4.3 字符串与数值的转换字符串与数值的转换 函函 数数功功 能能函函 数数功功 能能hex2dehex2dec c将将1616进进制制字字符符串串转转化化为为1010进制整数进制整数dec2hdec2hexex将将1010进进制制整整数数转转化化为为1616进进制制字符串字符串bin2debin2dec c将将2 2进进制制字字符符串串转转化化为为1010进进制整数制整数dec2bdec2binin将将1010进进制制整整数数转转化化为为2 2进进制制字符串字符串base2dbase2decec转转化化B B底底字字符符串串为为1010进进制制整整数数hex2nhex2numum将将
28、1616进进制制字字符符转转化化为为双双精精度度数数upperupper改该字符串为大写改该字符串为大写lowerlower改该字符串为小写改该字符串为小写fprintfprintf f把把格格式式化化的的文文本本写写到到文文件件中或显示屏上中或显示屏上sprinsprintftf用用格格式式控控制制,数数字字转转换换成成字字符串符串sscanfsscanf用用格格式式控控制制,字字符符串串转转换换成数字成数字charcharASCIIASCII码转换成字符串码转换成字符串num2stnum2str r数字转换成字符串数字转换成字符串int2sint2strtr整数转换成字符串整数转换成字符串
29、字符串与数值的转换举例字符串与数值的转换举例使用使用str2num函数将字符型矩阵转换为数字矩函数将字符型矩阵转换为数字矩阵阵 o S=1 2 ;3 4 oS=%S为字符型矩阵为字符型矩阵o1 2o3 4o X=str2num(S)oX=%X为数字型矩阵为数字型矩阵o 1 2o 3 42.5.1 直接生成单元数组直接生成单元数组 用类似矩阵的记号将给复杂的数据结构纳入一个变量用类似矩阵的记号将给复杂的数据结构纳入一个变量之下。和矩阵中的圆括号表示下标类似,单元数组由之下。和矩阵中的圆括号表示下标类似,单元数组由大括号表示下标。大括号表示下标。o A=反对霸权反对霸权,Wind Gone,100
30、+200*i,90,85,55;67,70,102;57,18,100;-200,89,78oA=反对霸权反对霸权 Wind Gone 1.0000e+002+2.0000e+002i 4x3 double2.5 单单 元元 数数 组组 2.5.2 使用使用cell函数生成单元数组函数生成单元数组应用举例:应用举例:o A=cell(2,2)oA=o o o A1,1=富强富强 民主民主;文明文明 廉洁廉洁oA=o 2x4 char o 2.5.3 单元数组的内容的显示或获取单元数组的内容的显示或获取ocelldisp(A,Huang)o Huang1=o 反对霸权反对霸权o oHuang2=
31、o Wind Goneo o Huang3=o 1.0000e+002+2.0000e+002io Huang4=o 90 85 55o 67 70 102o 57 18 100o -200 89 782.5.4 单元数组的变维处理单元数组的变维处理 使用使用reshape函数进行操作。函数进行操作。o A=1 2;3 4,love;呼唤和平呼唤和平,90,85,55;67,70,102;57,18,100;-200,89,78oA=o 2x2 double love o 呼唤和平呼唤和平 4x3 doubleo a=reshape(A,1,4)oa=o 2x2 double 呼唤和平呼唤和平
32、 love 4x3 doubleo 2.6.结构型变量结构型变量o直接输入法生成结构型变量直接输入法生成结构型变量o使用使用struct函数生成结构型变量函数生成结构型变量 o在结构体变量中添加成员变量在结构体变量中添加成员变量 o在结构体变量中删除成员变量在结构体变量中删除成员变量 o在结构体变量中调用成员变量在结构体变量中调用成员变量 o getefield和和setfield函数的使用函数的使用 2.6.1 直接输入法生成结构型变量直接输入法生成结构型变量o student.test=99 56 96 87 67 69 87 76 92;o student.name=Wu Qing;o
33、student.weight=68;o student.height=1.72;o student.num=2003214091;o student.add=School of engneering.Tsinghua university;o student.tel=1381042679*;student=test:99 56 96 87 67 69 87 76 92 name:Wu Qing weight:68 height:1.7200 num:2.0032e+009 add:School of civil engneering.Tsinghua university tel:138104
34、2679*2.6.2 使用使用struct函数生成结构型变量函数生成结构型变量o truct_array=struct(d,北京北京,上海上海,strengths,40000 1000)otruct_array=o d 北京北京 上海上海o strengths 40000 10002.6.3 在结构体变量中添加成员变量在结构体变量中添加成员变量o student(1).gender=Male;%在在student中添加中添加gender和和age这这2项记录项记录o student(1).age=25;o student(2).gender=Female;o student(2).age=21
35、;o student o%查询查询student的结构的结构ostudent=o1x2 struct array with fields:o testo nameo weighto heighto numo addo telo gendero age2.6.4 在结构体变量中删除成员变量在结构体变量中删除成员变量 使用函数使用函数rmfield从结构体变量中删除成员变量从结构体变量中删除成员变量。o student=rmfield(student,age);ostudent=o1x2 struct array with fields:o testo nameo weighto heighto
36、numo addo telo gender2.6.5 在结构体变量中调用成员变量在结构体变量中调用成员变量o student(1).test%从结构体变量中取出相关信息从结构体变量中取出相关信息oans=o 99 56 96 87 67 69 87 76 92o student(1).test(5)oans=o 67o student(1).addoans=oSchool of civil engneering.Tsinghua university2.6.6 getefield和和setfield函数的使用函数的使用getefield函数取得当前存储在某个成员变量中的值函数取得当前存储在某个成员变量中的值。setfield函数给某个成员变量插入新的值函数给某个成员变量插入新的值。o GETF=getfield(student(1),add)oGETF=oSchool of civil engneering.Tsinghua universityo SETF=setfield(student(1),age,12)