2010-02-11 5 views
38

Je dois écrire du code qui devrait fonctionner aussi bien dans Octave que dans MATLAB. Le problème est qu'il doit faire des choses sur l'interface graphique, que MATLAB et Octave manipulent complètement différemment.Comment détecter si j'utilise MATLAB ou Octave?

Y at-il un moyen que je peux détecter si j'utilise MATLAB ou Octave, afin d'appeler la bonne fonction?

Répondre

4

Matlab:

>> exist octave_config_info 
ans = 
    0 

Octave:

octave:3> exist octave_config_info 
ans = 5 
+0

C'est existe (« octave_config_info ») dans une instruction if pour l'Octave syntaxiquement contesté (comme moi) ... –

34

Vous pouvez utiliser le test suivant pour différencier Octave de Matlab:

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

Bonne idée, mais il serait mieux encapsulé dans une fonction. –

+0

merci @ BenoîtLegat pour l'édition – Amro

5

Je voudrais utiliser, par exemple, la commande ver, qui donne:

dans Matlab:


Version 7.7.0.471 Matlab (R2008b) Système d'exploitation: Linux 2.6.31-20-générique # 57 Ubuntu SMP Mon 8 février 09:05:19 UTC 2010 i686 Java VM version: Java 1.6.0_04 avec Sun Microsystems Inc. Java HotSpot (TM) en mode mixte VM client


Octave:


GNU Octave version 3.0.5 GNU Octave Licence: GNU General Public License Système d'exploitation: Linux 2.6.31-20-générique # 57 Ubuntu SMP Mon 8 février 09:05:19 UTC 2010 i686


Une autre possibilité est d'utiliser la fonction de licence.

20

Il y a aussi un hint dans le wiki sur le site octave.org officiel. Ils proposent ce qui suit:

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 
Questions connexes