《机电系统与仿真技术》课件8MatLab程序设计及M文件_第1页
《机电系统与仿真技术》课件8MatLab程序设计及M文件_第2页
《机电系统与仿真技术》课件8MatLab程序设计及M文件_第3页
《机电系统与仿真技术》课件8MatLab程序设计及M文件_第4页
《机电系统与仿真技术》课件8MatLab程序设计及M文件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

回顾:基础知识5/14/2023矩阵生成基本运算矩阵运算多项式解方程绘图命令还记得哪些常用命令?表1-3字符串符号和曲线线型、色彩及坐标点型状对照表曲线线型曲线色彩坐标点型状线型符号含义色彩符号含义点型状符号含义-实线b蓝色.点--虚线c青色o圆:点线g绿色*星号-.点划线k黑色+加号x叉号m深红色s方块r红色d菱形y黄色p五角星w白色h六角星5/14/2023

表1-4常用图形标识命令及其含义图形标识命令含义title给出全图标注的标题xlabel对x轴标注名称ylabel对y轴标注名称text通过程序在图形的指定位置放入文本字符串gtext单击鼠标指定位置放入文本字符串legend在图形中添加注解grid打开或关闭栅格axis坐标轴调整hold图形保持zoom图形缩放5/14/2023

其他绘图指令特殊图形绘制命令函数命令功能函数命令功能area填充区域图hist绘制累计图bar绘制直方图stairs绘制阶梯图compass绘制复数矢量图stem绘制针状图comet绘制慧星曲线图pie绘制饼图feather绘制羽毛图quiver绘制向量场图fill填充颜色rose绘制极坐标累计图5/14/2023

三维绘图指令常用三维绘图函数命令函数命令功能函数命令功能Plot3绘制三维曲线Bar3绘制三维直方图mesh绘制三维网线Pie3绘制三维饼图surf绘制三维曲面Stem3绘制三维离散针状图Colormap(RGB)绘制三维图形装饰pie绘制饼图view图形视觉角度Contour3绘制三维等高线图cylinder绘制柱面图meshc绘制三维含等高线网线图5/14/2023

第2讲Matlab程序设计及仿真目标与要求:学生了解M文件和函数的基本概念,掌握程序设计的基本原则,能够对Matlab的M文件进行流程控制,能够进行面向对象的编程,并且对M文件能够调试与剖析。教学内容:1M文件;2函数;3Matlab程序设计基本原则;4流程控制;5文件调试与剖析。5/14/2023

1.M文件——脚本文件概述MATLAB语言的程序可以有两种方式来执行,即命令行方式和m文件方式。由于MATLAB语言的文件,以“.m”作扩展名,因此均称为m文件。M文件可分为函数程序和脚本程序两种:函数程序可以接受输入参数,并可以产生输出;脚本程序是MatLab表达式的集合,不可以接受参数。

脚本文件是一种简单的M文件,它没有输入参数;可以是一系列在命令行中执行命令的集合,也可以是操作工作空间中的变量和程序中新建的变量。脚本程序在工作空间创建的变量,在程序运行结束后仍然可以使用。M脚本文件既不需要预先定义,也不需要接受输入变量,而是直接输入变量名,脚本程序就会按顺序执行命令。5/14/2023

1.M文件——脚本文件编写脚本文件编写步骤:第一步单击MatLab指令窗口工具条上的NewFile图标或者【file】菜单下new子菜单中的M-file,如下图所示。打开如图2-2所示的MatLab文件编辑调试器MatlabEditor/Debugger。其窗口名默认为Untitled,用户可在空白窗口中编写程序。5/14/2023

1.M文件——脚本文件编写针对所给分段函数,输入如下一段程序:a=2;b=2;clf;%clf函数用于清除当前图像窗口x=-a:0.2:a;y=-b:0.2:b;fori=1:length(y)forj=1:length(x)ifx(j)+y(j)>1z(i,j)=0.85*exp(-0.5*y(i)^2-3.75*x(j)^2-1.5*x(i));elseifx(j)+y(j)<-1z(i,j)=0.546*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(i));elsez(i,j)=0.97*exp(-y(i)^2-6*x(j)^2);endendendaxis([-a,a,-b,b,min(min(z)),max(max(z))]);surf(x,y,z);title('编写脚文文件示例');5/14/2023

1.M文件——脚本文件运行第二步单击编辑调试器中的保存图标,或者通过【file】菜单下的Saveas将文件另存他处,键入文件名(如example21),单击【保存】键,就完成了文件保存。第一步将保存example21.m文件所在目录成为当前目录,或者让目录处在MatLab的搜索路径上。第二步在命令窗口,输入example21,运行结果如下图所示。运行脚本文件:5/14/2023

1.M文件与M函数——脚本文件结论1)在M-file窗口中编写脚本文件,并且每行必须以分号“;”结束;2)将已编写完成的M-file保存在某一文件夹中,并且使Matlab的搜索路径指向该M-file所在的文件夹;3)给M-file命名,文件不能使用汉语命名,必以字母或下划线开始的文件名;4)文件名需要能够反映出该M-file的功能和作用,并且容易记忆;5)运行M-file时,只需在命令窗口中输入M-file的文件名即可。通过上述例子可得如下结论:5/14/2023

1.M文件与M函数——脚本文件举例【举例】执行文件的建立与执行。显示建立的执行文件第一步在脚本文件编辑器中输入左边程序,并存储命名为exam02.m。5/14/2023

1.M文件与M函数——脚本文件举例第二步在Matlab平台上识别和执行文件exam02.m,在命令窗口中输入examo2.m。输入命令显示输出图线显示5/14/2023

1.M文件与M函数——M函数定义不同于独立m文件,m函数形式的m文件书写格式为:函数名定义

function[A1,A2…]=myfuction(a1,a2,…)%注释行主程序体

例如:function[y,y1,y2]=exam03(x)M函数的定义5/14/2023

1.M文件与M函数——M函数格式说明(1)第一行为m函数格式行。function为m函数的保留字,myfunction为m函数名称,(a1,a2,…)为外部传递参数组,[A1,A2…]为返回参数组。(2)首字符为“%”的各行是注释行。紧接格式行的各注释行可以响应help命令在MATLAB平台上印出,加空行后的注释行不响应help命令,注释行可以在m函数描述行的任意位置均可。(3)主程序体各行,是m函数的各执行行。

5/14/2023

1.M文件与M函数——M函数的调用M函数调用格式如下:输出变量=函数名(输入变量)示列如下:>>x=5;Ra=circle(x)(函数调用)5/14/2023

1.M文件与M函数——M函数调用的注意点注意以下几点:1)M函数名要与M函数存储的文件名相同;2)当一个M函数内含有多个函数时,函数内第一个function为主函数,其它函数是主函数局部调用函数,文件名以主函数名命名;3)注释语句前需以“%”开始,若需要多行注释语句,每行都以“%”开始;4)M函数内除了注释说明语句行,最上面的第一行语句必须以function开始;5)程序语句包括调用函数、注程控制语句和赋值语句等;6)M函数调用时,调用函数的输入/输出变量可以与定义函数的输入/输出变量不同。5/14/2023

1.M文件与M函数——M函数程序函数程序可以接受输入参数,并可以返回输出参数。同时也可操作函数工作空间的变量。例如:通过M函数文件画圆functionRa=circle(r,s)%r指定半径的数值%s指定线色的字符串%sa指圆面积%circle(r)利用蓝实线画半径为r的圆周线%circle(r,s)利用s字符串指定的线色画半径为r的圆周线%sa=circle(r)计算圆面积,并画半径为r的蓝色圆面%sa=circle(r,s)计算圆面积,并画半径为r的s色圆面clf;t=0:pi/200:2*pi;x=r*exp(i*t);Ra=pi*r*r;fill(real(x),imag(x),s)axis('square')title('M函数程序——画圆示例')5/14/2023

1.M文件与M函数——全局变量和局部变量

M函数运行时,所有变量都被加载于函数工作空间,而且对于多个函数运行时,这些函数的工作空间是相互独立的,其变量也不会加载于MatLab的工作空间,当函数运行结束后,所有的变量自动消失,这些变量称为局部变量。不过用户有时需要使用全局变量,便于函数之间的变量共用,此时需要使用Matlab里面的global命令对变量进行全局变量定义。局部变量:具有函数内部作用范围全局变量:可在几个函数和基本工作空间之间共享,具有全局作用范围全局变量的声明:global变量名1变量名2…

变量名间用空格分离。全局变量在使用前必须在MATLAB工作空间中申明,而在某个具体的MATLAB函数中如果想用到该全局变量时,也必须在函数中申明。由于全局变量损害函数的封闭性,因此不提倡使用全局变量。5/14/2023

1.M文件与M函数——M函数程序第二步运行以下命令,结果如下图所示。>>Ra=circle(3,'r')Ra=28.2743。5/14/2023

2.函数——函数定义把相关语句组合在一起,并给它们注明相应的名称,利用这种方法把程序分块,这种形式的组合就称为函数。函数通常也称为例程或过程。函数的使用通常是通过函数调用来实现的。对于用户自定义的函数也可以有子函数。这些子函数只能被与M文件同名的主函数或者在M文件的其他函数所调用。5/14/2023

2.函数——子函数一个M文件只能有一个主函数。文件main.m中有一个函数结构及其子函数,示例如下:Functionf=main(x)%主函数……%程序语句Y1=funexample1(x)%调用第一个子函数……%程序语句f=funexample2(x)%调用第二个子函数……%程序语句Functionf=funexample1(x)%定义第一个子函数……%程序语句Functionf=funexample2(x)%定义第二个子函数……%程序语句[b,d]=funexample3(x1,x2)%子函数中另外再调用第三个子函数(函数嵌套)……%程序语句Function[b,d]=funexample3(x1,x2)%定义第三个子函数……%程序语句5/14/2023

2.函数——私有函数私有函数是放入一个叫private子目录中的M文件,私有函数只能private直接上层目录中的函数调用。当Matlab调用M文件中的函数时,首先查找子函数,再查找私有函数,最后再在Matlab的搜索路径中查找函数。这就意味着用户可以创建与Matlab函数同名的私有函数,并将其放入private子目录中,这样程序就能对它们进行调用。同时其他路径下的程序能调用和私有函数同名的M文件,但此时执行的是Matlab的函数。5/14/2023

3.M文件程序设计的基本原则为了便于广大读者熟练地使用MatLab软件进行程序设计,并且形成良好的编程习惯,在此将程序设计的基本原则简述如下:1)Matlab程序的基本组成。(1)%表示命令行注释;(2)采用clear、close命令清除工作空间变量;(3)定义变量,设置初始值;(4)编写运算指令、调用函数或调用子程序;(5)使用流程控制语句;(6)直接在指令窗口中显示运算结果或者通过绘图命令显示运算结果。2)一般情况下,主程序开头习惯使用clear命令清除工作空间变量,然而子程序开头不要使用clear。3)程序命名尽量清晰(从程序名就可知道该程序的功能),便于日后维护。初始值尽量放在程序的前面,便于更改和查看。4)如果初始值较长或者较常用,可以通过编写子程序将所有的初始值进行存储,以便调用。5)对于较大的程序设计,尽量将程序分解成每个具有独立功能的子程序,然后采用主程序调用子程序的方法进行编程。5/14/2023

4.流程控制与面向对象编程——顺序结构Matlab程序语句结构:顺序、条件、循环、试探顺序结构是最简单的程序结构,用户在编写好程序之后,系统将按照程序的物理位置顺次执行。顺序结构就是依照顺序执行程序的各条语句。语句在程序文件中的位置反映了程序的执行顺序。示例:求正弦函数的图像。

x=-2*pi:pi/20:2*pi;

y=sin(x);

plot(x,y);

title('Plotofsin(x)vsx');1)顺序结构定义格式5/14/2023

4.流程控制与面向对象编程——条件结构12)if-else-end结构定义格式if—else—end语句有3种形式if表达式执行语句

endif表达式———

是语句1else————

否语句2endif表达式1

语句1elseif表达式2

语句2elseif表达式3

语句3···

else

语句nend第3种结构实现了一种多路选择,比较复杂。可替代一般高级语言中的switch-case-end语句。5/14/2023

4.流程控制与面向对象编程——条件结构举例1

c=input('请输入一个字符','s');ifc>='A'&c<='Z'disp(setstr(abs(c)+1));elseifc>='a'&c<='z'disp(setstr(abs(c)-1));elseifc>='0'&c<='9'disp(abs(c)-abs('0'));elsedisp(c);end

举例:输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为数字字符则输出其对应的数值,若为其他字符则原样输出。5/14/2023

4.流程控制与面向对象编程——条件结构23)Switch-case-end结构定义格式switch开关表达式case表达式1

语句段1

case表达式2

语句段2...otherwise

语句段n

end

说明:1)将开关表达式依次与case后面的表达式进行比较,如果表达式1不满足,则与下一个表达式2比较,如果都不满足则执行otherwise后面的语句段n;一旦开关表达式与某个表达式相等,则执行其后面的语句段。2)开关表达式只能是标量或字符串。3)case后面的表达式可以是标量、字符串或单元数组,如果是单元数组则将开关表达式与单元数组的所有元素进行比较,只要某个元素与开关表达式相等,就执行其后的语句段。5/14/2023

4.流程控制与面向对象编程——条件结构举例2method='Bilinear';switchlower(method)%将字符串转换为小写case{'linear','bilinear'}disp('Methodislinear')%显示case'cubic'disp('Methodiscubic')case'nearest'disp('Methodisnearest')otherwisedisp('Unknownmethod.')end5/14/2023

4.流程控制与面向对象编程——循环结构14)For-end循环结构首先计算三个表达式的值,再将表达式1的值赋给循环变量,如果此时循环变量的值介于表达式1和表达式3的值之间,则执行循环体语句,否则结束循环的执行。执行完一次循环之后,循环变量自增一个表达式2的值,

然后再判断循环变量的值是否介于表达式1和表达式3之间,如果满足仍然执行循环体,直至不满足为止。这时将结束for语句的执行,而继续执行for语句后面的语句。for循环变量=初始值first(也可是表达式1):步长incr(表达式2):终值last(表达式3)执行语句块end5/14/2023

4.流程控制与面向对象编程——循环结构1举例举例:求定积分程序如下:

a=0;b=2*pi;n=1000;h=(b-a)/n;x=a:h:b;f=exp(-0.5*x).*sin(x+pi/6);fori=1:ns(i)=(f(i)+f(i+1))*h/2;ends=sum(s)

事实上,MATLAB提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值积分。5/14/2023

4.流程控制与面向对象编程——循环结构25)While-end循环结构while语句的一般格式为:

while(条件)

循环体语句块

end其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。5/14/2023

4.流程控制与面向对象编程——循环结构2举例举例:用while循环求1~100间整数的和。sum=0;i=1;whilei<=100sum=sum+i;i=i+1;endsum=5050

5/14/2023

4.流程控制与面向对象编程——试探结构6)试探结构定义语句格式为:try

语句组1catch

语句组2end说明:try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息保留,并转去执行语句组2。这种试探性执行语句是其他高级语言所没有的。5/14/2023

4.流程控制与面向对象编程——试探结构举例:矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endC=716274055725/14/2023

5.文件调试与剖析——文件调试概述一般来说,应用程序的错误有两类:一类是语法错误,语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。另一类是运行时的错误。指程序的运行结果有错误,这类错误也称为程序逻辑错误。在包含函数调用的MATLAB程序运行时,当发生运行错误时,不会显示出错信息,而在执行结束或出错时,我们只能看到基本工作空间(即主程序执行空间)中的变量,各个函数工作空间已关闭,因此无法检测各个局部变量。为此,应采用调试技术来查找问题。5/14/2023

5.文件调试与剖析

温馨提示

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

评论

0/150

提交评论