上周末公众号的文章,留言区发起了一个话题,聊一聊大家最喜欢的一句MATLAB代码,结果留言区爆了,收到了400多条留言
我很好奇最受大家欢迎的Top5代码都有哪些,于是爬取了文章所有留言,做了一个词云
![a5b40330f67117c09034d6e1e57acc2f.png](https://i-blog.csdnimg.cn/blog_migrate/42d9a75e5720d34c438a285f11313b93.jpeg)
排名前五的代码分别是clc,clear,help,plot,close all,这些代码相信大家一定都不陌生
除此之外,还有很多非常不错的代码,即便推荐的人不太多,大家可以在词云里了解一下
上周分享了我最喜欢的一句MATLAB代码“呆b遇到错误就停”,今天来聊一聊,平时我在撸代码的时候,最喜欢的8个MATLAB小技巧
dbstop if error
01. 代码折叠
我个人最喜欢也最想推荐给大家的是,代码折叠
平时在开发Hao系列工具的时候,经常一个脚本要写上好几千行代码,如果没有代码折叠的话,整个脚本的可读性是非常差的
在我看来,代码折叠的重要性丝毫不亚于代码注释
最常见的代码折叠,像function,for循环,while循环,try/catch等等,都是能够在代码行左侧看到折叠标志的
![6e0d3b70d14be6c95207bfd02846b1b7.png](https://i-blog.csdnimg.cn/blog_migrate/4c9a47bd692a22fcd63efb51e23d11e0.png)
这里我想推荐的是,通过两个连续的%%,对独立代码模块进行折叠,不过这个折叠功能并不是默认激活的,需要在MATLAB预设中添加设置
![9dae51270af8f2ede493c2698f3f7960.png](https://i-blog.csdnimg.cn/blog_migrate/cd5a3c184c837cdf649f67d476f1115c.png)
其中还有一个小插曲,好几年前,在我还不知道有这个操作的时候,我就很想对代码模块进行折叠操作,于是我就在每个代码块前面加了一个for循环,循环次数设为1,通过for循环对代码折叠
不知道有没有朋友和我有同样的经历…
02. Ctrl + =
推荐完代码折叠之后,不得不说的是,代码折叠的快捷键,毕竟手动逐个折叠代码这件事听起来还挺荒唐的
快捷键Ctrl + =实现所有可折叠代码的折叠操作
快捷键Shift + Ctrl + =实现所有可折叠代码的展开操作
两个快捷键,能把几千行的代码浓缩成几段注释,快速定位需要处理的代码块,再一键展开
![105d92091c06ac56b2fc5234cbb8006d.png](https://i-blog.csdnimg.cn/blog_migrate/187abbb59c62e55498c6f5955e0dcfd7.png)
03. Ctrl + r
聊到Ctrl的快捷键,我平时用的比较多,还有大家比较熟悉的Ctrl + r,对选取的代码行进行%注释处理,对应的逆向操作是Ctrl + t,也就是把代码行前面的%取消掉
![1ec252907048996bfa756c47d44cc9e0.png](https://i-blog.csdnimg.cn/blog_migrate/93e6548bd9788acf977f242b30fa5fd8.png)
应用的场景有很多,比如在我平时工具开发过程中,要做运算速度优化的时候,就会先把旧的算法Ctrl + r注释掉,然后尝试在原来的代码框架中研究新的算法
工作上用到的也不少,比如做Simulink系统仿真,我会写一个m文件定义仿真条件,同一个仿真条件会定义好几种不同的情况,像扭矩范围,转速范围等等,然后把同类型的条件做Ctrl + r注释处理,对所需的仿真条件Ctrl + t取消注释,sim运行仿真模型,这样就避免了每次仿真都需要重新定义条件的情况
04. 其他的Ctrl快捷键
除了前面提到的两个Ctrl快捷键,还有3个我用的比较多,Ctrl + i,Ctrl + g,Ctrl + f
Ctrl + i是必备的基础操作,m脚本中自动整理代码的快捷键,非常重要,甚至我都可以不要clc清屏,但一定要有自动整理代码的功能,不然写的脚本东倒西歪的没办法看
Ctrl + i的用法是,对鼠标所在的代码行进行缩进整理,也可以对选取的好几行代码段落进行整理,通常我更习惯的处理是,Ctrl + a全选,Ctrl + i缩进整理
![22d2204fd7e3cc8c076de173bbadabad.png](https://i-blog.csdnimg.cn/blog_migrate/2c935be478caebc910c648e5f68d1261.png)
不过,有时候我还挺头疼全选缩进整理的,因为几千行的代码整理完之后,发现光标停在了脚本最后一行,又要回过头找刚才处理的代码行
对于这个问题,推荐大家的快捷键是Ctrl + g,跳转到目标代码行
![3d647fb118cd120dbb4866d639489fd6.png](https://i-blog.csdnimg.cn/blog_migrate/438705305e8827cac2f5a77ddde58d96.png)
剩下的快捷键Ctrl + f,文本查找功能,大家应该都很熟悉,在很多其他软件里,查找的快捷键也是Ctrl + f
不过和其他软件有所不同的是,在m脚本中,可以直接双击选取要查找的内容,快捷键Ctrl + f,查找内容就已经在搜索框中了
05. Debug
我经常会在公众号后台收到不少朋友的私信,这类私信都有同一个特点,截了一张报错的图,然后问我为什么会报错
老实说,我既不知道你的脚本是怎么写的,也不知道workspace里是什么变量,最多我能帮到你的,只能是帮你把报错的英文内容翻译成中文
我很理解初学朋友的心情,但这并不是解决问题的正确方式
用MATLAB编程,最重要的是,要学会并习惯设置断点debug,这也是MATLAB的优势之一
当运行代码出现报错时,在报错代码行旁边设置断点并运行,运行到这行代码的时候会自动暂停,这时候就可以检查为什么下一句代码无法运行,是不是参数的维度不一致,或者数据类型有问题等等
![24cbfabbd2b932e71cba95f3e6d68068.png](https://i-blog.csdnimg.cn/blog_migrate/842859563d638cc412e7ad4f7c4b0336.png)
关于断点debug,我还是更推荐文章开头的那句代码dbstop if error,避免二次运行查错,也更方便for,while循环过程中的debug
除此之外,推荐几个和debug相关的快捷键,这几个快捷键在m文件的按钮上也有显示
F5,运行脚本,另外debug模式下,可以继续执行完脚本
F10,debug模式下,执行下一行代码
Shift + F5,退出debug模式
06. Ctrl + c
接下来要介绍的是Ctrl + c,不要误会,安利的并不是复制,虽然确实有复制的作用
MATLAB在运行脚本过程,在命令窗口中,按下Ctrl + c,就能停止正在执行的MATLAB命令
应用的场景有很多,比如无休止的循环,上万次的网页爬取等等,总的来说,就是不想运行下去了,想强制退出,都可以使用这个操作
![07ced7bc45a8b856ead7300737f03cd8.png](https://i-blog.csdnimg.cn/blog_migrate/107289b264d5c5142ca124f6ac1c735b.png)
既然聊到循环的退出,这里顺便发散一下
像平时写while循环,或者用MATLAB写爬虫代码时,不管是无意的bug,还是客观情况导致的死循环,都是会有可能造成脚本运行无法停止,或者说运行时间过长的情况
用Ctrl + c强制退出脚本的方式,会导致无法获取脚本最终的运行结果
通常这种情况下,我会使用break跳出循环,break的条件设计有很多种
可以根据累加计数,如果达到多少次循环,而结果并未出现改变,就跳出循环
可以根据时间判断,如果超过一定时间,但结果没有更新,就跳出循环
07. doc
MATLAB的优势除了便捷的debug和workspace之外,非常详细专业的文档也是优势之一
我平时用的更多的是doc命令,其中有函数语法的介绍,使用案例,以及关联函数
![7fe8a3ec81f24fbf9b3a53d734fc7d79.png](https://i-blog.csdnimg.cn/blog_migrate/e12dc26da653df22df1f764c4b4cf51f.png)
和doc有类似功能的,像很多朋友提到的help命令,不过如果大家两种命令都体验过的话,应该会更喜欢doc,因为doc的文档可读性要比help强很多
![d5f2c2a4ade01fd598774b11b6a69e08.png](https://i-blog.csdnimg.cn/blog_migrate/05db1ab0d35ce85c608c0db6bcbce602.png)
除此之外,我用的比较多的还有open命令,open可以直接打开函数的源文件,大家可以直接学习系统自带的源代码,或者也可以根据自己的需求对源代码进行改写,比如我之前处理的股票蜡烛图,就是改写了自带的candle函数
![dea161e0da6137eb468b6ed4f304b373.png](https://i-blog.csdnimg.cn/blog_migrate/1bc036156ac51312300233549d09ccb4.png)
08. winopen
最后一个想要安利给大家的是,winopen这个函数
我平时喜欢用MATLAB做一些非主流的操作,比如和其他软件做一些交互处理
这里就有可能会用到winopen,这个函数的作用是,在windows系统中用相应的软件打开文件,比如word,pdf,图片等等,还包括文件夹
就整体效果来说,等同于双击打开文件
![c823d91b134b9d08774be7d770e4a4c0.png](https://i-blog.csdnimg.cn/blog_migrate/6b5a67f12723a77730bea09306ebe130.jpeg)
以上就是今天关于MATLAB小技巧的分享
原本打算写个10条的,不过发现这篇文章的字数有点多,再写下去就停不住了,毕竟MATLAB里非常贴心的操作可没办法用数字来衡量,实在是太多了
今天聊的内容比较基础,希望对正在学习MATLAB的朋友们有所帮助
如果大家有兴趣的话,欢迎关注我的微信公众号“打浦桥程序员”,谢谢