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

《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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值