Come faccio a rilevare se sto correndo MATLAB o Octave?

Ho bisogno di scrivere il codice che deve essere eseguito altrettanto bene in Ottava e MATLAB. Il problema è che ha bisogno di fare qualche GUI roba, che MATLAB e Octave gestire in modo completamente diverso.

C’è un modo per rilevare se sto correndo MATLAB o Octave, per chiamare la funzione giusta?

OriginaleL’autore lindelof | 2010-02-11

4 Replies
  1. 35

    Si potrebbe utilizzare il seguente test per differenziare Ottava da MATLAB:

    isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
    Buona chiamata, anche se sarebbe meglio incapsulato in una funzione.
    grazie @BenoîtLegat per la modifica

    OriginaleL’autore Amro

  2. 20

    C’è anche un suggerimento nel wiki ufficiale di octave.org sito web.
    Si propongono le seguenti:

    Edit: Non tutte le versioni di Matlab supporto ‘#’ per i commenti così ho cambiato l’esempio di utilizzo di’%’, invece. Funziona in Matlab R2018 (Linux) e l’Ottava 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
    non è una MATLAB versione. Questo dovrebbe essere R2018a o R2018b.

    OriginaleL’autore Bernhardt Rogge

  3. 5

    Vorrei utilizzare, ad esempio, il comando ver, da cui si ricava:

    in MATLAB:


    MATLAB Versione 7.7.0.471 (R2008b)
    Sistema operativo: Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686
    Java VM Versione: Java 1.6.0_04 con Sun Microsystems Inc. Java HotSpot(TM) Client VM in modalità mista


    in Ottava:


    GNU Octave Versione 3.0.5
    GNU Octave Licenza: GNU General Public License
    Sistema operativo: Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686


    Un’altra possibilità è quella di utilizzare la licenza funzione.

    OriginaleL’autore jmbr

  4. 4

    In Matlab:

    >> exist octave_config_info
    ans =
         0

    In Ottava:

    octave:3> exist octave_config_info
    ans =  5
    Che esistono(‘octave_config_info’) in un’istruzione if per l’Ottava sintatticamente contestati (come me)…

    OriginaleL’autore Peter

Lascia un commento