50

我需要编写在 Octave 和 MATLAB 中运行良好的代码。问题是它需要做一些 GUI 的东西,而 MATLAB 和 Octave 的处理方式完全不同。

有没有一种方法可以检测我是否正在运行 MATLAB 或 Octave,以便调用正确的函数?

4

4 回答 4

49

您可以使用以下测试将 Octave 与 MATLAB 区分开来:

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
于 2010-02-11T18:24:31.947 回答
24

octave.org 官方网站上的 wiki 中也有提示。他们提出以下建议:

编辑:并非所有版本的 Matlab 都支持 '#' 注释,所以我将示例更改为使用 '%'。它适用于 Matlab R2018 (Linux) 和 Octave 4.2.2

function foo
  %% fancy code that works in both
  if (is_octave)
    %% use octave super_powers
  else
    %% do it matlab way
  end
  %% fancy code that works in both
end

%% subfunction that checks if we are in octave
function r = is_octave ()
  persistent x;
  if (isempty (x))
    x = exist ('OCTAVE_VERSION', 'builtin');
  end
  r = x;
end
于 2012-03-23T11:24:07.687 回答
5

例如,我会使用 ver 命令,它会产生:

在 MATLAB 中:


MATLAB 版本 7.7.0.471 (R2008b) 操作系统:Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686 Java VM 版本:Java 1.6.0_04 with Sun Microsystems Inc. Java HotSpot (TM) 客户端虚拟机混合模式


在八度:


GNU Octave 版本 3.0.5 GNU Octave 许可证:GNU 通用公共许可证 操作系统:Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686


另一种可能性是使用许可功能。

于 2010-02-11T19:53:04.040 回答
4

在 Matlab 中:

>> exist octave_config_info
ans =
     0

在八度:

octave:3> exist octave_config_info
ans =  5
于 2010-02-11T18:19:18.573 回答