最近完成模式分类的作业,需要大量使用 matlab, 期间发现了一个问题,是 matlab 代码的复用程度。

  在面向过程编程里, 基本的复用单位是函数,程序的复杂度籍此下放到函数的接口上。设计好函数间的接口,基本上就成功了一半。在面向对象编程里, 基本的复用单位是对象,对象使得数据具有了一定程度的自维护。而在 matlab 里, 我很长时间都没有找到方向,因为我搞不清楚复用的单位是什么。

  matlab 中,基本的单位是矩阵,针对矩阵系统有一大堆的函数供你调用。但是,想自己写程序还是有一定的麻烦的。for 循环语句在 matlab 里似乎是一个禁忌,所有老师都敦敦告诫,不要轻易使用 for。而函数调用也是同样的低效, 有兴趣的同学可以参见 此文 。那么我们应该基于什么模块进行复用呢?

  答案是 Cell 模式。 Cell 是 matlab 的一个特色功能,将一段代码以 %% 标记为 cell 以后,就可以重复执行了,相当于在命令行输入该代码块。以前,为了测试不同参数的结果,往往要用 up arrow 执行上一条指令。遇到需要多条指令的地方,就很容易出错。而算法又没有完善到可以封装成函数的地步,整天来回跑代码让人不堪其烦。通过 cell 模式,可以非常方便地在不同的代码块之间跳转,或重复执行一个代码块。

  对于我来说,matlab 中的编程越来越趋向于 bash 编程,所用到的语言只是起到一个粘合剂的作用,负责把系统内置的高性能函数组合起来。这种对语句块的复用方式能够快速地调试出需要的功能,有点类似传统的 goto,但是可以一直观察着执行的结果,事前无须编译 ,也不用考虑函数的接口问题。当算法稳定下来,就可以考虑用一个接口轻易地封装成函数了。同时也可以直接保存为 mfile 供以后使用。