MATLAB基础与实例进阶-02_第1页
MATLAB基础与实例进阶-02_第2页
MATLAB基础与实例进阶-02_第3页
MATLAB基础与实例进阶-02_第4页
MATLAB基础与实例进阶-02_第5页
已阅读5页,还剩126页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/2/4机械工业出版社Page1第2章基础知识与基本运算【学习目标】熟悉MATLAB的基本数据类型熟悉MATLAB的基本运算符掌握MATLAB的数组及基本运算掌握MATLAB的矩阵及基本运算2023/2/4机械工业出版社Page2第2章基础知识与基本运算MATLAB数据类型2.1MATLAB基本运算符1.2MATLAB数组及其运算1.3MATLAB矩阵及其运算1.42023/2/4机械工业出版社Page32.1MATLAB数据类型2.1.1数值类型2.1.2逻辑类型2.1.3字符和字符串2.1.4函数句柄2.1.5结构体2.1.6单元数组2023/2/4机械工业出版社Page4MATLAB数值类型包括整数、单精度浮点数和双精度浮点数。默认情况下,MATLAB用双精度浮点数来保存所有数值类型数据。2.1.1数值类型2023/2/4机械工业出版社Page5有符号整数int8:1字节,-27-27-1int16:2字节,-215-215-1int32:3字节,-231-231-1int64:4字节,-263-263-12.1.1数值类型——整数2023/2/4机械工业出版社Page6无符号整数uint8:1字节,0-28-1uint16:2字节,0-216-1uint32:3字节,0-232-1uint64:4字节,0-264-12.1.1数值类型——整数2023/2/4机械工业出版社Page7整数转换函数int8:创建有符号8bit整数int16:创建有符号16bit整数int32:创建有符号32bit整数int64:创建有符号64bit整数uint8:创建无符号8bit整数uint16:创建无符号16bit整数uint32:创建无符号32bit整数uint64:创建无符号64bit整数2.1.1数值类型——整数2023/2/4机械工业出版社Page8整数运算原则相同整型数据之间的运算,结果为同种类型的整数;不同类型整数之间不能进行运算;整数可以和双精度标量进行数值运算,结果为整数;整数不能与不是标量的双精度数组进行运算2.1.1数值类型——整数2023/2/4机械工业出版社Page9整数最大值与最小值MATLAB提供了intmax和intmin两个函数来查询各种类型整数的最大值和最小值。当数据的值超出了所要转换类型的表示范围时,MATLAB会自动将它们设置成对应整数类型的最大值或最小值。2.1.1数值类型——整数2023/2/4机械工业出版社Page10【例2-1】创建一个int16类型的整数275,并将包含小数的浮点数275.49转换为整数。2.1.1数值类型——整数>>x=int16(275)x=275>>y=275.49;>>int16(y)

ans=275>>y=y+0.01;>>int16(y)

ans=2762023/2/4机械工业出版社Page11【例2-2】利用intmax和intmin函数获取整数最大值与最小值示例。2.1.1数值类型——整数>>intmax('int16')

ans=32767>>intmin('int8')

ans=-128>>x=int16(33000)x=32276>>x=int8(-350)x=-1282023/2/4机械工业出版社Page12单精度浮点数——32bit双精度浮点数——64bit2.1.1数值类型——浮点数字节位代表功能31符号位(0代表正数,1代表负数)30-23指数位

0-27-122-01.f中的小数位f字节位代表功能63符号位(0代表整数,1代表负数)62-52指数位0-210-151-01.f中的小数位f2023/2/4机械工业出版社Page13创建浮点数

MATLAB默认是以双精度浮点数来保存数据的,所以我们可以使用赋值操作来创建一个double数据,而创建单精度浮点数则必须使用single转换函数。对于大于3.4028×1038或与小于-1.1755×1038的数,需要用双精度浮点数来表示。2.1.1数值类型——浮点数2023/2/4机械工业出版社Page14浮点数运算原则单精度浮点数与float、double、char或logical类型数据运算,结果为float;单精度浮点数不能int/uint类型数据运算;双精度浮点数与float类型数据运算,结果为float类型;双精度浮点数与int/uint类型数据运算,结果为int/uint类型;双精度浮点数与double、char、logical类型数据运算,结果为double2.1.1数值类型——浮点数2023/2/4机械工业出版社Page15浮点数最大值与最小值MTALAB提供了realmax和realmin函数用于查询单精度和双精度浮点数所能表示的最大和最小值,函数参数指明查询浮点数的类型,对于双精度浮点数,realmax和realmin函数可以不用指定参数。2.1.1数值类型——浮点数2023/2/4机械工业出版社Page16【例2-3】创建单精度和双精度浮点数。2.1.1数值类型——浮点数>>x=single(120.45);>>whosxNameSizeBytesClassAttributesx1x14single

>>x=120.45;>>whosxNameSizeBytesClassAttributesx1x18double2023/2/4机械工业出版社Page17【例2-4】查询浮点数最大值和最小值。2.1.1数值类型——浮点数>>realmax('single')%查询单精度浮点数的最大值

ans=3.4028e+038>>realmin('single')%查询单精度浮点数的最小值

ans=1.1755e-038>>realmax %查询双精度浮点数的最大值

ans=1.7977e+308>>realmin %查询双精度浮点数的最小值

ans=2.2251e-3082023/2/4机械工业出版社Page18MATLAB用“0”和“1”分别代表逻辑“假”和逻辑“真”。逻辑类型常以标量形式出现,但也可以是逻辑数组。MATLAB程序中,用户在使用各种控制语句的时候,经常需要使用返回的逻辑值作为控制语句的判断条件。2.1.2逻辑类型2023/2/4机械工业出版社Page19识别逻辑数据函数五个函数可用于逻辑数据的判断:whos(x):显示数据x的数值和数据类型;islogical(x):若x是逻辑数组则返回“真”;isa(x,‘logical’):若x是逻辑数组返回“真”;class(x):若x是逻辑数组返回“真”;cellfun(‘islogical’,x):检查数组x的元素是否是逻辑数据。2.1.2逻辑类型2023/2/4机械工业出版社Page20返回结果为逻辑数据的函数及运算符true:设置数据值为逻辑“真”;false:设置数据值为逻辑“假”;logical:将数据转换为逻辑值;&、|,~,xor,any、all、&&和||;=,~=,<,>,<=和>=:关系运算;所有is*函数:测试运算函数;strcmp,strncmp,strcmpi和strncmpi:字符串比较操作函数。2.1.2逻辑类型2023/2/4机械工业出版社Page21【例2-5】利用关系运算符以及isstrprop和xor函数创建逻辑数组。2.1.2逻辑类型>>[20,30,40,50,60]>35

ans=00111>>A=isstrprop('abc123def','alpha') A=111000111>>xor([10'ab'2.4],[00'ab',0])

ans=100012023/2/4机械工业出版社Page22构造字符和字符串用char表示MATLAB字符;用2字节的Unicode统一字符编码来存储,一般用单引号来定义一个字符变量;用string表示MATLAB字符串;可以用字符数组或字串单元来创建字符串;字符串用一对单引号将多个字符括起来构建2.1.3字符和字符串>>str='Hello,MATLAB!';>>whos

strNameSizeBytesClassAttributes

str1x1326char2023/2/4机械工业出版社Page23格式化字符串sprintf:按照指定格式将数据写入输出字符串;fprintf:按照指定格式将数据写入输出文件或命令窗口;warning:在警告信息中显示格式化数据;error:在错误信息中显示格式化的数据;assert:在条件不满足时,生成错误信息;MException:捕获错误信息。2.1.3字符和字符串2023/2/4机械工业出版社Page24格式化字符串——函数语法形式

2.1.3字符和字符串functionname(…,format_string,value1,value2,…,valueN)format_string:包含输出字符串的基本内容和需要转换的输出格式字符(如%d、%s等);value1,value2,valueN:对应format_string

中第一个至第N个需要转换格式的数值。>>sprintf('Average%sscoreof%dindividualis%2.fpoints.','english',60,83.5)ans=Averageenglishscoreof60individualis83.50points.2023/2/4机械工业出版社Page25字符串比较MATLAB提供了三种字符串比较方法:比较两个字符串是否完全相同或部分相同;逐字符比较两个字符串是否相同;检查字符串中的单个字符的类别归属。2.1.3字符和字符串2023/2/4机械工业出版社Page26字符串比较——比较字符串strcmp:比较两个字符串是否完全相同;strncmp:比较两个字符串的前n个字符是否相同;strcmpi:与strcmp类似,但strcmpi会忽略字母大小写的区别;strcnmpi:与strcnmp类似,但strcnmpi会忽略字母大小写的区别;2.1.3字符和字符串2023/2/4机械工业出版社Page27【例2-6】利用字符串比较函数判断字符串是否相同。2.1.3字符和字符串>>str1='hello';str2='help';>>strcmp(str1,str2)

ans=0>>strncmp(str1,str2,3)

ans=1>>str3='Help';>>strcmpi(str2,str3)

ans=12023/2/4机械工业出版社Page28字符串比较——比较字符串中字符MATLAB利用关系运算符“==”来实现两个字符串逐个字符的比较;待比较的两个字符串长度必须相等,或者其中有一个是单字符。

2.1.3字符和字符串2023/2/4机械工业出版社Page29【例2-7】比较两个字符串里的字符是否相同。2.1.3字符和字符串>>str1='hello';str2='help';str3='Help';>>str1==str2%对长度不相等的字符进行比较???Errorusing==>eq

%错误信息Matrixdimensionsmustagree.>>str2==str3

ans=0111>>str4='h';>>str1==str4%字符串与单个字符比较

ans=100002023/2/4机械工业出版社Page30字符串比较——判别字符串中字符类别isletter:判断字符串中的每个字符是否为英文字母;isspace:判断字符串中的字符是否属于格式字符(空格、制表符、回车和换行等);isstrprop:逐字符检测字符串里的字符是否属于指定范围(字母、字母和数字、大写或小写、十进制数、十六进制数等)。2.1.3字符和字符串2023/2/4机械工业出版社Page31字符串查找strfind(str,pattern):在字符串str中查找pattern子串,返回字串出现位置;findstr(str1,str2):查找字符串str1和str2,返回较短字符串在较长字符串中出现的位置;strmatch(str,strarray):从字符串数组strarray中查找所有以字符串str开头的字符串Strtok(str,char):返回字符串str中由char指定的字符前的部分和之后的部分,默认的char为空格、制表符或换行符。后两个函数在MATLAB将来版本中将移除!2.1.3字符和字符串2023/2/4机械工业出版社Page32【例2-8】利用strfind函数在字符串'himatlab2010!'中查找字符串'mat',并利用strtok函数将该字符串以空格分隔。2.1.3字符和字符串>>str1='himatlab2010!';>>str2='mat';>>strfind(str1,str2)

ans=4>>[token,remain]=strtok(str1)token=hiremain=matlab2010!2023/2/4机械工业出版社Page33字符串替换strrep(str1,str2,str3):函数将字符串str1中所有str2字串用str3来替换;strrep对字母的大小写敏感,只能替换str1中与str2完全一致的字串。2.1.3字符和字符串2023/2/4机械工业出版社Page34【例2-9】将字符串'himatlab2010!'中的子字符串'mat'替换为‘Mat’。2.1.3字符和字符串>>str1='himatlab2010!';>>str2='mat';>>str3='Mat';>>strrep(str1,str2,str3)

ans=hiMatlab2010!2023/2/4机械工业出版社Page35函数句柄(Functionhandle)是MATLAB的一种数据类型,他实际上提供了一种间接调用函数的方法。使用函数句柄,方便了实现函数间互相调用,可以拓宽子函数的使用范围,提高函数调用的可靠性,减少程序设计中的冗余和提高重复执行的效率。2.1.4函数句柄2023/2/4机械工业出版社Page36创建函数句柄创建函数句柄的语法形式如下:h=@functionname其中:h:为保存函数句柄的变量;@:是句柄创建操作符;

functionname:MATLAB内部函数名称或函数所对应的M文件的名称。2.1.4函数句柄2023/2/4机械工业出版社Page37使用函数句柄创建函数句柄并保存变量后,就可以通过函数句柄变量来调用句柄所关联的函数。通过函数句柄调用函数时,也需要指定函数的输入参数;没有输入参数的函数,在使用句柄调用时,要在句柄变量后加上空的圆括号;内部函数名称或函数所对应的M文件的名称。2.1.4函数句柄2023/2/4机械工业出版社Page38函数句柄处理函数functions:返回函数句柄的描述信息;func2str:将函数句柄转换为函数名称字符串str2func:将字符串代表的函数转换为函数句柄;save:保存函数句柄到MAT文件中;load:从MAT文件中读入函数句柄到当前工作空间;isa:判断一个变量是否包含和一个函数句柄isequal:判断两个函数句柄是否指向同一个函数。2.1.4函数句柄2023/2/4机械工业出版社Page39【例2-10】创建cos函数的句柄,并利用该函数句柄计算数组的余弦值。2.1.4函数句柄>>h=@cos;>>v=0:0.2*pi:pi;>>h(v)ans=1.00000.80900.3090-0.3090-0.8090-1.00002023/2/4机械工业出版社Page40结构体相当于一个数据容器,把多个相关联的不同类型的数据封装在一个结构体对象中。结构体是利用域而非下标索引来对结构元素进行寻址;用点号来访问域中的数据。2.1.5结构体2023/2/4机械工业出版社Page41赋值语句创建结构体赋值表达式左边代表了结构体的字段变量名,右边是给变量所赋予的值。在对结构体的字段进行赋值时,该字段会自动创建。借助圆括号和索引,用户可轻松创建拥有相同结构的结构体数组对象。2.1.5结构体2023/2/4机械工业出版社Page42【例2-11】利用赋值语句创建结构体示例。2.1.5结构体>>='Tom';>>person.sex='male';>>person.age=20;>>personperson=name:'Tom'sex:'male'age:20>>person(2).name='Jack';>>person(2).sex='male';>>person(2).age=18;>>personperson=1x2structarraywithfields:namesexage2023/2/4机械工业出版社Page43struct函数创建结构体函数的语法形式如下

:sArray=struct('field1',values1,'field2',values2,...)其中:filed1、field2:结构体包含的第一个和第二个字段value1、value2:结构体第一个字段和第二个字段的数值sArray:所创建的结构体对象名sArray2.1.5结构体2023/2/4机械工业出版社Page44【例2-12】struct函数创建结构体示例。2.1.5结构体>>person=struct('name','Tom','sex','male','age',20)person=name:'Tom'sex:'male'age:202023/2/4机械工业出版社Page45增加结构体字段当为结构体数组中的任意一个元素定义一个新的字段时,该数组中的所有元素都会增加一个新的字段。删除结构体字段rmfield函数来删除结构体的字段;strArray2=rmfield(strArray,'field')参数分别为结构体对象和待删除字段;2.1.5结构体2023/2/4机械工业出版社Page46【例2-13(14)】修改结构体示例。2.1.5结构体>>person(2).height=175;>>person(1)ans=name:'Tom'sex:'male'age:'20'height:[]>>person(2)ans=name:'Jack'sex:'male'age:18height:175>>newperson=

rmfield(person,'sex')newperson=1x2structarraywithfields:nameageheight2023/2/4机械工业出版社Page47访问结构体MATLAB中对结构体成员字段的访问与C、C++和Java中对结构体成员变量的访问很类似,他们都是在结构体数组对象后通过“.”运算符和字段名来实现对字段的访问。MATLAB是通过圆括号()与索引下标来访问结构体数组元素。2.1.5结构体2023/2/4机械工业出版社Page48【例2-15】利用圆括号和点运算符访问结果体数组person中的元素及字段。2.1.5结构体>>person(1).name

ans=Tom>>person(2).height

ans=175>>fori=1:length(person)

disp(person(i).name);endTomjack

2023/2/4机械工业出版社Page49结构体嵌套

结构体可以包含多个字段,并且每个字段都可以存储不同类型的数据,包括结构体类型的数据。当结构体的字段也是结构体时,就是这里所介绍的结构体嵌套。

2.1.6结构体2023/2/4机械工业出版社Page50【例2-16】为结构体数组person增加一个结构体类型的字段parent,该字段包含father和mother两个字段。2.1.5结构体>>person(1).parent.father='Joson';>>person(1).parent.mother='Jerry';>>person(1)ans=name:'Tom'sex:'man'age:'20'height:[]parent:[1x1struct]>>person(1).parentans=father:'Joson'mother:'Jerry'2023/2/4机械工业出版社Page51单元数组是MATLAB中的一种特殊数据结构。与结构体类型类似,单元数组也可以存储不同类型、不同大小的数据。不同的是,单元数组的一个单元既可以包含一个整数数组或浮点数数组,也可以包含一个字符数组或是复数数组。2.1.6单元数组2023/2/4机械工业出版社Page522.1.6单元数组cell1,1cell1,2cell2,1cell2,22023/2/4机械工业出版社Page53赋值语句创建单元数组内容下标索引赋值:花括号出现在赋值语句左侧A{1,2}=[241;563;789];

单元下标索引赋值:花括号出现赋值语句右侧时,左侧用圆括号来标识索引

A(2,1)={[1+i*2-2;4-i*5i*6]};

2.1.6单元数组2023/2/4机械工业出版社Page54【例2-17】赋值语句创建单元数组示例。2.1.6单元数组>>A{1,1}=char('Hello,MATLAB!','IloveMATLAB.','WelcometoMATworld!');>>A{1,2}=[241;563;789];>>A(2,1)={[1+i*2-2;4-i*5i*6]};A(2,2)={[]};

A=[3x21char][3x3double][2x2double] []>>A(1,2)ans=[3x3double]>>A{1,2}ans=2415637892023/2/4机械工业出版社Page55cell函数创建结构体函数的语法形式如下

cellarrName=cell(m,n)该语句创建了一个包含m行n列的单元数组,将其保存在cellarrName中。说明:利用cell函数创建单元数组后,还需对数组的每一个单元进行赋值。

2.1.6单元数组2023/2/4机械工业出版社Page56【例2-18】cell函数创建单元数组示例。2.1.6单元数组>>B=cell(2,2);>>B{1,1}=rand(2,2);>>BB=[2x2double][][][]>>B{1,1}ans=0.81470.12700.90580.91342023/2/4机械工业出版社Page57扩展单元数组利用赋值语句给单元数组中的单位赋值,如果这个单元不存在,MATLAB会自动创建对应的单元。删除结构体字段如果要删除单元数组中的部分元素,只要将空值赋给这一部分元素即可;若要删除单元数组的所有元素,调用clear命令即可。2.1.6单元数组2023/2/4机械工业出版社Page58【例2-19】扩展和删除单元数组示例。2.1.6单元数组>>A{3,3}=rand(2,2);>>AA=[3x21char][3x3double] [][2x2double] [] [][] [][2x2double]>>A(3,:)=[];>>AA=[3x21char][3x3double][][2x2double][][]2023/2/4机械工业出版社Page59访问单元数组利用花括号标识的内容下标索引能够直接访问单元数据内的数据。利用圆括号标识的单元下标索引只能定位单元数组中单元的位置,其返回结果仍然是一个单元类型的数组若想得到单元数组中某个单元内容的子集,可通过两套下标来达到目的。2.1.6单元数组2023/2/4机械工业出版社Page60【例2-20】访问单元数组内部数据示例。2.1.6单元数组>>A{1,1}=char('Hello,MATLAB!','IloveMATLAB.','WelcometoMATworld!');>>A{1,2}=[241;563;789];>>A(2,1)={[1+i*2-2;4-i*5i*6]};A(2,2)={[]};>>A{1,2}(1,2)

ans=4>>B=A(1,2)B=[3x3double]%B的大小为1×1>>B{1,1}

%返回B(1,1)中的内容

ans=241;563;789>>B{1,1}(3,3)

%返回B(1,1)中(3,3)位置的内容

ans=92023/2/4机械工业出版社Page61结构体嵌套和结构体类型类似,单元数组也支持嵌套。嵌套单元数组的创建及各种操作与一般单元数组类似,都是通过花括号来指定单元内容。2.1.6单元数组2023/2/4机械工业出版社Page62【例2-21】创建嵌套单元数组示例。2.1.6单元数组>>A{1,1}=char('Hello,MATLAB!','IloveMATLAB.','WelcometoMATworld!');>>A{1,2}=[241;563;789];A{2,1}=[1+i*2-2;4-i*5i*6];>>A{2,2}(1,1)={‘Hi,Everyone!’};A{2,2}(1,2)={rand(2,2)};>>A{2,2}(2,2)={cell(2,2)};A=[3x21char][3x3double][]{2x2cell}>>A{2,2}ans='Hi,Everyone!'[2x2double][]{2x2cell}2023/2/4机械工业出版社Page632.2基本运算符2.2.1算术运算符2.2.2关系运算符2.2.3逻辑运算符2.2.4运算符优先级2023/2/4机械工业出版社Page64算术运算符用于实现数值的计算,按作用对象的不同,可以将MATLAB算符运算符可分为数组运算符和矩阵运算符两类。2.2.1算术运算符2023/2/4机械工业出版社Page65数组运算符+:数组相加运算符;-

:数组相减运算符;.*

:数组相乘运算符;./:数组右除运算符;.\:数组左除运算符;.^

:数组乘方运算符;.’

:数组转置运算符;2.2.1算术运算符算术运算,是两个同维数组对应元素之间的运算。当一个标量与数组进行算术运算,标量与数组每个元素都进行运算。2023/2/4机械工业出版社Page66矩阵运算符+:矩阵相加运算符;-

:矩阵相减运算符;*:矩阵相乘运算符;/:矩阵右除运算符;\

:矩阵左除运算符;^

:矩阵乘方运算符;’:矩阵转置运算符;::矩阵索引运算符,用于增量操作。2.2.1算术运算符

MATLAB矩阵运算是按线性代数的规则进行运算,利用矩阵运算符对矩阵进行操作时矩阵的维数要满足相关运算条件。。2023/2/4机械工业出版社Page67关系运算符用于比较两个同维数组或同维向量的对应元素,结果为与操作数同维的逻辑数组,数组的每个元素为逻辑真或逻辑假。

2.2.2关系运算符2023/2/4机械工业出版社Page68小于运算符<

,当左操作数小于右操作数时返回逻辑真,否则返回逻辑假;小于等于运算符<=:当左操作数小于等于右操作数时返回逻辑真,否则返回逻辑假大于运算符>

:当左操作数大于右操作数时返回逻辑真,否则返回逻辑假;2.2.2关系运算符2023/2/4机械工业出版社Page69大于等于运算符>=:当左操作数大于等于右操作数时返回逻辑真,否则返回逻辑假;等于操作符==

:当左操作数与右操作数相等时返回逻辑真,否则返回逻辑假;不等于操作符~=:当左操作数与右操作数不相等时返回逻辑真,否则返回逻辑假。2.2.2关系运算符2023/2/4机械工业出版社Page70【例2-22】关系运算符使用示例。2.2.2关系运算符>>A=rand(3,3)A=0.42180.95950.84910.91570.65570.93400.79220.03570.6787>>B=rand(3,3)B=0.75770.65550.03180.74310.17120.27690.39220.70600.0462>>A>Bans=0111111012023/2/4机械工业出版社Page71

MATLAB包含三种类型的逻辑运算:逐元素逻辑运算、捷径逻辑运算和逐位逻辑运算,其中前面两类以运算符的形式提供。2.2.3逻辑运算符2023/2/4机械工业出版社Page72逐元素逻辑运算符逻辑与&

:当左操作数和右操作数都为逻辑“真”时,返回逻辑“真”,否则返回逻辑“假”;逻辑或|:当左操作数或右操作数为逻辑“真”时,返回逻辑“真”,否则返回逻辑“假”逻辑非~

:单目运算符,当操作数为逻辑“真”或非零时,返回逻辑“假”,否则返回逻辑“真”。2.2.3逻辑运算符2023/2/4机械工业出版社Page73捷径逻辑运算符逻辑与&&:当左操作数为逻辑“假”时,不再对右操作数进行判断,直接返回逻辑“假”,否则同逐元素逻辑与(&);逻辑或||:当左操作数为逻辑“真”时,不再对右操作数进行判断,直接返回逻辑“真”,否则同逐元素逻辑或(|)。2.2.3逻辑运算符2023/2/4机械工业出版社Page74同C、C++等高级编程语言一样,MATLAB对各种运算符的优先级也作了规定。在进行运算时,遵循高优先级的运算符先于低优先级运算符的计算,相同优先级的运算符的计算遵从左到右的原则。

MATLAB的运算符共有11个优先级。2.2.4运算符优先级2023/2/4机械工业出版社Page751.小括号(());2.转置和乘幂(.’、.^、’、^);3.一元加/减运算(+、-)和逻辑非(~);4.乘(*),除(/、\),点乘(.*)、点除(./、.\);5.加(+)、减(-);6.冒号运算(:);7.关系运算(>、>=、<、<=、==、~=);

2.2.4运算符优先级2023/2/4机械工业出版社Page768.逐元素逻辑与(&);9.逐元素逻辑或(|);10.捷径逻辑与(&&);11.捷径逻辑或(||)。2.2.4运算符优先级在所有运算符中,括号运算符优先级最高,其次是各种算术运算符,然后是关系运算符,优先级最低的是逻辑运算符。2023/2/4机械工业出版社Page772.3数组及其运算2.3.1数组的创建2.3.2数组元素的访问2.3.3数组操作2.3.4数组运算2.3.5多维数组2023/2/4机械工业出版社Page78按照数组排列方式和元素个数的不同,可以将MATLAB数组分为空数组、一维数组、二维数组和多维数组。MATLAB一般使用方括号、逗号、空格和分号来创建数组。方括号中给出数组的所有元素,不同行之间用分号分隔,同一行不同元素之间用逗号和空格分隔。2.3.1数组的创建2023/2/4机械工业出版社Page79创建空数组A=[]创建一维数组创建一维行向量,把所有用空格或逗号分隔的元素用方括号括起来;创建一维列向量,把所有用分隔分隔的元素用方括号括起来;利用转置运算符将行向量转换为列向量。2.3.1数组的创建2023/2/4机械工业出版社Page80创建一维数组通过冒号运算符(:)来创建等差向量

varName=startVal

:step:stopVal通过linspace函数创建等差向量;通过logspace函数创建等比向量;2.3.1数组的创建2023/2/4机械工业出版社Page81创建二维数组二维数组的创建与一维数组类似,也是利用方括号、分号、逗号和空格将元素进行分隔和组合来构成数组。其中,方括号中包含所有元素,不同行元素之间用分号分隔,同一行元素之间用逗号或空格间隔。可以利用冒号和函数来创建二维数组。2.3.1数组的创建2023/2/4机械工业出版社Page82【例2-23】创建一维数组示例。2.3.1数组的创建>>A=[]%创建空数组A=[]>>A=[1357]%创建一维行向量A=1357>>A=[1;3;5;7]%创建一维列向量A=1357>>A=1:2:7A=13572023/2/4机械工业出版社Page83【例2-24】创建二维数组示例。2.3.1数组的创建>>A=[123;456;789]A=123456789>>B=[135;4:2:8;linspace(2,10,3)]B=13546826102023/2/4机械工业出版社Page84给定一个一维数组A,可以用A(n)来访问数组A的第n个元素,若要同时访问数组A的多个元素,可以利用冒号操作符(:),如A(1:3)会返回数组第1至第3个元素。对于二维数组,MATLAB提供了双下标索引和单下标索引两种方式来访问数组元素。2.3.2数组元素的访问2023/2/4机械工业出版社Page85双下标索引用两个数字来定位元素的位置,第一个数字指定元素所在的行,第二个数字指定元素所在的列单下标索引只用一个数字来指定数组元素的位置

2.3.2数组元素的访问2023/2/4机械工业出版社Page86单双下标索引转换函数

ind=sub2ind(size,x,y)[x,y]=ind2sub(size,ind)其中:size:一个1行2列的数组,指定数组的尺寸大小;x、y:双下标索引值;ind:单下标索引值。2.3.2数组元素的访问2023/2/4机械工业出版社Page87【例2-25】二维数组访问示例。2.3.2数组元素的访问>>A=rand(3,4)%随机生成一个3行4列的数组A=0.09710.31710.43870.79520.82350.95020.38160.18690.69480.03440.76550.4898>>A(2,3)

ans=0.3816%访问第2行第3列元素>>A(8)

ans=0.3816%访问下标为8的元素>>ind=sub2ind([3,4],2,3)%双->单下标索引

ind=8>>[x,y]=ind2sub(size(A),8)%单->双下标索引x=2y=32023/2/4机械工业出版社Page88数组的基本操作包括数组的载入与保存、获取数组属性、改变数组结构(伸缩数组)、改变数组形状、数组排序和数组查找等。2.3.3数组操作2023/2/4机械工业出版社Page89数组载入与保存save<filename><var1><var2>…<varN>将工作区中的变量var1、var2…varN保存到filename指定的mat文件中load<filename><var1><var2>…<varN>将存储在filename.mat文件中的var1、var2…varN载入到工作区中。2.3.3数组操作2023/2/4机械工业出版社Page90获取数组排列结构isempty:判断某个数组是否是空数组;isscalar:判断某个数组是否是单元素的标量数组;isvector:判断某个数组是否是一维向量数组issparse:判断某个数组是否是稀疏矩阵。2.3.3数组操作2023/2/4机械工业出版社Page91获取数组大小size:获取数组行列数,返回值是一个1行2列的一维向量;length:获取数组的长度,当数组是一维数组时,返回值为数组中包含元素的个数;若数组是二维数组,返回行数与列数中较大的那一个值;numel:返回数组元素的总个数,对于一个m行n列的二维数组,函数返回值为m×n。2.3.3数组操作2023/2/4机械工业出版社Page92获取数组数据类型isnumeric:判断数组元素是否是数值型;isreal:判断数组元素是否是实数型;isfloat:判断数组元素是否是浮点型;isinteger:判断数组元素是否是以整型;islogical:判断数组元素是否是逻辑型;ischar:判断数组元素是否是字符型;isstruct:判断数组元素是否是结构体型;iscell:判断数组元素是否是单元数组型;iscellstr:判断是否是字符串单元数组型;2.3.3数组操作2023/2/4机械工业出版社Page93改变数组结构利用变量编辑器改变数组结构利用下标索引扩展数组:当超过下标索引取值范围来定位数组元素,并对其赋值,就可以实现数组尺寸的扩张利用cat函数扩展数组:cat

horzcat

vertcat

利用块操作函数扩展数组:repmat

blkdiag

利用[]裁剪数组:对指定位置的元素赋值为空方括号[],即可完成数组元素的删除2.3.3数组操作2023/2/4机械工业出版社Page94【例2-26】数组扩展和裁剪示例。2.3.3数组操作A=0.44560.75470.65510.64630.27600.16260.70940.67970.1190>>A(3,4)=0.9%利用下标索引扩展数组A=0.44560.75470.655100.64630.27600.162600.70940.67970.11900.9000>>A(3,:)=[];A(:,4)=[]

%利用[]裁剪数组A=0.44560.75470.65510.64630.27600.16262023/2/4机械工业出版社Page952.3.3数组操作>>repmat(A,2,2)%利用repmat函数扩展数组ans=0.44560.75470.65510.44560.75470.65510.64630.27600.16260.64630.27600.16260.44560.75470.65510.44560.75470.65510.64630.27600.16260.64630.27600.1626>>B=[13;42];>>blkdiag(A,B)%利用blkdiag函数扩展数组ans=0.44560.75470.6551000.64630.27600.1626000001.00003.00000004.00002.00002023/2/4机械工业出版社Page96改变数组形状——转置转置操作符(’):实现数组的共轭转置;点转置操作符(.’):实现数组的非共轭转置transpose:实现数组的非共轭转置,功能同点转置操作符(.’);ctanspose:实现数组的共轭转置,功能同转置操作符(’)。2.3.3数组操作2023/2/4机械工业出版社Page97改变数组形状——数组翻转fliplr:左右翻转数组;flipud:上下翻转数组;flipdim:按指定方向翻转数组,当方向参数值为1时,等同flipup,当方向参数值为2时,等同fliplr;rot90:将数组逆时针旋转90度的整数倍。2.3.3数组操作2023/2/4机械工业出版社Page98改变数组形状——reshape函数reshape函数的语法形式如下:B=reshape(A,a,b)A:输入数组;a、b:调整之后的行数与列数;B:调整之后的数组。2.3.3数组操作调整前后,数组元素个数不会改变。若A的行列数分别为m和n,调正后的行列数分别为a和b,则有

m*n=a*b2023/2/4机械工业出版社Page99【例2-27】改变数组形状示例。2.3.3数组操作A=0.49840.58530.25510.89090.95970.22380.50600.95930.34040.75130.69910.5472>>B=A'%对数组进行转置操作B=0.49840.95970.34040.58530.22380.75130.25510.50600.69910.89090.95930.54722023/2/4机械工业出版社Page1002.3.3数组操作%对数组A进行左右翻转>>C=fliplr(A)C=0.89090.25510.58530.49840.95930.50600.22380.95970.54720.69910.75130.3404%将数组A的行数变为4,列数变为3>>D=reshape(A,4,3)D=0.49840.22380.69910.95970.75130.89090.34040.25510.95930.58530.50600.54722023/2/4机械工业出版社Page101数组排序sort函数的语法形式如下所示:B=sort(A)B=sort(A,dim)B=sort(...,mode)[B,IX]=sort(A,...)2.3.3数组操作dim=1对每一列排序,dim=2对每一行排序;mode=’ascend’时,升序排序,mode=’descend’时,降序排序;sort(A)实现对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维数组时,对数组的每一列进行排序。

2023/2/4机械工业出版社Page102【例2-28】数组排序示例。2.3.3数组操作A=0.13860.84070.24350.19660.14930.25430.92930.25110.25750.81430.35000.6160>>sort(A)%对数组A按列升序排列ans=0.13860.25430.24350.19660.14930.81430.35000.25110.25750.84070.92930.6160>>sort(A,2,'descend')%对数组A按行降序排列ans=0.84070.24350.19660.13860.92930.25430.25110.14930.81430.61600.35000.25752023/2/4机械工业出版社Page103数组查找find函数的语法形式如下所示:ind=find(X)ind=find(X,k)[row,col]=find(X,...)2.3.3数组操作find(X)返回数组A中非零元素的单下标索引。find(X,k)返回数组A中最多k个非零元素的单下标索引[row,col]=find(X,...)返回数组A的双下标索引。2023/2/4机械工业出版社Page104数组的运算包括标量-数组运算和数组-数组运算。本书的数组运算限定为元素对元素的运算,矩阵运算则是遵循线性代数运算规则的运算,详见2.4.3。2.3.4数组运算2023/2/4机械工业出版社Page105数组-数组运算数组-数组运算要求参与运算的两个数组具有相同的尺寸;一个数组中的元素只与另一个数组中对应位置的元素进行运算;数组-数组运算的乘法、除法和乘方运算为点运算。2.3.4数组运算2023/2/4机械工业出版社Page106标量-数组运算标量与数组的运算,就是将标量作用与数组的每个元素上。常见的运算包括加(+)、减(-)、乘(*)、除(\)和乘方等运算。2.3.4数组运算2023/2/4机械工业出版社Page107【例2-29】标量-数组运算示例。2.3.4数组运算A=816357492>>A-2ans=6-14135270>>A*2ans=162126101481842023/2/4机械工业出版社Page108【例2-30】数组-数组运算示例。2.3.4数组运算A=0.26300.74820.22900.65410.45050.91330.68920.08380.1524B=0.82580.07820.96190.53830.44270.00460.99610.10670.7749>>A–Bans=-0.56280.6700-0.73290.11580.00780.9087-0.3069-0.0229-0.6225>>A.*Bans=0.21720.05850.22030.35210.19940.00420.68660.00890.1181>>A.\Bans=3.14030.10454.20090.82310.98250.00511.44531.27245.0854>>A.^2ans=0.06920.55970.05240.42780.20300.83420.47500.00700.02322023/2/4机械工业出版社Page109多维数组是指维数超过两维的数组,它实际上是二维数组的扩展。对于二维数组,习惯上将第一维称为行,第二维称为列,二维数组就是一个由行和列所确定的“面”,多维数组实际上是在多维空间中对这个“面”的扩展。2.3.5多维数组2023/2/4机械工业出版社Page110创建多维数组通过指定索引将二维数组扩展成多维数组;利用MATLAB内联函数创建多维数组:reshaperepmat

利用cat函数创建多维数组;通过扩展二维数组创建三维数组,一般先创建三维数组每一页上的二维数组,然后将它们赋值给三维数组第三维的指定位置。2.3.5多维数组2023/2/4机械工业出版社Page111【例2-31】扩展二维数组来创建三维数组。2.3.5多维数组A=0.81730.08440.25990.86870.39980.8001>>A(:,:,2)=ones(2,3)%给数组A增加一页A(:,:,1)=0.81730.08440.25990.86870.39980.8001A(:,:,2)=1111112023/2/4机械工业出版社Page112【例2-32】利用MATLAB内联函数创建多维数组示例

。2.3.5多维数组A=0.35100.40180.23990.18390.41730.90270.51320.07600.12330.24000.04970.9448%将数组A变形为一个2行3列2页的三维数组>>B=reshape(A,2,3,2)

B(:,:,1)=0.35100.40180.23990.51320.07600.1233B(:,:,2)=0.18390.41730.90270.24000.04970.94482023/2/4机械工业出版社Page1132.3.5多维数组A=0.35100.40180.23990.18390.41730.90270.51320.07600.12330.24000.04970.9448C=111111%将数组B和C连接成一个新的多维数组D>>D=cat(3,B,C)

D(:,:,1)=0.35100.40180.23990.51320.07600.1233D(:,:,2)=0.18390.41730.90270.24000.04970.9448D(:,:,3)=1111112023/2/4机械工业出版社Page114多维数组访问多维数组也是通过下标索引实现对多维数组元素的访问,包括多下标索引和单下标索引对于n维数组,多下标索引方法通过指定n个下标索引来访问指定位置的元素单下标索引方法则是通过一个下标来定位多维数组的元素多下标索引与单下标索引之间也可以相互转换2.3.5多维数组2023/2/4机械工业出版社Page115多维数组访问MATLAB是按照行-列-页的顺序将多维数组的所有元素线性存储起来;即:先存储第1页第1列第1行的元素,然后存储第1页第1列第2行的元素,存储完第1列后,再存储第2列,完成第1页的存储再存储第2页,直至最后一页最后一个元素。2.3.5多维数组2023/2/4机械工业出版社Page116【例2-33】多维数组访问示例

。2.3.5多维数组A(:,:,1)=0.49090.33770.36920.48930.90010.1112A(:,:,2)=0.78030.24170.09650.38970.40390.1320>>A(1,3,1)

ans=0.3692>>A(5)

ans=0.3692>>A(9)=0.99

%对数组中下标索引为9的元素赋值A(:,:,1)=0.49

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论