《MATLAB 实用教程:第5章MATLAB程序设计》由会员分享,可在线阅读,更多相关《MATLAB 实用教程:第5章MATLAB程序设计(31页珍藏版)》请在人人文库网上搜索。

1、第5章 MATLAB程序设计5.1脚本文件和函数文件M文件有两种形式:M脚本文件和M函数文件。5.1.1 M文本编辑器MATLAB的M文件是通过M文件编辑调试器窗口(EditorDebugger)来创建的。图5.1 M文件编辑/调试器窗口单击MATLAB桌面上的图标,或者单击菜单“File”“New”“M-file”,可打开空白的M文件编辑器,也可以通过打开已有的M文件来打开M文件编辑器。如图5.1所示为打开已创建的M文件。5.1.2 M文件的基本格式下面介绍绘制二阶系统时域曲线的M文件,欠阻尼系统的时域输出y与x的关系为,【例5.1】为M脚本文件,【例5.2】为M函数文件。【例5.1】用M脚。

2、本文件绘制二阶系统时域曲线。%EX0501 二阶系统时域曲线%画阻尼系数为0.3的曲线x=0:0.1:20;y1=1-1/sqrt(1-0.32)*exp(-0.3*x).*sin(sqrt(1-0.32)*x+acos(0.3)plot(x,y1,r) 【例5.2】创建一个画二阶系统时域曲线的函数,阻尼系数zeta为函数的输入参数。function y=Ex0502(zeta)% EX0502 Step response of quadratic system.% 二阶系统时域响应曲线% zeta 阻尼系数% y 时域响应% copyright 2003-08-01x=0:0.1:20;y=。

3、1-1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta)plot(x,y)M函数文件的基本格式:函数声明行H1行(用%开头的注释行)在线帮助文本(用%开头)编写和修改记录(用%开头)函数体 例如,在命令窗口输入help和lookfor命令查看帮助信息:help Ex0502EX0502 Step response of quadratic system.二阶系统时域响应曲线zeta 阻尼系数y 时域响应lookfor 二阶系统时域响应Ex0502.m: %二阶系统时域响应5.1.3 M脚本文件脚本文件的特点:(1) 脚本文件中。

4、的命令格式和前后位置,与在命令窗口中输入的没有任何区别。(2) MATLAB在运行脚本文件时,只是简单地按顺序从文件中读取一条条命令,送到MATLAB命令窗口中去执行。(3) 与在命令窗口中直接运行命令一样,脚本文件运行产生的变量都是驻留在MATLAB的工作空间(workspace)中,可以很方便地查看变量,除非用clear命令清除;脚本文件的命令也可以访问工作空间的所有数据,因此要注意避免变量的覆盖而造成程序出错。【例5.1续】在M文件编辑调试器窗口中编写M脚本文件绘制二阶系统的多条时域曲线。(1) 单击MATLAB桌面上的图标打开M文件编辑器。(2) 将命令全部写入M文件编辑器中,为了能标。

5、志该文件的名称,在第一行写入包含文件名的注释。保存文件为Ex0501.m。%EX0501 二阶系统时域曲线x=0:0.1:20;y1=1-1/sqrt(1-0.32)*exp(-0.3*x).*sin(sqrt(1-0.32)*x+acos(0.3)plot(x,y1,r) %画阻尼系数为0.3的曲线hold ony2=1-1/sqrt(1-0.7072)*exp(-0.707*x).*sin(sqrt(1-0.7072)*x+acos(0.707)plot(x,y2,g) %画阻尼系数为0.707的曲线y3=1-exp(-x).*(1+x)plot(x,y3,b) %画阻尼系数为1的曲线图5。

6、.2 运行界面(3) 选择M文件编辑器菜单“Debug”“Run”,就可以在图形窗中看到如图5.2所示的曲线。查看工作空间的变量:whos Name Size Bytes Classx 1x201 1608 double arrayy1 1x201 1608 double arrayy2 1x201 1608 double arrayy3 1x201 1608 double arrayGrand total is 804 elements using 6432 bytes 5.1.4 M函数文件函数文件的特点:(1) 第一行总是以“function”引导的函数声明行;函数声明行的格式: fun。

7、ction 输出变量列表 = 函数名(输入变量列表)(2) 函数文件在运行过程中产生的变量都存放在函数本身的工作空间;(3) 当文件执行完最后一条命令或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间的变量就被清除;(4) 函数的工作空间随具体的M函数文件调用而产生,随调用结束而删除,是独立的、临时的,在MATLAB运行过程中可以产生任意多个临时的函数空间。【例5.2续】在M文件编辑调试器窗口编写计算二阶系统时域响应的M函数文件,并在MATLAB命令窗口中调用该文件。创建M函数文件并调用的步骤如下:(1) 编写函数代码function y=Ex0502(zeta)%EX050。

8、2画二阶系统时域曲线x=0:0.1:20;y=1-1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta)plot(x,y)(2) 将函数文件保存为“Ex0502.m”。(3) 在MATLAB命令窗口输入以下命令,则会出现f的计算值和绘制的曲线:f=Ex0502(0.3)程序分析:第一行指定该文件是函数文件,文件名为“Ex0502”,输入参数为阻尼系数zeta,输出参数为时域响应y。当函数文件调用结束,查看x、y:x? Undefined function or variable x.y? Undefined function o。

9、r variable y.注意:M脚本文件和M函数文件的文件名及函数名的命名规则与MATLAB变量的命名规则相同。5.2程序流程控制5.2.1 for . end循环结构语法: for 循环变量=array循环体end 说明:循环体被循环执行,执行的次数就是array的列数,array可以是向量也可以是矩阵,循环变量依次取array的各列,每取一次循环体执行一次。【例5.3】使用for . end循环的array向量编程求出 1+3+5.+100 的值。% EX0503 使用向量for循环sum=0;for n=1:2:100sum=sum+n;endsum sum =2500 计算的结果为:。

10、sum =2500。程序说明:循环变量为n,n对应为向量1:2:100,循环次数为向量的列数,每次循环n取一个元素。【例5.4】使用for . end循环的array矩阵编程将单位阵转换为列向量。% EX0504 使用矩阵for循环sum=zeros(6,1);for n=eye(6,6)sum=sum+n;endsum sum =111111 程序分析:循环变量n对应为矩阵eye(6,6)的每一列,即第一次n为1;0;0;0;0;0,第一次n为0;1;0;0;0;0;循环次数为矩阵的列数6。5.2.2 while . end循环结构语法: while 表达式循环体end 说明:只要表达式为逻。

11、辑真,就执行循环体;一旦表达式为假,就结束循环。表达式可以是向量也可以是矩阵,如果表达式为矩阵则当所有的元素都为真才执行循环体,如果表达式为nan,MATLAB认为是假,不执行循环体。【例5.5】与【例5.3】相同,计算1+3+5.+100 的值。% EX0505 使用while循环sum=0;n=1;while n0)&(zeta *Inner matrix dimensions must agree. 程序分析:试探出矩阵的大小不匹配时,矩阵无法相乘,则再执行catch后面的语句段,将a的子矩阵取出与b矩阵相乘。可以通过这种结构灵活地实现矩阵的乘法运算。5.2.6流程控制语句1. brea。

12、k命令break命令可以使包含break的最内层的for或while语句强制终止,立即跳出该结构,执行end后面的命令,break命令一般和If结构结合使用。【例5.9】将【例5.5】增加条件用If与break命令结合,停止while循环。计算1+3+5.+100 的值,当和大于1000时终止计算。% EX0509 用break终止while循环sum=0;n=1;while n ex0514Too many input arguments.也可以在工作空间查看函数体定义的输入参数个数:nargin(Ex0514)ans =2【例5.14续】添加以下程序,查看用nargout变量获取输出参数个。

13、数。if nargout=0%当输出参数个数为0时,运算结果为0sum=0;end在命令窗口调用Ex0514函数,当输出参数格式不同时,结果如下:Ex0514(2,3) %当输出参数个数为0时 ans =0 y=Ex0514(2,3) %当输出参数个数为1时 y =5 y,n,x=Ex0514%当输出参数个数为太多时 ? Error using = ex0514Too many output arguments. 程序分析:当输出参数个数为0时,即使有两个输入参数,运算结果也为0,结果送给ans变量;当输出的参数个数太多,也会出错。(2) varargin和varargout变量varargi。

14、n和varargout可以获得输入输出变量的各元素内容。【例5.15】计算所有输入变量的和。function y,n=Ex0515(varargin)% EX0515 使用可变参数vararginif nargin=0%当没有输入变量时输出0disp(No Input variables.)y=0;elseif nargin=1 %当一个输入变量时,输出该数y=varargin1;else n=nargin;y=0;for m=1:ny=vararginm+y;%当有多个输入变量时,取输入变量循环相加endendn=nargin; 在MATLAB的命令窗口中输入不同个数的变量调用函数Ex051。

15、5,结果如下:y,n=Ex0515(1,2,3,4)%输入4个参数 y =10n =4 y,n=Ex0515(1) %输入1个参数 y =1n =1 y,n=Ex0515%无输入参数 No Input variables.y =0n =0 程序分析:n为输入参数的个数;y为求和运算的结果。5.3.4程序举例【例5.16】根据阻尼系数绘制不同二阶系统的时域响应,当欠阻尼时,当临界阻尼时,当过阻尼时。M文件的程序代码如下:function y=Ex0516(z1)% EX0516 主函数调用子函数,根据阻尼系数绘制二阶系统时域曲线t=0:0.1:20;if (z1=0)&(z1=0)&(z11)y。

16、=feval(h_plotxy1,z1,t); %执行函数elseif z1=1y=feval(h_plotxy2,z1,t); %执行函数elsey=feval(h_plotxy3,z1,t); %执行函数endfunction y1=plotxy1(zeta,x)%画欠阻尼二阶系统时域曲线y1=1-1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta);plot(x,y1)function y2=plotxy2(zeta,x)%画临界阻尼二阶系统时域曲线y2=1-exp(-x).*(1+x);plot(x,y2)functi。

17、on y3=plotxy3(zeta,x)%画过阻尼二阶系统时域曲线y3=1-1/(2*sqrt(zeta2-1)*(exp(-(zeta-sqrt(zeta2-1)*x)./(zeta-sqrt(zeta2-1).-exp(-(zeta+sqrt(zeta2-1)*x)./(zeta+sqrt(zeta2-1);plot(x,y3)程序分析:在主函数中使用函数句柄执行各子函数,运行的结果与【例5.17】相同。在MATLAB的命令窗口调用该Ex0521函数有三种格式:(1) 用feval命令利用函数句柄执行h_Ex0521=str2func(Ex0521) h_Ex0521 = Ex0521 。

18、y=feval(h_Ex0521,1); h_plotxy1 = plotxy1h_plotxy2 = plotxy2h_plotxy3 = plotxy3(2) 用feval命令利用函数名执行y=feval(Ex0521,1); (3) 直接调用函数y=Ex0521(1);5.7利用泛函命令进行数值分析在MATLAB中,所有以函数为输入变量的命令,都称为泛函命令。常见语法:输出变量列表=函数名(h_fun,输入变量列表)输出变量列表=函数名(funname,输入变量列表)说明:h_fun是要被执行的M函数文件的句柄,或者是内联函数和字符串;funname是M函数文件名。5.7.1求极小值1.。

19、 fminbnd函数fminbnd函数用来计算单变量非线性函数的最小值。语法:x,y=fminbnd(h_fun,x1,x2,options)x,y=fminbnd(funname,x1,x2,options)说明:h_fun是函数句柄,funname是函数名,必须是单值非线性函数;options是用来控制算法的参数向量,默认值为0可省略;x是fun函数在区间x1xx2上的局部最小值的发生点;y是对应的最小值。【例5.22】用fminbnd求解humps函数的极小值。x,y=fminbnd(humps,0.5,0.8) %求在0.50.8之间极小值 x =0.6370y =11.2528 程序。

20、分析:humps函数是MATLAB提供的M文件,保存为humps.m文件,humps 表示humps函数的句柄,humps的曲线如图5.7所示,最小值为图中的圆点(0.6370,11.2528),误差小于10-4。图5.7 求humps函数最小值2. fminsearch函数fminsearch函数是求多变量无束缚非线性最小值。语法:x=fminsearch(h_fun,x0)x=fminsearch(funname,x0)说明:x0是最小值点的初始猜测值。【例5.23】求著名的Banana测试函数f(x,y)=100(y-x2)2+(1-x)2的最小值,它的理论最小值是x=1,y=1。该测试函数有一片浅谷,很多算法都难以逾越。fn=inline(100*(x(2)-x(1)2)2+(1-x(1)2 ,x) %用inline产生内联函数,x和y用二元数组表示 fn =Inline function:fn(x) = 100*(x(2)-x(1)2)2+(1-x(1)2 y=fminsearch(fn,0.5,-1) %从(0.5,-1)为初始值开始搜索求最小值 y =1。

matlab欠阻尼系统注释,MATLAB 实用教程:第5章MATLAB程序设计相关推荐

  1. 大一计算机基础实用教程答案第二章,计算机基础实用教程(课件)第2章.ppt

    <计算机基础实用教程(课件)第2章.ppt>由会员分享,可在线阅读,更多相关<计算机基础实用教程(课件)第2章.ppt(23页珍藏版)>请在人人文库网上搜索. 1.计算机基础与 ...

  2. matlab 控制硬件,自动控制原理实验教程(硬件模拟与MATLAB仿真)

    前言 第1章 MATLAB7.1与Simulink6.1入门基础 1.1 自动控制原理与系统仿真简述 1.1.1 自动控制原理模拟实验系统 1.1.2 控制系统仿真 1.2 控制系统MATLAB7.1 ...

  3. JSP实用教程-第三章Tag文件与Tag标记

    目录 3.1 Tag文件 3.1.1Tag文件的结构 3.1.2Tag文件的保存 3.2 Tag标记 3.2.1 Tag文件和Tag标记 3.2.2 Tag标记的使用 3.2.3 Tag标记的运行原理 ...

  4. matlab 判断两个矩阵有元素相等_Matlab入门教程 第 1 章 Matlab基础知识之基本运算...

    1.6 Matlab 基本运算 Matlab 包含三种运算:算术运算.关系运算和逻辑运算. 1.6.1 算术运算 ① 基本算术运算 基本算术运算符:+.-.*./(右除).\(左除).^(乘方) ? ...

  5. matlab patch 六面体,《有限元基础教程》_【MATLAB算例】4.8.2(1) 基于8节点六面体单元的空间块体分析(Hexahedral3D8Node)...

    [MATLAB 算例]4.8.2(1) 基于8节点六面体单元的空间块体分析(Hexahedral3D8Node) 如图4-23所示的一个空间块体,在右端部受两个集中力F 作用,其中的参数为: 1051 ...

  6. 安装Windows、Ubuntu双系统超简单实用教程

    目录 一.版本选择 二.安装步骤 1.查看电脑配置 2.制作系统盘 3.在windows下创建空白分区 4.安装系统 Hey, guys!相信很多小伙伴在安装Windows.Ubuntu双系统过程中遇 ...

  7. MATLAB | Matlab 2020a/202b/2018a/2019b安装教程及资源及matlab基本案例(图像练手教程)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 后文有matlab2020a与20 ...

  8. 网站制作---科讯万能搜索系统的简单实用教程

    很多科汛fans已对系统自带的的简单搜索感谢不满足了,比如做人才网的用户希望能根据职位类型,工作地点,关键字等进行精确搜索,这时如果用KesionCMS自带搜索标签显然不符合要求.很幸运KesionC ...

  9. 三元组顺序表表示的稀疏矩阵加法_Matlab入门教程 第 2 章 Matlab矩阵处理之稀疏矩阵...

    2.5 稀疏矩阵 2.5.1 矩阵的存储方式 完全存储方式 稀疏存储方式 稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号. ❝ 注意:采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是 ...

最新文章

  1. android好用的第三方库2018使用总结
  2. matlab 二重积分
  3. python爬虫案例-Python爬取租房数据实例,据说可以入门爬虫的小案例!
  4. 求职受性别限制?数据指明2021女性求职新方向
  5. c#使用Stopwatch来计算时间间隔
  6. docker --- 将已有的项目发布到云端
  7. MybatisPlus学习(四)条件构造器Wrapper方法详解
  8. smart700iev3 程序下载设置_分享一款Aira2下载工具
  9. QT - Could not load the Qt platform plugin xcb in even though it was found.
  10. 【maven】No plugin found for prefix ‘install‘ in the current project
  11. 不占内存的浏览器_4款黑科技办公网站,高效实用,不占内存,高手的必备神器...
  12. UniDrop:一种简单而有效的Transformer提升技术
  13. Python爬虫批量下载PDF文档
  14. 老板突然出现,游戏飞速隐藏,开源神器在手,摸鱼不怕被抓包
  15. web前端 原生js签名板(电子签名)写字板 canvas 截图
  16. fw325r没有虚拟服务器,FAST FW325R的配置方法教程
  17. win10天气是英文的
  18. 两天两夜,1M图片优化到100kb!
  19. apple pay
  20. python分段函数输入x的值求y的值_C语言编程题 有一分段函数如下,要求用scanf函数输入整数x的值,求y值并在屏幕上输出。有分段函数如下,编程实现输入整...

热门文章

  1. 编译原理——求短语、直接短语(简单短语)、素短语、句柄
  2. 统计学-抽样方法(学习笔记)
  3. 信号分析——S-G卷积平滑(Java/Matlab)
  4. 用C++Builder开发来电显示软件
  5. android词典论文,基于Android的电子词典软件的设计与实现(毕业论文doc)资料.doc...
  6. Linux 查看打开的网络端口
  7. python仿真搭建_仿真秀学院|从零开始学ANSA二次开发:如何利用Designer搭建窗口,含安装步骤...
  8. matlab图形矫正,图像畸变矫正算法实现 matlab版
  9. 纸上得来终觉浅,构建之法东北师大站2016秋季学期
  10. php函数unset,PHP unset函数 PHP unset函数原理及使用方法解析