如何检测我是否正在运行MATLAB或Octave?

lin*_*lof 45 matlab portability octave

我需要编写应该在Octave和MATLAB上运行良好的代码.问题是它需要做一些GUI的东西,MATLAB和Octave处理完全不同.

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

Amr*_*mro 41

您可以使用以下测试来区分Octave和MATLAB:

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
Run Code Online (Sandbox Code Playgroud)

  • @foobarbecue 工作得很好(刚刚尝试过[it](https://octave-online.net/)),相同的测试甚至包含在官方 Octave 手册中:https://octave.org/doc/latest/How -区分 Octave 和 Matlab.html (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

  • @Spoonless:“ R2018”不是MATLAB版本。这应该是R2018a或R2018b。 (3认同)

jmb*_*mbr 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与Sun Microsystems Inc. Java HotSpot (TM)客户端VM混合模式


在Octave:


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


另一种可能性是使用许可证功能.


Pet*_*ter 4

在Matlab中:

>> exist __octave_config_info__
ans =
     0
Run Code Online (Sandbox Code Playgroud)

在八度音阶中:

octave:3> exist __octave_config_info__
ans =  5
Run Code Online (Sandbox Code Playgroud)

  • 实际上,对于这个命令,我在 **Matlab 和 Octave** 上都得到 `ans = 0`! (2认同)