第3章单元数组和结构_第1页
第3章单元数组和结构_第2页
第3章单元数组和结构_第3页
第3章单元数组和结构_第4页
第3章单元数组和结构_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

MATLAB7.0从入门到精通哈尔滨工业大学(威海)汽车工程学院2/4/20231课程主要内容第1章MATLAB简介第2章数值运算第3章单元数组和结构第4章字符串第5章符号运算第6章MATLAB绘图基础第7章程序设计第8章计算方法的MATLAB实现第9章优化设计第10章SIMULINK仿真初探2/4/20232第3章单元数组和结构在前面章节已经介绍了几种MATLAB7.0常用的数据类型。本章将介绍两种特殊的数据类型,即单元数组和结构体数组,这两种数据类型的特点是允许用户将不同但是相关的数据类型集成到一个单一的变量。这样,因为相关的数据可以通过一个单元数组或是结构体的数组进行组织和访问,数据的管理就变得相对要容易一些。2/4/202333.1单元数组单元数组就是每一个元素为一个单元的数组。每个单元可以包含任意数据类型的MATLAB7.0数组。例如,单元数组的一个单元可以是一个实数矩阵,或是一个字符串数组,也可以是一个复向量数组。2/4/202343.1.1单元数组的生成直接生成单元数组:用类似矩阵的记号将给复杂的数据结构纳入一个变量之下。和矩阵中的圆括号表示下标类似,单元数组由大括号表示下标。包括左标志法和右标志法。左标志法:左标志法就是把单元标志{}放在左边。右标志法:右标志法就是把单元标志{}放在右边。2/4/20235左标志法>>c{1,1}='abc';>>c{1,2}=eye(2);>>c{2,1}=[12;34];>>c{2,2}=[12];>>cc='abc'[2x2double][2x2double][1x2double]2/4/20236右标志法>>c(1,1)={'abc'};>>c(1,2)={eye(2)};>>c(2,1)={[12;34]};>>c(2,2)={[12]};>>cc='abc'[2x2double][2x2double][1x2double]2/4/20237上面的单元数组也可由下面的方法直接得到:>>c={'abc',eye(2);[12;34],[12]}c='abc'[2x2double][2x2double][1x2double]2/4/20238使用cell函数生成单元数组:cell(n)生成一个n*n阶的置空单元数组;cell(m,n)或cell([m,n])生成一个m*n阶的置空单元数组;cell(m,n,p,…)或cell([m,n,p,…])生成一个m*n*p…阶的置空单元数组;cell(size(a))生成与a同形式的单元型置空矩阵。2/4/20239cell函数生成单元数组>>a=cell(2)a=[][][][]2/4/202310>>a{1,1}=[12;22]a=[2x2double][][][]2/4/202311>>a{1,2}=['MATLAB7.0']a=[2x2double]'MATLAB7.0'[][]2/4/202312>>a{2,1}=['peking']a=[2x2double]'MATLAB7.0''peking'[]2/4/202313>>a{2,2}=[12]a=[2x2double]'MATLAB7.0''peking'[1x2double]2/4/2023143.1.2单元数组显示单元数组的显示有以下几种方式 一是直接在命令窗口中输入单元数组的名字;二是使用函数celldisp(c)来输出。想得到单元数组中某一个单元的值时,可以采用c(m,n)或c{m,n}的格式输出。但是它们得到的结果表示形式是不同的。函数celldisp(c)更适用于具有大量数据的单元数组的显示。c{m,n}和celldisp(c)显示的结果形式相同。celldisp(a,’name’)在窗口中显示的单元型变量的内容的名称为name。2/4/202315程序实例>>c={'abc',eye(2);[12;34],[12]};>>cc='abc'[2x2double][2x2double][1x2double]2/4/202316>>celldisp(c)c{1,1}=abcc{2,1}=1234c{1,2}=1001c{2,2}=122/4/202317>>c={'abc',eye(2);[12;34],[12]};>>c(1,2)ans=[2x2double]>>c{1,2}ans=10012/4/202318>>a={[12],[123];[23],[234]};>>celldisp(a,'hh')hh{1,1}=12hh{2,1}=23hh{1,2}=123hh{2,2}=2342/4/2023193.1.3单元数组绘图h=cellplot(c)返回一个向量,这个向量综合体现了表面、线和句柄。h=cellplot(c,’legend’)返回一个向量,这个向量综合体现了表面、线和句柄,并有图形注释。2/4/202320程序实例>>a={[12;22],'MATLAB7.0';'peking',[12]};>>h=cellplot(a)h=152.0029153.0024154.0024155.0024156.0024157.0024158.00242/4/2023212/4/202322程序实例>>a={[12;22],'MATLAB7.0';'peking',[12]};>>h=cellplot(a,'legend')h=152.0035153.0026154.0026155.0026156.0026157.0026158.00262/4/2023232/4/2023243.1.4单元数组合并与变形使用c=[a,b]或c=[a;b]将两个单元数组集成一个更大的数组。使用c(n,:)=[]删除单元数组的第n行。reshape(x,m,n)和reshape(x,[m,n])将单元数组x的所有元素分配到一个m*n的单元数组,但单元数组元素不是m*n时,返回错误信息。行列数不相等的话,仍是按列优先的原则。2/4/202325单元数组合并实例>>a={[12],'as'};>>b={[25],'AD'};>>c=[a,b]c=[1x2double]'as'[1x2double]'AD'>>d=[a;b]d=[1x2double]'as'[1x2double]'AD'2/4/202326单元数组删除实例>>d={[12],'as';[25],'AD'};>>d(1,:)=[]d=[1x2double]'AD'2/4/202327单元数组变形实例>>d={[12],'as';[25],'AD'};>>c=reshape(d,1,4)c=[1x2double][1x2double]'as''AD'2/4/2023283.2结构型变量结构体是根据属性名组织起来的不同类型数据的集合。结构体和单元数组的共同之处在于它们都提供了一种分级存储机制来存储不同类型的数据,不同之处是组织数据的方式不一样。结构体数组里的数据是通过属性名来引用的,而在单元数组里,数据是通过单元数组下标引用来操作的。2/4/2023293.2.1结构型变量的生成直接输入法:采用直接输入法时,在给结构体成员元素直接赋值的同时定义该元素的名称,并使用点儿将结构型变量和成员元素名连接。2/4/202330程序实例>>student.test=[995696876769877692];>>='HuangLiang';>>student.weight=67;>>student.height=1.68;>>student.num=034093;>>student.add='Schoolofcivilengneering.Tsinghuauniversity';>>student.tel=;2/4/202331结构体显示输入结构体名称student实现结构体显示:>>studentstudent=test:[995696876769877692]name:'HuangLiang'weight:67height:1.6800num:34093add:'Schoolofcivilengneering.Tsinghuauniversity'tel:2/4/202332增加结构体变量可以通过以下形式语句添加新的结构变量(另外的学生数据)。>>student(2).test=[996588787698759659];>>%系统将默认之前的student为student(1)>>student(2).name='WeiHuan';>>student(2).weight=50;>>student(2).height=1.58;>>student(2).num=034999;>>student(2).add='SchoolofPsychology.Chongqinguniversity';>>student(2).tel='02361701456';2/4/202333此时,输入student将只得到该结构的成员变量名而不显示内容>>studentstudent=1x2structarraywithfields:testnameweightheightnumaddtel2/4/202334可以继续在窗口中输入student(1)或student(2)来查询其具体内容。>>student(2)ans=test:[996588787698759659]name:'WeiHuan'weight:50height:1.5800num:34999add:'SchoolofPsychology.Chongqinguniversity'tel:'02361701456'2/4/202335使用struct函数生成结构变量Struct_array=struct(‘field’,v1,’field2’,v2,…),其中,field为各成员变量名,v1等为对应的各成员变量的内容,但是必须配对出现。2/4/202336程序实例>>student=struct('test',[996588787698759659],'name','WeiHuan','weight',50,'height',1.5800)student=test:[996588787698759659]name:'WeiHuan'weight:50height:1.58002/4/202337失败的生成实例student=struct('test',[996588787698759659],'name','WeiHuan','weight',50,'height')???Errorusing==>structFieldandvalueinputargumentsmustcomeinpairs.2/4/202338添加结构体变量>>student=struct('fen',86,'gao',176)student=fen:86gao:176>>student(2)=struct('fen',90,'gao',170)student=1x2structarraywithfields:fengao2/4/2023393.2.2结构体变量的操作在结构体变量中添加成员变量>>student(1).gender='Male';>>student(1).age=25;>>student(2).gender='Female';>>student(2).age=21;2/4/202340在结构体变量中删除成员变量s=rmfield(s,’field’)从m*n阶的结构体变量s中删除指定的成员变量field。但该函数仍保留原有结构形式。s=rmfield(s,fields)当fields是单元型变量时,将一次性删除多个成员变量。2/4/202341程序实例>>s=rmfield(student,'name')s=test:[995696876769877692]weight:67height:1.6800num:34093add:'Schoolofcivilengneering.Tsinghuauniversity'tel:2/4/202342>>s=rmfield(student,{'weight','test'})s=name:'HuangLiang'height:1.6800num:34093add:'Schoolofcivilengneering.Tsinghuauniversity'tel:2/4/202343在结构体变量中调用成员变量结构变量中的任何信息,可以通过“结构体名称+成员变量名”的格式进行取出。例如:student(1).test从结构体变量中获取某个成员变量时,可以直接输入变量名+成员名称,也可以采用循环语句的方式。例如:student.test2/4/202344程序实例>>ans=HuangLiangans=WeiHuan>>fori=1:length(student)disp(student(i).name);endHuangLiangWeiHuan2/4/202345函数法取值和赋值getfield函数取得当前存储在某个成员变量中的值。表达式f=getfield(s,’field’)返回指定成员变量的内容,与表达式f=s.field等价。setfield函数给某个成员变量插入新的值。表达式s=setfield(s,‘field’,v)将成员变量field的值设置为v与表达式s.field=v等价。2/4/202346程序实例>>c=getfield(student,'name')c=WeiHuan>>c=setfield(student,'name','Tom')c=test:[996588787698759659]name:'Tom'weight:

温馨提示

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

评论

0/150

提交评论