MATLAB代码的两种执行方式:命令行、程序执行。
1.程序流程控制
1.1.m文件
matlab中m文件分为两种: 脚本文件&函数文件。
脚本文件:实际上是一个命令的集合,可认为是命令行的改良版,方便我们去编写命令
函数文件:声明了一个函数,是一个代码块,方便程序调用
区别:脚本没有输入没有返回,可以直接运行( 输入文件名/F5);函数类似于一个完整的程序,有输入有返回,在脚本中 调用才能运行。
脚本:
![](https://i-blog.csdnimg.cn/blog_migrate/fd2eebc747eb6a28cf9d618ea107c78f.png)
函数:
![](https://i-blog.csdnimg.cn/blog_migrate/fe92c08b74d8fa1ade873dbc60b99234.png)
mlx文件
实时脚本,边写边运行,可以在输入时进行函数名自动补全。
![](https://i-blog.csdnimg.cn/blog_migrate/d2c06ed425905296fe2a082c9852db58.png)
1.2.三种程序结构
![](https://i-blog.csdnimg.cn/blog_migrate/a681fab3c93eeb6c46c5098e50d361ae.png)
实例:
![](https://i-blog.csdnimg.cn/blog_migrate/80b5171c66a6d6f89209d1b73ad423b0.png)
1.3.选择结构
if-else
![](https://i-blog.csdnimg.cn/blog_migrate/d2e90adf5f8372e5b262942e1b84bf88.png)
switch
![](https://i-blog.csdnimg.cn/blog_migrate/8566e97fec9e43f72ba78208bd85816e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e48a1bdd08ed70dbdb232dc204360411.png)
1.4.选择结构
for
![](https://i-blog.csdnimg.cn/blog_migrate/f0770a84c9dfc8d16250f9b7d2111229.png)
![](https://i-blog.csdnimg.cn/blog_migrate/902dc720dff33bc100cb153ddf06eeaf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8fa40042ae2c632b7396ead6453df21b.png)
示例:
![](https://i-blog.csdnimg.cn/blog_migrate/2748edeaef5f9b0a5d010c01b0613722.png)
while
![](https://i-blog.csdnimg.cn/blog_migrate/dabf5400833f148db0ec99b55385ca0b.png)
break和continue
这个没什么好说的,和C++/C那些一样。
1.5.循环嵌套
这个也没什么好说的,示例(阶乘和):
![](https://i-blog.csdnimg.cn/blog_migrate/a6d98c47aa78713c39b8c8654d327f8f.png)
2.函数文件
2.1函数文件的基本结构
由function和end引导,包含输入和输出
说明:函数文件名和函数名可以不同
![](https://i-blog.csdnimg.cn/blog_migrate/ad551b2c387008469c532a49135a8ab2.png)
2.2函数调用
% [输出参数表] = 函数名字(输入参数)
% 注意:输入的参数顺序、个数预定义的一致
2.3递归
![](https://i-blog.csdnimg.cn/blog_migrate/537e841a4a6bd874d951cddefde14ad5.png)
2.4函数参数
![](https://i-blog.csdnimg.cn/blog_migrate/bbf95a2c36dd26f90872b11392cba3c4.png)
2.5变量的作用域
% 全局变量global,局部变量local(函数内部)
% global作用域为整个函数空间,所有函数都可以对它进行存取和修改
% global可用来函数间的信息传递
% 不提倡使用global
3.特殊函数
3.1 子函数
主函数 Primary function
子函数 Subfuntion
子函数类似于其他编程语言中函数嵌套中的内层函数
![](https://i-blog.csdnimg.cn/blog_migrate/190e3ab757ca68d622f65c2cdc30c5ee.png)
3.2内联函数
以字符串形式存在的函数表达式可以通过 inline 函数转化成内联函数
![](https://i-blog.csdnimg.cn/blog_migrate/ea41e7c2a3549fdc0168f2a46679eeca.png)
3.3匿名函数(一行函数)
基本格式如下:
匿名函数名 = @(匿名函数输入参数) 匿名函数表达式
或者 匿名函数名 = @ 函数名
![](https://i-blog.csdnimg.cn/blog_migrate/42168ea0c58d2de4fb8a0bedc4b85328.png)
4.调试与优化
4.1程序调试
% help debug
% 常用的有
dbstop 设置函数断点
dbclear 清除断点
dbcont 从断点处执行
dbquit 推出debug模式
% 步进:运行一条语句,但不进入函数 F10
% 步入:单步运行,遇到函数进入函数,任然但不运行 F11
![](https://i-blog.csdnimg.cn/blog_migrate/07743f920481f89a6eee05003c4559a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8506b530ffa19387ffa44f2453e89ec8.png)
4.2程序性能分析与优化
% 利用探查器 Profiler
profile on % 打开探查器
debugTest % 脚本名字
profile viewer % 查看探查器的检测内容
![](https://i-blog.csdnimg.cn/blog_migrate/9ea9db195e96fe559ac76bad30f6a8c6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eac20c10984bb7bd6090604f90ba30f0.png)