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少很多,但基本够用了。
需要注意的是,模型转换函数如tf2zp
和zp2tf
,不在control
中,而在signal
中。在根轨迹分析中,MATLAB有个rlocfind
函数可以确定根轨迹上的极点对应的根轨迹增益,control
里没有这个函数,但有个替代的rlocfindx
,它除了确定增益值之外,还能画出时域响应曲线,也比较方便。
总结
当然,Octave肯定没办法完全替代MATLAB,但对大部分人来说是完全够用的,我带的很多学生就用Octave做课程作业。Octave的bug比较多,不过一个开源免费的软件能够做到这个地步,已经相当优秀了。希望有一天,我也能给这个开源项目作出贡献。