【问题标题】:How do I detect if I'm running MATLAB or Octave?如何检测我运行的是 MATLAB 还是 Octave?
【发布时间】:2011-01-15 20:06:01
【问题描述】:

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

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

【问题讨论】:

    标签: matlab portability octave


    【解决方案1】:

    在 Matlab 中:

    >> exist octave_config_info
    ans =
         0
    

    八度:

    octave:3> exist octave_config_info
    ans =  5
    

    【讨论】:

    • 存在('octave_config_info')在八度音阶语法挑战的 if 语句中(像我一样)...
    • 实际上,对于这个命令,我在 Matlab 和 Octave 上都得到了ans = 0
    【解决方案2】:

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

    isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
    

    【讨论】:

    • 很好的调用,虽然它会更好地封装在一个函数中。
    【解决方案3】:

    例如,我会使用 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) Client VM 混合模式


    八度:


    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


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

    【讨论】:

      【解决方案4】:

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

      编辑:并非所有版本的 Matlab 都支持 cmets 的“#”,因此我将示例更改为使用“%”。它适用于 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
      

      【讨论】:

      • @Spoonless:“R2018”不是 MATLAB 版本。这应该是 R2018a 或 R2018b。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2010-11-09
      • 2011-12-11
      • 2023-04-06
      • 2019-10-10
      • 1970-01-01
      相关资源
      最近更新 更多