2010-02-11 7 views
38

Ich muss Code schreiben, der in Octave und auf MATLAB gleich gut laufen sollte. Das Problem ist, dass es einige GUI-Sachen machen muss, die MATLAB und Octave komplett anders handhaben.Wie erkenne ich, ob ich MATLAB oder Octave leite?

Gibt es eine Möglichkeit zu erkennen, ob ich MATLAB oder Octave benutze, um die richtige Funktion aufzurufen?

Antwort

4

In Matlab:

>> exist octave_config_info 
ans = 
    0 

In Octave:

octave:3> exist octave_config_info 
ans = 5 
+0

das ist vorhanden (‚octave_config_info‘) in einer if-Anweisung für die Octave syntaktisch in Frage gestellt (wie mich) ... –

34

Sie den folgenden Test Octave von MATLAB zu unterscheiden verwenden:

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

Guter Ruf, obwohl es besser in einer Funktion eingekapselt werden würde. –

+0

danke @ BenoîtLegat für die Bearbeitung – Amro

5

Ich würde verwenden, zum Beispiel, der Ver-Befehl, der ergibt:

in MATLAB:


MATLAB Version 7.7.0.471 (R2008b) Betriebssystem: Linux 2.6.31-20-generiC# 57-Ubuntu SMP Mo 8. Februar 09.05.19 UTC 2010 i686 Java VM Version: Java 1.6.0_04 mit Sun Microsystems Inc. Java HotSpot (TM) Client VM gemischten Modus


in Octave:


GNU Octave Version 3.0.5 GNU Octave Lizenz: GNU General Public License Betriebssystem: Linux 2.6.31-20-generiC# 57-Ubuntu SMP Mo 8. Februar 09.05.19 UTC 2010 i686


Eine weitere Möglichkeit ist das zu verwenden, Lizenzfunktion.

20

Es gibt auch eine hint im Wiki auf der offiziellen octave.org Website. Sie schlagen vor, die folgenden:

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