Dans notre opération de shoestring, 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 utilisons MATLAB pour ce faire, mais les coûts de licence commencent à souffrir. Nous envisageons de porter notre code MATLAB sur Octave.
Y a-t-il une raison particulière pas pour le faire? Allons-nous rompre toute compatibilité, surtout si nous avons des partenaires externes qui insistent pour utiliser MATLAB? Y a-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:
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 aurez peut-être de la chance. Enfin c'était en 2008, en deux ans les choses peuvent changer beaucoup.
Juste au sommet de ma tête:
J'ai aussi testé l'octave et le R.
Concernant l'octave: J'ai été très impressionné par la similitude de la syntaxe d'octave. Il ne m'a pas fallu beaucoup de temps pour transporter mes scripts MATLAB en octave. En attendant, j'ai un problème particulier sur l'impression des marqueurs conjointement avec la barre d'erreur qui a été corrigé par Jarno Rajahalme à nabble et pour changer la taille de la police xtick, solution de contournement que j'ai obtenue dans une réponse à une question à nabble. Il a donc encore quelques bugs qui peuvent être résolus avec un certain effort. Si vous rencontrez des problèmes, vous pouvez essayer nabble mailing forum: [email protected]. Au fait, mon équipe ne peut pas s'y adapter (conviviale) comme elle s'adapte à MATLAB, nous utilisons donc toujours MATLAB. Puisque MATLAB est construit sous gnuplot, une autre façon de corriger ses bogues est d'éditer le fichier gnuplot généré. Le meilleur IDE je l'ai trouvé était QtOctave, que j'ai fait une courte revue dans "Remember Blog".
Concernant R: selon une recherche effectuée par SciViews, les performances de R sont supérieures à MATLAB et octave. Je n'ai pas beaucoup d'expérience avec R. J'ai étudié le paquetage mclust pour écrire un chapitre de wikibook sur EM Clustering in R. Au fait, ils semblent avoir une communauté très active. Vous pouvez donc trouver des packages tiers pour les propositions, qui ne sont pas si standardisés par l'OMI. Le meilleur IDE que j'ai trouvé était le plugin StatET pour Eclipse, JGR (Java GUI for R) et emacs. Malgré le temps nécessaire pour apprendre un nouveau langage de programmation, si je choisissais une plate-forme open source pour faire mes graphiques d'expérience et une analyse de l'exploration de données, je voudrais essayer R.
Octave a plusieurs améliorations syntaxiques sur matlab, par exemple, vous pouvez dire endif
endfor
et endfunction
au lieu de simplement end
, ce qui facilite le débogage.
Octave vous permet également de générer dynamiquement des fonctions et d'avoir plusieurs fonctions définies dans des scripts et des fichiers de fonctions. Ce qui est bien plus agréable que l'approche un-fichier-une-fonction de matlab.
Enfin, octave a parcellfun
et pararrayfun
qui sont des outils de traitement 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 de l'octave sont qu'ils sont légèrement en retard sur les boîtes à outils, mais si vous regardez, vous pouvez trouver des choses similaires. fsolve
et lsode
semblent un peu plus lents, mais plus robustes, en octave pour une raison quelconque. De plus, pour certaines personnes, un gros problème est généralement le manque de lien symbolique et de la boîte à outils DAQ, mais ce truc sera de toute façon propriétaire.
Python/Numpy vaut vraiment le détour: il est plus puissant mais leur syntaxe vise des morceaux de code plus complexes.
Octave n'a pas guide
, ce qui rend la création d'interfaces graphiques super facile. J'utilise régulièrement le guide pour fabriquer des outils pour mes non-MATLAB en utilisant des collègues.
Pour votre cas d'utilisation, l'octave peut être supérieure à MATLAB:
Il a une syntaxe qui vous permettra d'écrire du code légèrement plus proche de C. i.e. + =, - =, les valeurs des paramètres de fonction par défaut, les littéraux de chaîne entre guillemets doubles, etc ...
En supposant que vos puces sont plus lentes qu'un processeur de bureau, la vitesse ne sera probablement pas un problème.
Puisqu'il se lance beaucoup plus rapidement que matlab, il est plus pratique de l'intégrer dans les scripts Shell pour les tests.
Pour le prototypage, le tracé est plus que suffisant; les gens sont juste habitués au style de MATLAB.
Le manque relatif de boîtes à outils n'est pas un gros 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 y a un bon WikiBook sur MATLAB avec un liste des différences entre MATLAB et Octave .
D'après mon expérience, le noyau MATLAB est bien porté sur Octave, mais les boîtes à outils ont différents niveaux de compatibilité, donc votre décision dépend de ce que vous essayez de coder exactement.
Certaines choses qui manquent à Octave, AFAIK, sont l'intégration étroite avec le code .NET et le générateur de GUI, guide
(bien qu'il existe de nombreux autres outils de création de GUI qu'Octave peut utiliser).
En outre, comme d'autres l'ont souligné, une grande partie de ce que vous payez avec MATLAB est l'interface fluide et les outils de débogage/profilage. Les codeurs expérimentés peuvent probablement gérer les alternatives, mais les débutants peuvent avoir du mal.
Il est intéressant de voir comment l'alternative open source fonctionne pour les statistiques mais pas pour l'analyse numérique. R (l'octave des statistiques) est de nos jours beaucoup plus populaire que le S-plus commercial (le matlab des statistiques). Les problèmes mentionnés comme raisons de ne pas abandonner matlab trouvés dans les autres réponses étaient également applicables à R. Mais tout le monde commençait tout juste à contribuer et maintenant R est la norme, avec de meilleurs graphismes, de meilleurs packages et plus de blocage des fournisseurs.
Donc, vous pouvez également préférer l'octave au matlab, si vous pouvez surmonter 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 d'incrémentation automatique, les instructions do-till, etc.). Cela rend parfois ennuyeux de porter du code développé (par quelqu'un qui ne connaît pas les limitations de Matlab) sur Octave vers un environnement Matlab.
Il existe d'autres limitations/différences dans la FAQ Octave .
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 de fantaisie ou des interfaces graphiques Matlab.
Je m'attendrais à ce que ce soit comme OpenOffice vs MS Office. Généralement compatible, mais juste assez différent pour vous donner mal à la tête.
J'ai porté avec succès des applications de programmation de régression linéaire et quadratique sur Octave.
La régression linéaire (opérateur de barre oblique inverse) a fonctionné sans aucun ajustement. En cas de programmation quadratique, j'ai dû passer de fmincon () à sqp (), donnant des résultats similaires.
Pourtant, les boîtes à outils et l'interface graphique d'Octave sont, en effet, moins matures (j'ai passé beaucoup de temps sur des trucs de base), bien qu'il ait rapidement progressé au cours des deux dernières années.