Как я могу определить, использую ли я MATLAB или Octave?

38

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

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

Теги:
octave
portability

4 ответа

33

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

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
  • 0
    Хороший вызов, хотя он будет лучше инкапсулирован в функцию.
  • 0
    спасибо @ BenoîtLegat за редактирование
19

Существует также подсказка в вики на официальном сайте 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
  • 0
    @Spoonless: «R2018» не является версией MATLAB. Это должен быть R2018a или R2018b.
5

Я бы использовал, например, команду 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


Другая возможность - использовать функцию лицензии.

4

В Matlab:

>> exist octave_config_info
ans =
     0

В октаве:

octave:3> exist octave_config_info
ans =  5
  • 0
    Это существует ('octave_config_info') в операторе if для синтаксически оспариваемой октавы (как и я) ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню