2009年2月28日星期六

GNU octave (Part I)

最近用了一次 octave 感觉很不错,和 Matlab 越来越像了,图形也做的很顺手了。加上它小巧(相对于 Matlab 而言),对 Matlab 的了解使我能很容易上手。顺便找了一下,manual 写的很详尽(我看的 3.1 版本的接近 600 pages),常用的功能都有。扫了一下主页,感觉还是很活跃的,于是下定决心好好研究一下,正好和 Matlab 比较促进我对 Matlab 的进一步了解。

就我观察,octave 不同版本号之间差异比较大,我现在说的 3.1 应该是和 Matlab 最接近的,而 2.x 还离得很远,这里我先就一些基本的问题说明一下。debian 里面 octave 一般分成下面几个 package,
  • octave*.*,这是 octave 的主程序(还有一个汇报 bug 的程序)所在,常用的函数一般有二进制版本(称为 built-in 函数)放在 /usr/lib/octave/version/oct/arch/*.oct。
  • octave*.*-common 里面主要是常用工具箱,m 文件多在 /usr/share/octave/version/m/toolbox-name/*.m。
  • octave*.*-doc 里面是文档,我现在就使用的 3.1 系列的文档。
  • octave*.*-htmldoc 还是文档。
下面这些类似于 toolbox 的东西来自 octave-forge 项目,
  • octave-ad 自动前向微商。
  • octave-audio 处理音频。
  • octave-bioinfo 处理生物信息学。
  • octave-combinatorics 组合学。
  • octave-comminiations 信号处理、通信。
  • octave-control 控制理论。
  • octave-data-smoothing 数据平滑化(似乎是用 Tikhonov regularizer?)。
  • octave-econometrics 度量经济学。
  • octave-epstk 生成 eps 文件。
  • octave-financial 金融工具箱。
  • octave-fixed 计算 fixed point。
  • octave-ftp 在 octave 里面使用 ftp。
  • octave-ga 就是遗传算法。
  • octave-general 广义函数。
  • octave-graceplot 原来 octave 调用 gnuplot 绘图,这个包用 grace。
  • octave-gsl 提供 GSL 的支持。
  • octave-ident 提供 system identification。
  • octave-image 提供图像处理的功能。
  • octave-informationtheory 提供信息论方面的函数。
  • octave-io 提供输入输出支持。
  • octave-irsa 提供 irregular sampling analysis。
  • octave-linear-algebra 线性代数。
  • octave-miscellaneous 一些杂七杂八的函数,如输出到 latex 等。
  • octave-missing-functions 搜索 octave 里面没有的 matlab 函数。
  • octave-nan 提供处理 NaN 的能力。
  • octave-nnet 前馈神经网络。
  • octave-netcdf 处理 NetCDF 数据。
  • octave-octgpr 散乱数据插值(看起来像 Gaussian process regression)。
  • octave-odebvp 线性常微分方程边值问题。
  • octave-odepkg 常微分方程初值问题。
  • octave-optim 优化工具箱。
  • octave-optiminterp 最优插值。
  • octave-outliers 发现 outlier。
  • octave-parallel 并行计算。
  • octave-pfstools 使用 octave 处理 HDR 图片。
  • octave-phisicalconstants 物理常量。
  • octave-plot 额外的作图工具。
  • octave-plplot 对 PLplot 库的支持。
  • octave-signal 信号处理。
  • octave-sockets 提供 socket 的接口。
  • octave-sp 半定规划。
  • octave-specfun 特殊函数。
  • octave-splines 样条。
  • octave-statistics 统计函数。
  • octave-strings 字符串处理。
  • octave-struct 对结构体的支持。
  • octave-symbolic 符号计算,基于 GiNaC 和 CLN。
  • octave-time 日期时间处理。
  • octave-tsa 时间序列分析。
  • octave-vrml 虚拟现实工具箱。
  • octave-senity 可能和 guide 类似。

以上可见 octave 并不比我们常用的 matlab 缺少很多功能,而且我们相信随着贡献者越来越多,一般科学研究需要的计算可以转交给 octave 来实现。我现在一些小的计算,懒的打开 Matlab,就会用 octave 来处理。数值计算的教学,我觉得有理由离开 Matlab 这个商业软件了。如果说 Scilab 并不顺手,那么 octave 已经不存在这个理由了。

不过,我们在这里还是列举一些 octave 和 Matlab 不同之处(参考这里),
  • 搜索路径应使用 addpath,而不是老版本直接对 LOADPATH 变量赋值。
  • Matlab 不支持 logical array 的 prod,但是 octave 支持。
  • Matlab 不支持对 nargin 赋值,但是 octave 支持。
  • Matlab 启动的时候执行 startup.m,octave 执行 /etc/octave*.conf。
  • Matlab v6 的 mat 文件可以被 octave 读取。v7 的可以被 2.9 之后的读取。
  • 不同长度的字符串在老版本的 octave 里面允许 vercat,而 matlab 不允许。
  • Matlab 允许 ! 开头表示系统调用,octave 只允许使用 system 函数。octave 里面 ! 和 ~ 都表示取反。
  • Matlab 不允许一个字符串和一个字符比较,但 octave 允许。
  • hist.m 函数在 octave 里面有一个 normalization,matlab 没有。
  • 老版本的 octave 通过环境变量 OCTAVE_VERSION 获得版本信息,matlab 和新版的 octave 使用 ver。
  • cell array 和 struct 的显示方是不同。
  • 函数 datastr 曾非常不一致。
  • Matlab 的 load 和 octave 的 load --force 等价。
  • Matlab 可以 load 读取空文件,octave 不允许。
  • Matlab 没有 printf 只有 fprintf 和 sprintf,octave 都有。
  • Matlab 的转置运算符和操作矩阵之间不允许有空格,octave 允许。
  • Matlab 一行分割成几行需要用 ...,octave 可以省略或者用 \ 也行。
  • 逻辑运算里面 Matlab 只允许 & 和 |,octave 允许 && ||(返回标量),和 & | (返回矩阵)。
  • Matlab 用 ^ 表示指数运算,octave 还允许用 **。
  • Matlab 的字符串用 ',octave 还可以用 "。
  • Matlab 结构控制语句都用 end 结束,octave 还允许 end if/for 等。
  • Matlab 调试 dbstep in 在 octave 为 dbstep、dbstep 在 octave 为 dbnext。
  • Matlab 广义特征值用 eig(A, B),在 octave 为 qz( A, B)。
  • Matlab 注释使用 %,octave 还可以使用 #。
  • Matlab 不允许对立即矩阵取 index,即 [ 1 2 3 4]( 3 ) 是不合法的,octave 允许。
  • Matlab 没有 += 这种类型的运算,octave 支持,并还支持 ++ --,和 C 一致。
  • Matlab 在新版本里面实现了 exception handling 和 octave 的 unwind protect 不同。
  • Matlab 实现 OOP 的风格不被 octave 接受。
  • Matlab 使用 private 子目录不被 octave 接受。

后面,我们开始更进一步学习 octave。

6 条评论:

匿名 说...

不错,期待II

匿名 说...

Thаt is a grеat tіp pаrtіcularly to thοse fresh tо
the blogosphere. Shοrt but very precise іnfо… Thank you for shаring this one.
A muѕt rеad ροst!

my blog - additional reading

匿名 说...

Becausе thе admin of thiѕ web site is worκing, no doubt very
shоrtly it will be renοwned, due tο іtѕ featurе contеntѕ.


Also visit my homepage ... Hackslashmine.Net

匿名 说...

Whаt's up Dear, are you in fact visiting this web page daily, if so after that you will definitely get fastidious knowledge.

Also visit my webpage; http://musiciansroad.blogspot.dk/2012/08/lets-change-perspective.html?m=1

匿名 说...

сοnstantly і used to геad ѕmalleг artiсles that
as well clear their motive, and that is alѕo hарpening ωith thіs pоst
which I am reading at this time.

Also ѵiѕіt mу ωebѕite; V2 Cigs review

匿名 说...

We stumbled over here different web page and thought I may as well check things out.

I like what I see so i am just following you. Look forward to looking at your
web page repeatedly.

My page - luggage online