2010-02-11 12 views
38

Ho bisogno di scrivere codice che dovrebbe funzionare altrettanto bene in Octave e su MATLAB. Il problema è che ha bisogno di fare alcune cose della GUI, che MATLAB e Octave gestiscono in modo completamente diverso.Come posso rilevare se sto eseguendo MATLAB o Octave?

C'è un modo che posso rilevare se sto eseguendo MATLAB o Octave, al fine di chiamare la funzione giusta?

risposta

4

in Matlab:

>> exist octave_config_info 
ans = 
    0 

In Octave:

octave:3> exist octave_config_info 
ans = 5 
+0

Quel esistono ('octave_config_info') in un'istruzione if per l'ottava sintatticamente sfidato (come me) ... –

34

è possibile utilizzare il seguente test per differenziare Octave da MATLAB:

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0; 
+0

Buona chiamata, anche se sarebbe stato meglio incapsulato in una funzione. –

+0

grazie @ BenoîtLegat per la modifica – Amro

5

vorrei utilizzare, ad esempio, il comando ver, che restituisce:

in MATLAB:


MATLAB versione 7.7.0.471 (R2008b) Sistema operativo: Linux 2.6.31-20-generiC# 57-Ubuntu SMP Lun 8 febbraio 09:05:19 UTC 2010 i686 Java VM versione: Java 1.6.0_04 con Sun Microsystems Inc. Java HotSpot (TM) Cliente VM modalità mista


in Octave:


GNU Octave versione 3.0.5 GNU Octave licenza: GNU General Public License Sistema operativo: Linux 2.6.31-20-generiC# 57-Ubuntu SMP Lun 8 febbraio 09:05:19 UTC 2010 i686


Un'altra possibilità è quella di utilizzare il funzione di licenza.

20

C'è anche un hint nella wiki sul sito ufficiale di octave.org. Essi propongono il seguente:

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