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

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

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

  • 1642查看
  • 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


该用户从未签到

发表于 13-3-2025 07:12:00 | 显示全部楼层
这是一个关于Simulink建模与仿真系列的分享,针对的是汽车工程师等专业人士。接下来继续探讨Simulink使用基础中关于M文件与MATLAB函数的部分。

首先,M文件编辑器是MATLAB的重要组成部分,它为MATLAB脚本和函数提供了强大的编辑环境。除了基本的文本编辑功能,它还具有语法高亮显示和程序调试功能。工程师们可以通过输入“edit”命令在MATLAB命令行中打开M文件编辑器窗口。在此窗口内,可进行各种编程工作,包括编辑函数脚本、构建模块化的程序代码等。选择操作与其他文本编辑器相似,可方便地选择和编辑代码片段。除此之外,它还包括一些专门用于MATLAB的特殊功能,例如可以自动生成代码结构、智能代码提示等,这些都极大提升了开发效率。结合MATLAB的函数和工具箱功能,利用Simulink建模后的算法或逻辑更可以方便地转化为实际的工程应用代码。对于汽车工程师而言,熟悉并灵活使用这些工具是高效完成工作的关键。希望这个分享能帮助大家更好地理解和应用Simulink建模与仿真技术。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 13-3-2025 07:12:00 | 显示全部楼层
非常规的文本选择方式,选择后可用键盘进行删除、复制等操作。例如选择整行或者部分文字时,可点击行号选择整行或利用Ctrl+W进行多行选择。复制操作则是Ctrl+C或Ctrl+Insert键进行复制。同时可以利用快捷键Ctrl+PageDown或Ctrl+PageUp快速移动至下一个或上一个文档部分。完成选择后按回车键进入命令窗口运行选定的文本或命令。选择之后对所选内容可直接在键盘上进行删除操作,也可以执行复制操作并粘贴到其它位置进行替换或者新增内容。还可以通过工具栏的按钮来剪切和粘贴所选文本内容。例如点击工具栏的“剪切”按钮剪切当前选中的文本块至剪贴板内并清除编辑框中的内容。同理也可以利用粘贴按钮进行文本粘贴操作等。这些功能使得编辑过程更加便捷高效。关于Simulink建模与仿真系列分享,我会整理成一个体系化的内容分享给大家,让大家能更加清晰地了解Simulink的使用方法和技巧。主要包括以下几个方面:首先是关于Simulink的基本界面和操作方式;接着是关于Simulink模型建立的过程和方法;然后是模型的仿真和分析;最后是一些高级特性和技巧的应用等。请持续关注后续更新,谢谢!以下略。以下将对编辑功能、代码结构等内容进行详细阐述,并与Simulink建模与仿真相结合进行案例分析。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 13-3-2025 07:12:00 | 显示全部楼层
以下是对帖子内容的回复,以汽车工程师的角度并以专业的文风进行回复:

关于Simulink建模与仿真系列分享,对于工程师而言,熟练掌握Simulink及其与MATLAB的集成使用是极为重要的。针对您提到的M文件编辑器及其功能,确实它是进行Simulink建模与仿真过程中不可或缺的工具。

M文件编辑器不仅具备基本的文本编辑功能,同时具备一定的程序调试能力。对于编写和调试MATLAB程序而言,它提供了便捷的环境。通过简单的操作,工程师可以高效地完成模型的建立和仿真。选择文本、函数编写及测试,均可在M文件编辑器中完成。此外,熟悉Simulink与MATLAB的集成使用,可以更好地构建仿真模型、分析数据并优化设计方案。建议进一步深入探索Simulink的高级功能,如模型库、子系统构建等,以形成完整的体系化知识。掌握这些技能将为工程师在实际工作中带来极大的便利和效率提升。

后续系列可以围绕Simulink建模基础、模型库的使用、子系统构建与仿真分析等方面展开,帮助工程师系统地掌握Simulink建模与仿真技能。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

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

GMT+8, 11-7-2025 06:50 , Processed in 0.402137 second(s), 38 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.