Skip to content
Alick Zhao edited this page Apr 8, 2014 · 10 revisions

基本情况

  • 解释型语言,与 MATLAB 语言兼容,但语法有一些扩展
  • 数值计算工具,还有音频、图像等信号处理工具箱
  • 自由软件,是 GNU 项目的一部分。主页在此
  • 绘图使用了外部工具 gnuplot,绘图标注支持 LaTeX 数学公式语法。3.8 版本起绘图默认使用 FLTK 控件。

与 Matlab 的兼容性

缺失特性

  • 返回函数句柄。Matlab 可以让函数返回一个函数句柄(包括嵌套函数、匿名函数),Octave 中可以返回匿名函数,3.8 版本起支持嵌套函数。

  • 单元测试:MATLAB 自 R2013a 起,引入了内置的单元测试框架。旧版本用户可以用 xUnit(已无进一步开发计划)。查看更多单元测试框架

  • 异常/错误处理:Octave 支持 try catch 异常处理,在 catch 中使用 lasterr, lasterror 以获取错误信息。MATLAB 中这种方式仍然可用,但不再鼓励。这是因为 MATLAB 实现了面向对象风格的 MException 类。Octave 3.8 版本对命名异常提供有限支持。

  • 并行处理。Octave 可以识别 parfor 关键词,但并不会真正地并行处理。Octave 没有 matlabpool 函数。

  • 绘图细节。Matlab 的 axis/xlim/ylim/zlim 函数允许使用 Inf 代表自动设置坐标轴区间端点,Octave 3.8 及以前版本没有这一特性,代码库中已经修复。

独有特性

语法:

  • Unix 风格的 shebang,可执行脚本
  • 更多的 C 风格的运算符,如 ++, +=
  • 字符串常量的引号除了可以用 ' 外,还可以用双引号 "
  • 注释除可以以 % 开始外,还可以用 # 开始。

函数:

  • print_usage
  • fflush
  • localtime
  • stdout, stderr, stdin
  • columns, rows(Matlab 中用 size(A, DIM) 替代)
  • assert 中条件判断可以是向量逻辑表达式,Matlab 中只能是标量。
  • e 得到自然对数的底数 (e=2.71828...),或者全 e 的矩阵。

绘图:

  • 有 fltk 和 gnuplot 两个后端,使用 graphics_toolkit 函数进行切换。
  • 可以用字符 '0' 到 '6' 指定线条、点的颜色。

不同行为

输出缓冲:Matlab 的 fopen 系列函数默认情况下会自动 flush,disp 也会。Matlab 的 fopen 提供 W A 模式禁用自动 flush,这可以用来提升文件读写性能。不过有报告说 disp 也会被缓冲,可以用 system_dependent(7) 禁用,这可能和系统相关。Matlab 默认未启用命令行窗口的分页查看。Octave 中,默认不会自动 flush,需要手动使用 fflush 函数。在打印到标准输出时,默认使用分页查看器,会有缓冲,因此无法即时看到数据进度,可以在命令行界面用 more off 临时禁用分页。

绘图对数坐标:Matlab 中如果在 semilogx 等绘图之前使用了 hold on,绘图将保持使用线性坐标。要使结果为对数坐标,需要先 semilogx 再 hold on,或者最后 set(gca, 'xscale', 'log'),详见本链接。使用 polar 函数绘制极坐标图时也有类似现象。Octave 中先 hold on 再 semilogx 结果会是对数坐标。

陷阱

下标从1开始计数

多维数组列优先

换行和续行

a = [1,
2]; % a is a column vector!
a = [1
2]; % a is a column vector!
a = [1,...
2]; % a is a row vector.
a = [1 ...
2]; % a is a row vector.
a = [1...
2]; % syntax error!

绘图

Octave 3.6.4 版本使用 gnuplot 后端绘图时,不识别虚线、点划线等线型;换用 fltk 后端则可以。

参考资料

Matlab 标注中可用的 TeX 符号列表(默认隐藏,点击 TeX Character Sequence Table 链接可见)

Clone this wiki locally