Мне нужно написать код, который должен работать одинаково хорошо в Octave и на MATLAB. Проблема в том, что ему нужно сделать некоторые файлы GUI, которые MATLAB и Octave обрабатывают совершенно по-другому.
Есть ли способ определить, выполняю ли я MATLAB или Octave, чтобы вызвать правильную функцию?
Вы можете использовать следующий тест, чтобы отличить Octave от MATLAB:
isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
Существует также подсказка в вики на официальном сайте octave.org. Они предлагают следующее:
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
Я бы использовал, например, команду ver, которая дает:
в MATLAB:
MATLAB Version 7.7.0.471 (R2008b) Операционная система: Linux 2.6.31-20-generiС# 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
в октаве:
GNU Octave версии 3.0.5 Лицензия GNU Octave: общая общедоступная лицензия GNU Операционная система: Linux 2.6.31-20-generiС# 57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686
Другая возможность - использовать функцию лицензии.
В Matlab:
>> exist octave_config_info
ans =
0
В октаве:
octave:3> exist octave_config_info
ans = 5