如何检测I';我在运行MATLAB还是倍频程?
我需要编写的代码应该在八度音阶和MATLAB上都运行良好。问题是它需要做一些GUI的东西,而MATLAB和Octave处理这些东西的方式完全不同 是否有一种方法可以检测我是否正在运行MATLAB或Octave,以便调用正确的函数?在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区分开来:
>> 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。