Octave软件使用经验

为什么用Octave

MATLAB功能强大,但正版价格非常昂贵,而且有地缘冲突带来的制裁风险。有很多开源免费软件可以替代MATLAB的一部分功能,如Octave、FreeMat、Scilab、R、IDL等,这其中Octave最兼容MATLAB,而且性能非常好,详情可参考这篇文章

Octave全称GNU Octave,是开源免费软件,与MATLAB语法高度兼容。相比于MATLAB新版本10GB以上的安装包大小和动辄几十分钟的安装时间,Octave安装包非常小,安装速度很快。而且,Octave还提供了在线版的Octave Online,非常方便。这几年我在课堂上一用Octave做演示,积累了一点经验分享给大家。

Linux下注意事项

Octave支持Linux、BSD、macOS、Windows全平台。在Windows下安装,遵照默认配置,不停点击下一步就可以,各个功能包也都默认帮你装好了。在Linux下则要麻烦一些,要注意两点。

首先,安装完Octave软件之后还要手动安装自己需要的功能包。在我用的Manjaro Linux系统下,通过sudo octave以root权限打开Octave,然后在Octave的命令窗口运行pkg install package_name安装相关功能包,而且会提示安装成功,但却无法正常使用。解决办法是,通过操作系统的软件管理工具安装,比如在Manjaro中运行下面的命令即可安装:

1
yay -S octave-control

另外一点与性能有关。Octave默认使用blas库来实现线性代数运算,但是blas库没有充分利用好现代CPU的一些指令,为提升性能,可以安装openblas库来替代blas。在Manjaro系统下,安装openblas时会提示卸载blas,完成替代后,实测性能确实有显著提升,这点可以参考Octave - ArchWiki里的测试方法。值得一提的是,OpenBLAS是由国人主导开发和维护的高性能计算库。

控制系统仿真

我在课堂上用Octave主要做控制系统仿真演示。在使用之前,需要运行如下命令加载控制功能包:

1
pkg load control

在该功能包的主页上可以查看所支持的函数,用法和MATLAB基本相同,功能相比MATLAB少很多,但基本够用了。

需要注意的是,模型转换函数如tf2zpzp2tf,不在control中,而在signal中。在根轨迹分析中,MATLAB有个rlocfind函数可以确定根轨迹上的极点对应的根轨迹增益,control里没有这个函数,但有个替代的rlocfindx,它除了确定增益值之外,还能画出时域响应曲线,也比较方便。

总结

当然,Octave肯定没办法完全替代MATLAB,但对大部分人来说是完全够用的,我带的很多学生就用Octave做课程作业。Octave的bug比较多,不过一个开源免费的软件能够做到这个地步,已经相当优秀了。希望有一天,我也能给这个开源项目作出贡献。