Pourquoi / quand devrais-je préférer MATLAB à Octave?

Dans notre opération très simple, nous devons prototyper des algorithmes dans un langage de niveau supérieur avant de nous engager dans une implémentation C sur du matériel embarqué.

Jusqu’à présent, nous avons utilisé MATLAB pour le faire, mais les coûts de licence commencent à se détériorer. Nous envisageons de porter notre code MATLAB sur Octave.

Y a-t-il une raison particulière pour ne pas le faire? Va-t-on rompre la compatibilité, surtout si nous avons des partenaires externes qui insistent pour utiliser MATLAB? Existe-t-il des pénalités de performance auxquelles nous pouvons nous attendre?

    En 2008, j’ai essayé de faire la même chose. J’ai rapidement remarqué les bouchons suivants:

    • Les boîtes à outils ne sont pas aussi complètes et moins bien testées. En particulier, la boîte à outils de traitement de l’image sur laquelle mon travail s’appuyait (le grand obstacle était que l’imtransform n’était pas implémenté).
    • Le débogueur et le profileur Octave étaient primitifs par rapport à Matlab.
    • Si vous travaillez avec d’autres, il peut être très difficile de les amener à changer.
    • Si vous utilisez des boîtes à outils tierces, vous êtes seul à les faire fonctionner.
    • Les plots d’Octave ne sont pas de qualité publication.

    Mais je dois dire que j’ai été généralement impressionné par la compatibilité d’Octave avec Matlab. Si votre utilisation de Matlab est basique, vous pourriez avoir de la chance. Enfin, c’était en 2008, dans deux ans, les choses peuvent changer beaucoup.

    Juste du haut de ma tête:

    1. Il y a beaucoup de boîtes à outils qu’Octave n’a pas, comme je l’ai découvert lorsque j’ai essayé de faire mes devoirs dans un cours Machine Learning il y a deux semestres.
    2. Octave a un débogueur bien inférieur. C’était presque impossible de travailler avec.
    3. Matlab est beaucoup plus rapide pour de nombreux types d’opérations.
    4. Les plots de Matlab sont beaucoup plus belles.
    5. Octave n’a pas d’interface graphique native. Il existe des interfaces graphiques pour Octave, mais elles sont inférieures à celle de Matlab.

    J’ai testé l’octave et le R aussi.

    En ce qui concerne l’octave: j’ai été très impressionné par la similarité de la syntaxe de l’octave. Il ne m’a pas fallu beaucoup de temps pour transporter mes scripts MATLAB en octave. Cependant, j’ai un problème particulier pour imprimer les marqueurs conjointement avec errorbar qui a été corrigé par Jarno Rajahalme au niveau de la table et pour changer la taille de la police xtick, solution que j’ai trouvée dans une réponse à la question. Il y a donc encore des bogues qui peuvent être surmontés avec un certain effort. Si vous rencontrez des problèmes, vous pouvez essayer nabble mailing forum: help-octave@octave.org. Par ailleurs, mon équipe ne peut pas s’y adapter (facile à utiliser), comme ils s’adaptent à MATLAB, et nous utilisons toujours MATLAB. Puisque MATLAB est construit sous gnuplot, une autre façon de corriger ses bogues consiste à éditer le fichier gnuplot généré. Le meilleur IDE que j’ai trouvé était QtOctave, que j’ai fait une courte critique dans “Remember Blog”.

    Concernant R: selon une étude de SciViews, la performance de R est supérieure à MATLAB et à l’octave. Je n’ai pas beaucoup d’expérience avec R. J’ai étudié le paquetage mclust pour écrire un chapitre de wikibook sur le clustering EM dans R. En passant, ils semblent avoir une communauté très active. Vous pouvez donc trouver des packages tiers pour les propositions, qui ne sont pas si standardisées pour l’OMI. Le meilleur IDE que j’ai trouvé était le plug-in StatET pour eclipse, JGR (interface graphique Java pour R) et emacs. Malgré le temps nécessaire pour apprendre un nouveau langage de programmation, si je choisissais une plate-forme open source pour réaliser mes graphiques d’expérience et certaines parsings d’exploration de données, j’essaierais R.

    Octave a plusieurs améliorations syntaxiques sur matlab, par exemple endif endfor et endfunction au lieu de simplement end , ce qui facilite le débogage.

    Octave vous permet également de générer des fonctions de manière dynamic et de définir plusieurs fonctions dans les scripts et les fichiers de fonctions. Ce qui est bien plus intéressant que l’approche one-file-one-function de matlab.

    Enfin, octave a parcellfun et pararrayfun qui sont des outils de traitement en parallèle très puissants qui manquent complètement à matlab. Il y a un parfor dans matlab, mais ce n’est pas la meilleure façon de le faire à mon avis.

    Les inconvénients pour l’octave sont qu’ils sont légèrement en retrait sur les boîtes à outils, mais si vous regardez, vous pouvez trouver des choses similaires. fsolve et lsode semblent un peu plus lentes, mais plus robustes, en octave pour une raison quelconque. De plus, le manque de liens symboliques et de boîtes à outils de DAQ est une grosse déception pour certaines personnes, mais de toute façon, ce genre de choses sera propriétaire.

    Python / Numpy vaut vraiment le coup: il est plus puissant mais sa syntaxe vise des parties de code plus complexes.

    Octave n’a pas de guide , ce qui rend la création d’interfaces graphiques très facile. J’utilise régulièrement un guide pour créer des outils pour mes collègues non-MATLAB.

    Pour votre cas d’utilisation, octave peut être supérieur à MATLAB:

    • Il a une syntaxe qui vous permettra d’écrire un code légèrement plus proche de C, à savoir + =, – =, les valeurs des parameters de la fonction par défaut, les chaînes de caractères entre guillemets, etc.

    • En supposant que vos puces sont plus lentes qu’un processeur de bureau, la vitesse ne sera probablement pas un problème.

    • Comme il se lance beaucoup plus rapidement que matlab, il est plus pratique de l’intégrer dans des scripts shell pour les tests.

    • Pour le prototypage, le tracé est plus que suffisant; les gens sont simplement habitués au style de MATLAB.

    • L’absence relative de boîtes à outils n’est pas un problème car elles ne seraient de toute façon pas disponibles sur votre plate-forme cible.

    J’utilise les deux, et chaque fois que je change, je manque des fonctionnalités de l’autre.

    Il existe un bon WikiBook sur MATLAB avec une liste de différences entre MATLAB et Octave .

    D’après mon expérience, le kernel MATLAB est bien porté sur Octave, mais les boîtes à outils ont différents niveaux de compatibilité, votre décision dépend donc de ce que vous essayez de coder.

    Certaines choses qui manquent à Octave, AFAIK, sont l’intégration étroite avec le code .NET et le générateur d’interface graphique, bien qu’il existe de nombreux autres outils d’interface graphique que Octave peut utiliser.

    En outre, comme d’autres l’ont souligné, l’essentiel de ce que vous payez avec MATLAB est l’interface de Slick et les outils de débogage / profilage. Les codeurs expérimentés peuvent probablement gérer les alternatives, mais les débutants peuvent avoir des difficultés.

    Il est intéressant de voir comment l’alternative open source fonctionne pour les statistiques, mais pas pour l’parsing numérique. R (l’octave des statistiques) est aujourd’hui beaucoup plus populaire que le S-plus commercial (le matlab des statistiques). Les problèmes mentionnés comme des raisons de ne pas abandonner le matlab dans les autres réponses étaient également applicables à R. Mais tout le monde commençait tout juste à consortingbuer et maintenant R est la norme, avec de meilleurs graphiques, de meilleurs paquets et plus de locking.

    Vous pouvez donc préférer l’octave au matlab, si vous pouvez dépasser le dilemme des prisonniers.

    Notez qu’Octave prend en charge les constructions de langage qui ne sont pas présentes dans Matlab (par exemple, les opérateurs à incrémentation automatique, les instructions à faire avant, etc.). Cela rend parfois le code de port développé (par quelqu’un qui ne connaît pas les limitations de Matlab) sur Octave dans un environnement Matlab.

    Il existe d’autres limitations / différences chez Octave FAQ .

    Vous devriez certainement préférer Matlab à Octave si vous pouvez vous le permettre.

    Je n’ai pas beaucoup d’expérience avec Octave, mais je m’attendrais à des problèmes si votre code utilise des boîtes à outils Matlab, des tracés fantaisistes ou des outils graphiques Matlab.

    Je m’attendrais à ce que ce soit comme OpenOffice vs MS Office. Principalement compatible, mais juste assez différent pour vous donner un mal de tête.

    J’ai réussi à porter des applications de régression linéaire et de programmation quadratique sur Octave.

    La régression linéaire (opérateur de barre oblique inverse) a fonctionné sans aucun ajustement. En cas de programmation quadratique, je devais passer de fmincon () à sqp () , donnant des résultats similaires.

    Pourtant, les boîtes à outils et les interfaces graphiques d’Octave sont en effet moins matures (j’ai passé tellement de temps sur des choses élémentaires), bien qu’elles aient progressé rapidement au cours des deux dernières années.