中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

  • 373查看
  • 0回复

[Simulink] Simulink建模与仿真(5)-Simulink使用基础(M文件与MATLAB函数)

[复制链接]


该用户从未签到

发表于 29-3-2024 10:23:04 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


分享一个系列,关于Simulink建模与仿真,尽量整理成体系

M文件编辑器

“工欲善其事,必先利其器。”用户应首先熟悉一下最经常使用的M文件编辑器(M File Editor)。M文件编辑器不仅仅是一个文字编辑器,它还具有一定的程序调试功能,虽然没有像VC、BC那样强大的调试能力,但对于调试一般不过于复杂的MATLAB程序已经足够了。

在MATLAB命令行下输入:
>>edit
则弹出如下图所示的M文件编辑器窗口。

Simulink建模与仿真(5)-Simulink使用基础(M文件与MATLAB函数)w1.jpg

1. 编辑功能

(1) 选择:与通常鼠标选择方法类似,但这样做其实并不方便。如果习惯了,使用Shift+箭头键是一种更为方便的方法,熟练后根本就不需要再看键盘。

(2) 拷贝粘贴:没有比Ctrl+C、Ctrl+V键更方便的了,相信使用过Windows的人一定知道。

(3) 寻找替代:寻找字符串时用Ctrl+F键显然比用鼠标点击菜单方便。

(4) 查看函数:阅读大的程序常需要看看都有哪些函数并跳到感兴趣的函数位置,M文件编辑器没有为用户提供像VC或者BC那样全方位的程序浏览器,却提供了一个简单的函数查找快捷按钮,单击该按钮,会列出该M文件所有的函数。

(5) 注释:如果用户已经有了很长时间的编程经验而仍然使用Shift+5来输入%号,一定体会过其中的痛苦(忘了切换输入法状态时,就会变成中文字符集的百分号)。

(6) 缩进:良好的缩进格式为用户提供了清晰的程序结构。编程时应该使用不同的缩进量,以使程序显得错落有致。增加缩进量用Ctrl+]键,减少缩进量用Ctrl+[ 键。当一大段程序比较乱的时候,使用smartindent (聪明的缩进,快捷键Ctrl+I)也是一种很好的选择。

2. 调试功能

M程序调试器的热键设置和VC的设置有些类似,如果用户有其它语言的编程调试经验,则调试M程序显得相当简单。因为它没有指针的概念,这样就避免了一大类难以查找的错误。不过M程序可能会经常出现索引错误,如果设置了stop if error(Breakpoints菜单下),则程序的执行会停在出错的位置,并在MATLAB命令行窗口显示出错信息。下面列出了一些常用的调试方法。

(1) 设置或清除断点:使用快捷键F12。

(2) 执行:使用快捷键F5。

(3) 单步执行:使用快捷键F10。

(4) step in:当遇见函数时,进入函数内部,使用快捷键F11。

(5) step out:执行流程跳出函数,使 用 快 捷 键Shift+F11。

(6) 执行到光标所在位置:非常遗憾这项功能没有快捷键,只能使用菜单来完成这样的功能。

(7) 观察变量或表达式的值:将鼠标放在要观察的变量上停留片刻,就会显示出变量的值,当矩阵太大时,只显示矩阵的维数。

(8) 退出调试模式:没有设置快捷键,使用菜单或者快捷按钮来完成。

MATLAB语言的语法

1. 注释

MATLAB中用百分号%表示其后为程序注释(实际上在前面已经碰到了这样的注释)。编写M程序和编写其它程序一样应该养成良好的程序注释习惯。除了程序间的注释,编写M文件时还应该在文件头说明该程序的功能和使用方法,使用Help命令看到的帮助信息正是这些在文件头的注释。

2. 赋值语句

在MATLAB中,赋值语句的基本语法结构为
variablename=value;
3. 逻辑表达式

在MATLAB中,逻辑表达式的基本语法结构为:
logicalvalue=variable1 关系运算符 varialble2;
logicalvalue=logical expression 1 逻辑运算符 logical expression 2;
其中关系运算符有= =(等于)、~=(不等于)、>(大于)、<(小于)、>=(不小于)、<=(不大于)等。逻辑运算符有&(逻辑与)、|(逻辑或)和~(逻辑非)等。

4. 条件控制语句

MATLAB中由if语句进行判断,其基本语法结构为:
if 逻辑表达式   语句集合end
在if与逻辑表达式之间必须有一个空格;当逻辑表达式值为真时,执行语句集合中的语句;这里语句集合可以是MATLAB中的单独命令,也可以是由逗号、分号隔开的语句集合或return语句。

对于简单的语句也可以写成下面的形式:
if 逻辑表达式,语句集合,end
此外,if语句还可以与elseif、else组合成更为复杂的控制语句,其语法格式如下:
if 逻辑表达式   语句集合1else   语句集合2end
5. 循环语句

MATLAB中实现循环的语句有两种:for语句与while语句,以实现某些语句的循环执行。for语句语法格式如下:
for 变量=表达式   语句集合end
MATLAB脚本文件与M函数

MATLAB中有两种M文件:一种称为脚本文件(类似于批处理语句),另一种是M函数(类似于函数的概念)。

1. 脚本文件

脚本文件是由一系列MATLAB的命令、内置函数以及M文件等构成的文件,它可以由一般的编辑器进行编制,其结果保存在相应的M文件中。M脚本文件的实质为命令的集合,在MATLAB中执行M脚本文件时,MATLAB从文件中读取命令执行,完成用户的工作。

一般习惯于使用MATLAB的编辑器编制M文件。打开MATLAB编辑器,新建M脚本文件,保存时系统会自动将文件保存成*.m文件。然后便可以在MATLAB命令窗口或其它M文件中使用。其特点是按照脚本中语句的顺序执行,生成的变量放在当前的工作区之中(如果从命令行运行,则放在基本工作区)。

【例1】 编写一个M文件绘制函数

Simulink建模与仿真(5)-Simulink使用基础(M文件与MATLAB函数)w2.jpg

在区间中的图形。

解:在MATLAB命令行下输入edit命令以打开M文件编辑器,输入以下程序:
x=-6:0.1:6;      % 设定自变量x的取值范围leng=length(x);    % 计算向量x的长度for m=1:leng       % 计算函数值if x(m)<=0     % 判断x取值所在范围        y(m)=sin(x(m));  % 计算分段函数值    elseif x(m)<=3        y(m)=x(m);       % 计算分段函数值else        y(m)=-x(m)+6;    % 计算分段函数值endend% 绘制函数曲线plot(x,y, '*')grid
将其存盘为 demomfile1.m(该文件就是一个MATLAB脚本文件),然后在MATLAB命令行下输入:
>>demomfile1
则生成如下图2.7所示的函数曲线。

Simulink建模与仿真(5)-Simulink使用基础(M文件与MATLAB函数)w3.jpg

本例目的在于说明M脚本文件的编写技术,以及如何使用前面所讲述的MATLAB语言的条件判断与循环语句。由此可见使用MATLAB语言进行程序设计简单而又快速。

2. M函数

MATLAB的函数与脚本不同,M函数的第一行为关键字function,函数第一次执行时将生成内存代码,生成的变量放在函数的工作区。在MATLAB中有大量的内置函数及大量的工具箱函数,使用它们可以完成大部分的工作;但由于不同的用户有不同的需要,MATLAB允许用户开发自己的专用或通用函数,以扩展MATLAB的函数应用。这里仅简单介绍一下M函数的编制与使用方法。这对理解后面的S-函数有很重要的作用。

(1) M函数的第一行必须包含function,普通的M文件没有这种要求。

(2) 在function后面必须声明函数名、输入变量(输入参数)与输出变量(输出参数),如function outvar=function_name(inputvar)。

(3) M函数可以有零个、一个或多个输入或输出。

(4) M函数的调用方式为:outvar=function_name(inputvar)。

(5) M函数文件名须和函数名function_name相同,调用时函数的输入与输出变量名称不需要和函数定义中的变量相同。

(6) M函数的注释用%开始的行表示,help function_name 显示的是紧接第一行之后的注释。

MATLAB允许将多个函数写在同一个M文件中,其中第一个函数是M文件的主函数,M文件名必须为主函数的名字。其余的函数均为子函数,并受到其它函数的调用。因此,用户可以书写具有模块化特色的MATLAB函数,但是要注意以下几点:

(1) 所有的子函数只能在同一M文件下调用。

(2) 每个子函数都有自己单独的工作区,必须由调用函数传递合适的参数。

(3) 当子函数调用结束后,子函数的工作区将被清空。

【例2】 编写一个通用的M函数求取【例1】中函数在任意点的值,并绘制函数在区间中的图形。

解:(1) 编写函数demofun并将其存储在同名M文件 demofun.m 中。
function y=demofun(x) % M函数定义leng=length(x);       % 计算向量x的长度for m=1:leng          % 计算函数值if x(m)<=0           % 判断x取值所在范围        y(m)=sin(x(m));  % 计算分段函数值elseif x(m)<=3        y(m)=x(m);       % 计算分段函数值else        y(m)=-x(m)+6;    % 计算分段函数值endend
(2) 编写M脚本文件demofile2.m,绘制函数曲线或在命令行下输入下列命令:
x=-6:0.1:6;      % 设定x的取值范围y=demofun(x);    % 调用函数demofun.m求值plot(x,y), grid; % 输出图形
Simulink建模与仿真(5)-Simulink使用基础(M文件与MATLAB函数)w4.jpg

结果如上图所示,可以看到与【例1】输出图形一致。

M函数可以较好地将具有一定功能的脚本文件进行封装,这样有利于程序的阅读与修改。这时可以在MATLAB命令窗口中显示工作区中的变量,输入以下命令:
>>whos
可以看到输出结果如下。

Simulink建模与仿真(5)-Simulink使用基础(M文件与MATLAB函数)w5.jpg

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 22-11-2024 15:38 , Processed in 0.267576 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.