如何检测I';我在运行MATLAB还是倍频程?

如何检测I';我在运行MATLAB还是倍频程?,matlab,portability,octave,Matlab,Portability,Octave,我需要编写的代码应该在八度音阶和MATLAB上都运行良好。问题是它需要做一些GUI的东西,而MATLAB和Octave处理这些东西的方式完全不同 是否有一种方法可以检测我是否正在运行MATLAB或Octave,以便调用正确的函数?在MATLAB中: >> exist octave_config_info ans = 0 八度: octave:3> exist octave_config_info ans = 5 您可以使用以下测试将倍频程与MATLAB区分开来:

我需要编写的代码应该在八度音阶和MATLAB上都运行良好。问题是它需要做一些GUI的东西,而MATLAB和Octave处理这些东西的方式完全不同

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

在MATLAB中:

>> exist octave_config_info
ans =
     0
八度:

octave:3> exist octave_config_info
ans =  5

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

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

例如,我将使用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虚拟机版本:Java 1.6.0_04与Sun Microsystems Inc.的Java HotSpot(TM)客户端虚拟机混合模式


八度:


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


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

官方octave.org网站上的wiki中也有一个许可证。 他们提议如下:

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

很好的调用,尽管它最好封装在函数中。对于语法上受到挑战的倍频程(像我一样),在if语句中存在('octave_config_info')。实际上,对于这个命令,我在Matlab和octave上都得到了
ans=0
@无匙:“R2018”不是MATLAB版本。它应该是R2018a或R2018b。