Как я могу определить, что у меня работает MATLAB или Octave? - PullRequest
44 голосов
/ 11 февраля 2010

Мне нужно написать код, который должен одинаково хорошо работать в Octave и на MATLAB. Проблема в том, что он должен делать некоторые вещи с графическим интерфейсом, которые MATLAB и Octave обрабатывают совершенно по-разному.

Есть ли способ определить, использую ли я MATLAB или Octave, чтобы вызвать нужную функцию?

Ответы [ 4 ]

40 голосов
/ 11 февраля 2010

Вы можете использовать следующий тест, чтобы отличить Octave от MATLAB:

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
24 голосов
/ 23 марта 2012

Существует также подсказка в вики на официальном сайте octave.org. Они предлагают следующее:

Редактировать: Не все версии 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
5 голосов
/ 11 февраля 2010

Я бы использовал, например, команду ver, которая выдает:

в MATLAB:


MATLAB Версия 7.7.0.471 (R2008b) Операционная система: Linux 2.6.31-20-generic # 57-Ubuntu SMP Mon 8 февраля 09:05:19 UTC 2010 i686 Версия виртуальной машины Java: Java 1.6.0_04 с Sun Microsystems Inc. Java HotSpot (TM) Клиентская виртуальная машина смешанного режима


в Октаве:


GNU Octave Версия 3.0.5 Лицензия GNU Octave: Стандартная общественная лицензия GNU Операционная система: Linux 2.6.31-20-generic # 57-Ubuntu SMP Пн 8 февраля 09:05:19 UTC 2010 i686


Еще одна возможность - использовать функцию лицензии.

4 голосов
/ 11 февраля 2010

В Matlab:

>> exist octave_config_info
ans =
     0

В Октаве:

octave:3> exist octave_config_info
ans =  5
...