Octave GNU - GNU Octave

Octave GNU
Gnu-octave-logo.svg
GNUOctave430.png
GNU Octave 4.3.0+ fonctionnant sous Linux
Développeur(s) John W. Eaton et bien d'autres
Première version 1988 ; il y a 33 ans ( 1988 )
Version stable
6.3.0 / 11 juillet 2021 ; il y a 3 mois ( 11 juillet 2021 )
Version préliminaire
6.0.90a / 28 août 2020 ; il y a 13 mois ( 2020-08-28 )
Dépôt
Écrit en C , C++ , Fortran
Système opérateur Windows , macOS , Linux , BSD
Disponible en 17 langues
Taper Calcul scientifique
Licence 2007 : GPL-3.0 ou plus tard
1992 : GPL-2.0 ou plus tard
Site Internet gnu .org /software /octave /

GNU Octave est un logiciel doté d'un langage de programmation de haut niveau , principalement destiné aux calculs numériques . Octave aide à résoudre numériquement des problèmes linéaires et non linéaires et à effectuer d'autres expériences numériques à l'aide d'un langage principalement compatible avec MATLAB . Il peut également être utilisé comme un langage orienté batch . Comme il fait partie du projet GNU , il s'agit d' un logiciel libre selon les termes de la licence publique générale GNU .

D'autres alternatives gratuites à MATLAB incluent Scilab et FreeMat . Octave est plus compatible avec MATLAB que Scilab et FreeMat n'a pas été mis à jour depuis juin 2013.

Histoire

Le projet a été conçu vers 1988. Au départ, il était destiné à accompagner un cours de conception de réacteurs chimiques. Le vrai développement a été lancé par John W. Eaton en 1992. La première version alpha remonte au 4 janvier 1993 et ​​le 17 février 1994, la version 1.0 est sortie. La version 4.0.0 est sortie le 29 mai 2015.

Le programme porte le nom d' Octave Levenspiel , ancien professeur de l'auteur principal. Levenspiel était connu pour sa capacité à effectuer des calculs rapides au dos de l'enveloppe .

Historique du développement

Temps action
1988/1989 1ères discussions (Livre et Logiciel)
Février 1992 Début du développement
janvier 1993 Actualités sur le Web (Version 0.60)
Février 1994 1ère parution (Version 1.0.0 à 1.1.1)
décembre 1996 2e publication (version 2.0.x) avec port Windows ( Cygwin )
mars 1998 Version 2.1
novembre 2004 Version 2.9 (version DEV de 3.0)
décembre 2007 Publication de la version 3.0 (Jalon)
juin 2009 Publication de la version 3.2 (Jalon)
8 février 2011 Version 3.4.0 (Jalon)
22 février 2012 Publication d'Octave 3.6.1 (Jalon)
31 décembre 2013 Publication d'Octave 3.8.0 (IHM expérimentale)
29 mai 2015 Version 4.0.0 (GUI stable et nouvelle syntaxe pour la POO )
14 novembre 2016 Version 4.2.0 (gnuplot 4.4+)
30 avril 2018 Version 4.4.0 (nouvel objectif pour GUI QT Toolkit, la boîte à outils FLTK n'est pas obsolète et il n'y a pas de calendrier pour sa suppression - bien qu'elle ne soit plus prioritaire)
1 mars 2019 Publication d'Octave 5.1.0 (QT5 préféré, Qt 4.8 minimum), support hiDpi
31 janvier 2020 Publication d'Octave 5.2.0 (QT5 de préférence)
26 novembre 2020 Publication d'Octave 6.1.0 (QT5 préféré, Qt 4.x déprécié pour suppression en 7)
20 février 2021 Publication d'Octave 6.2.0 (QT5 de préférence), correction de bug, prise en charge améliorée de la syntaxe matlab

Développements

En plus d'être utilisé sur des ordinateurs de bureau pour le calcul scientifique personnel, Octave est utilisé dans les universités et l'industrie. Par exemple, Octave a été utilisé sur un énorme ordinateur parallèle au Pittsburgh Supercomputing Center pour trouver des vulnérabilités liées à la devinette des numéros de sécurité sociale.

L'accélération avec OpenCL ou CUDA est également possible avec l'utilisation de GPU.

Détails techniques

Octave, la langue

Le langage Octave est un langage de programmation interprété. Il s'agit d'un langage de programmation structuré (similaire à C ) et prend en charge de nombreuses fonctions de bibliothèque standard C courantes , ainsi que certains appels et fonctions système UNIX . Cependant, il ne prend pas en charge le passage d'arguments par référence.

Les programmes Octave se composent d'une liste d'appels de fonction ou d'un script . La syntaxe est basée sur une matrice et fournit diverses fonctions pour les opérations matricielles. Il prend en charge diverses structures de données et permet une programmation orientée objet .

Sa syntaxe est très similaire à MATLAB, et une programmation minutieuse d'un script lui permettra de s'exécuter à la fois sur Octave et MATLAB.

Parce qu'Octave est disponible sous la licence publique générale GNU , il peut être librement modifié, copié et utilisé. Le programme fonctionne sur Microsoft Windows et la plupart Unix et Unix les systèmes d' exploitation , y compris Linux , Android et macOS .

Caractéristiques notables

Complétion de nom de commande et de variable

En tapant un caractère TAB sur la ligne de commande, Octave tente de compléter les noms de variables, de fonctions et de fichiers (similaire à la complétion de tabulation de Bash ). Octave utilise le texte avant le curseur comme partie initiale du nom à compléter.

Historique des commandes

Lors d'une exécution interactive, Octave enregistre les commandes saisies dans un tampon interne afin qu'elles puissent être rappelées et modifiées.

Structures de données

Octave inclut une quantité limitée de support pour l'organisation des données dans les structures. Dans cet exemple, nous voyons une structure "x" avec les éléments "a", "b" et "c", (respectivement un entier, un tableau et une chaîne) :

octave:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "string";
octave:2> x.a
ans =  1
octave:3> x.b
ans =

   1   2
   3   4

octave:4> x.c
ans = string
octave:5> x
x =
{
  a =  1
  b =

     1   2
     3   4

  c = string
}

Opérateurs booléens de court-circuit

Les opérateurs d' octave &&et ||logiques sont évalués en court-circuit (comme les opérateurs correspondants dans le langage C ), contrairement aux opérateurs élément par élément et . &|

Opérateurs d'incrémentation et de décrémentation

Octave inclut les opérateurs d'incrémentation et de décrémentation de type C ++et --sous leurs formes préfixe et suffixe. Octave fait aussi des devoirs augmentés , par ex x += 5.

Déroulez-protégez

Octave prend en charge une forme limitée de gestion des exceptions modelée sur celle unwind_protectde Lisp . La forme générale d'un bloc unwind_protect ressemble à ceci :

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

En règle générale, GNU Octave reconnaît comme terminaison d'un donné blocksoit le mot-clé end(qui est compatible avec le langage MATLAB) soit un mot-clé plus spécifique . En conséquence, un bloc peut être terminé soit avec le mot-clé comme dans l'exemple, soit avec le mot-clé plus portable . end_blockunwind_protectend_unwind_protectend

La partie nettoyage du bloc est toujours exécutée. Dans le cas où une exception est déclenchée par la partie body , le nettoyage est exécuté immédiatement avant de propager l'exception à l'extérieur du bloc unwind_protect.

GNU Octave prend également en charge une autre forme de gestion des exceptions (compatible avec le langage MATLAB) :

try
   body
catch
   exception_handling
end

Cette dernière forme diffère d'un unwind_protectbloc de deux manières. Premièrement, exception_handling n'est exécuté que lorsqu'une exception est levée par body . Deuxièmement, après l'exécution d' exception_handling, l'exception n'est pas propagée à l'extérieur du bloc (à moins qu'une rethrow( lasterror )instruction ne soit explicitement insérée dans le code exception_handling ).

Listes d'arguments de longueur variable

Octave a un mécanisme pour gérer les fonctions qui prennent un nombre indéterminé d'arguments sans limite supérieure explicite. Pour spécifier une liste de zéro ou plusieurs arguments, utilisez l'argument spécial varargincomme dernier (ou unique) argument de la liste.

function s = plus (varargin)
   if (nargin==0)
      s = 0;
   else
      s = varargin{1} + plus (varargin{2:nargin});
   end
end

Listes de retour de longueur variable

Une fonction peut être configurée pour renvoyer un nombre quelconque de valeurs en utilisant la valeur de retour spéciale varargout. Par exemple:

function varargout = multiassign (data)
   for k=1:nargout
      varargout{k} = data(:,k);
   end
end

Intégration C++

Il est également possible d'exécuter du code Octave directement dans un programme C++. Par exemple, voici un extrait de code pour appelerrand([10,1]) :

#include <octave/oct.h>
...
ColumnVector NumRands(2);
NumRands(0) = 10;
NumRands(1) = 1;
octave_value_list f_arg, f_ret;
f_arg(0) = octave_value(NumRands);
f_ret = feval("rand", f_arg, 1);
Matrix unis(f_ret(0).matrix_value());

Le code C et C++ peut être intégré dans GNU Octave en créant des fichiers oct ou en utilisant les fichiers MEX compatibles MATLAB .

Compatibilité MATLAB

Octave a été conçu pour la compatibilité MATLAB et partage de nombreuses fonctionnalités avec MATLAB :

  1. Les matrices comme type de données fondamental.
  2. Prise en charge intégrée des nombres complexes.
  3. Puissantes fonctions mathématiques intégrées et bibliothèques de fonctions étendues.
  4. Extensibilité sous forme de fonctions définies par l'utilisateur.

Octave traite l'incompatibilité avec MATLAB comme un bug ; par conséquent, il pourrait être considéré comme un clone de logiciel , qui n'enfreint pas le droit d' auteur du logiciel selon l' affaire judiciaire Lotus v. Borland .

Les scripts MATLAB du référentiel FileExchange de MathWorks sont en principe compatibles avec Octave. Cependant, alors qu'ils sont souvent fournis et téléchargées par les utilisateurs sous une octave compatible et appropriée open source licence BSD , les FileExchange Conditions d'utilisation interdisent toute utilisation à côté de MathWorks propriétaire Matlab.

Compatibilité syntaxique

Il y a quelques ajouts de syntaxe utiles, quoique mineurs :

  1. Les lignes de commentaires peuvent être précédées du caractère # ainsi que du caractère % ;
  2. Divers opérateurs basés sur C ++ , -- , += , *=, /= sont pris en charge ;
  3. Les éléments peuvent être référencés sans créer de nouvelle variable par indexation en cascade, par exemple [1:10](3) ;
  4. Les chaînes peuvent être définies avec le caractère guillemet double " ainsi que le caractère guillemet simple ' ;
  5. Lorsque le type de variable est simple (un nombre à virgule flottante simple précision), Octave calcule la « moyenne » dans le domaine simple (MATLAB en double domaine ) qui est plus rapide mais donne des résultats moins précis ;
  6. Les blocs peuvent également être terminés par des mots-clés de structure de contrôle plus spécifiques , c'est-à-dire endif, endfor, endwhile, etc.
  7. Les fonctions peuvent être définies dans les scripts et à l'invite d'Octave ;
  8. Présence d'une boucle do-until (similaire à do-while en C).

Compatibilité fonctionnelle

La plupart des nombreuses fonctions MATLAB, mais pas toutes, sont disponibles dans GNU Octave, certaines d'entre elles étant accessibles via des packages dans Octave Forge . Les fonctions disponibles dans le cadre des packages de base Octave ou Forge sont répertoriées en ligne .

Une liste des fonctions non disponibles est incluse dans la fonction Octave __unimplemented.m__. Les fonctions non implémentées sont également répertoriées sous de nombreux packages Octave Forge dans le Wiki Octave .

Lorsqu'une fonction non implémentée est appelée, le message d'erreur suivant s'affiche :

  octave:1> guide
  warning: the 'guide' function is not yet implemented in Octave

  Please read <http://www.octave.org/missing.html> to learn how you can contribute missing functionality.
  error: 'guide' undefined near line 1 column 1

Les interfaces des utilisateurs

Octave est livré avec une interface utilisateur graphique (GUI) officielle et un environnement de développement intégré (IDE) basé sur Qt . Il est disponible depuis Octave 3.8 et est devenu l'interface par défaut (sur l' interface de ligne de commande ) avec la sortie d'Octave 4.0. Il a été bien reçu par le contributeur d'EDN, qui a déclaré "[Octave] a maintenant une interface graphique très fonctionnelle."

Plusieurs frontaux graphiques tiers ont également été développés, comme ToolboX pour l'enseignement du codage.

applications GUI

Avec le code Octave, l'utilisateur peut créer des applications GUI Développement GUI (GNU Octave (version 6.3.0)) . Ci-dessous quelques exemples :

Bouton, champ de saisie, case à cocher

# create figure and panel on it
f = figure;
# create a button (default style)
b1 = uicontrol (f, "string", "A Button", "position",[10 10 150 40]);
# create an edit control
e1 = uicontrol (f, "style", "edit", "string", "editable text", "position",[10 60 300 40]);
# create a checkbox
c1 = uicontrol (f, "style", "checkbox", "string", "a checkbox", "position",[10 120 150 40]);

Zone de texte

prompt = {"Width", "Height", "Depth"};
defaults = {"1.10", "2.20", "3.30"};
rowscols = [1,10; 2,20; 3,30];
dims = inputdlg (prompt, "Enter Box Dimensions", rowscols, defaults);

Zone de liste avec des boîtes de message.

my_options = {"An item", "another", "yet another"};
[sel, ok] = listdlg ("ListString", my_options, "SelectionMode", "Multiple");
if (ok == 1)
  msgbox ("You selected:");
  for i = 1:numel (sel)
    msgbox (sprintf ("\t%s", my_options{sel(i)}));
  endfor
else
  msgbox ("You cancelled.");
endif

Boutons radio

# create figure and panel on it
f = figure;
# create a button group
gp = uibuttongroup (f, "Position", [ 0 0.5 1 1])
# create a buttons in the group
b1 = uicontrol (gp, "style", "radiobutton", "string", "Choice 1", "Position", [ 10 150 100 50 ]);
b2 = uicontrol (gp, "style", "radiobutton", "string", "Choice 2", "Position", [ 10 50 100 30 ]);
# create a button not in the group
b3 = uicontrol (f, "style", "radiobutton","string", "Not in the group","Position", [ 10 50 100 50 ]);

Paquets

Octave a également des forfaits disponibles gratuitement. Ces packages sont situés chez Octave-Forge Octave Forge - Packages . Les forfaits disponibles sont :

  • bim - Package pour résoudre les équations aux dérivées partielles de la réaction d'advection de diffusion (DAR)
  • bsltl - Le package BSLTL est une collection gratuite de routines OCTAVE/MATLAB pour travailler avec la technique du laser biospeckle
  • cgi - Interface de passerelle commune pour Octave
  • communications - Communications numériques, codes de correction d'erreurs (code de canal), fonctions de code source, champs de modulation et de Galois
  • control - Outils de conception de systèmes de contrôle assistés par ordinateur (CACSD) pour GNU Octave, basés sur la bibliothèque éprouvée SLICOT
  • data-smoothing - Algorithmes de lissage des données bruitées
  • base de données - Interface vers les bases de données SQL, actuellement uniquement postgresql utilisant libpq
  • dataframe - Boîte à outils de manipulation de données similaire aux données R
  • dicom - Fichier de communications numériques en médecine (DICOM) io
  • divand - divand effectue une analyse variationnelle n-dimensionnelle (interpolation) d'observations arbitrairement localisées
  • doctest - Le paquet Octave-Forge Doctest trouve des blocs d'exemples de code spécialement formatés dans les fichiers de documentation
  • économétrie - Fonctions économétriques, y compris les techniques basées sur MLE et GMM
  • fem-fenics - pkg pour la résolution d'équations aux dérivées partielles basées sur fenics
  • financier - Simulation Monte Carlo, routines d'évaluation des options, manipulation financière, fonctions de traçage et outils de manipulation de date supplémentaires
  • ajustements - Le package Octave-FITS fournit des fonctions de lecture et d'écriture de fichiers FITS (Flexible Image Transport System)
  • fpl - Collection de routines pour exporter des données produites par des éléments finis ou des simulations de volumes finis dans des formats utilisés par certains programmes de visualisation
  • fuzzy-logic toolkit - Une boîte à outils de logique floue principalement compatible avec MATLAB pour Octave (échec de l'installation en raison d'un bogue de longue date)
  • ga - Code d'optimisation génétique
  • general - Outils généraux pour Octave
  • generate_html - Ce paquet fournit des fonctions pour générer des pages HTML qui contiennent les textes d'aide pour un ensemble de fonctions
  • géométrie - Bibliothèque pour le calcul géométrique étendant les fonctions MatGeom
  • gsl - Liaisons d' octave à la bibliothèque scientifique GNU
  • image - Le package Octave-forge Image fournit des fonctions de traitement d'images
  • acquisition d'images - Le package d'acquisition d'images Octave-forge fournit des fonctions pour capturer des images à partir d'appareils connectés
  • instrument-control - Fonctions d'E/S de bas niveau pour les interfaces série, i2c, parallèle, tcp, gpib, vxi11, udp et usbtmc
  • interval - Le package d'intervalle pour l'arithmétique d'intervalle à valeur réelle permet d'évaluer des fonctions sur des sous-ensembles de leur domaine
  • io - Entrée/Sortie dans des formats externes, par exemple Excel
  • level-set - Routines pour calculer l'évolution temporelle de l'équation de level-set et extraire les informations géométriques de la fonction de level-set
  • linear-algebra - Code d'algèbre linéaire supplémentaire, y compris les fonctions générales SVD et matricielles
  • lssa - Un package mettant en œuvre des outils pour calculer les décompositions spectrales de séries temporelles irrégulièrement espacées
  • ltfat - La grande boîte à outils d'analyse temps/fréquence (LTFAT) est une boîte à outils MATLAB/Octave pour travailler avec l'analyse temps-fréquence, les ondelettes et le traitement du signal
  • cartographie - Cartographie simple et fonctions SIG .shp et fichier raster
  • mataveid - Package d'identification du système pour MATLAB et GNU Octave
  • matavecontrol - Boîte à outils de contrôle pour MATLAB et GNU Octave
  • divers - Outils divers qui ne conviendraient nulle part ailleurs
  • mpi - Liaisons d' octave pour les fonctions de base de l'interface de passage de messages (MPI) pour le calcul parallèle
  • msh - Créer et gérer des maillages triangulaires et tétraédriques pour les solveurs d'éléments finis ou de volumes finis PDE
  • mvn - Clustering de distribution normale multivariée et fonctions utilitaires
  • nan - Une boîte à outils de statistiques et d'apprentissage automatique pour les données avec et sans valeurs manquantes
  • ncarray - Accéder à un seul ou à une collection de fichiers NetCDF sous forme de tableau multidimensionnel
  • netcdf - Une interface NetCDF compatible MATLAB pour Octave
  • nurbs - Collection de routines pour la création et la manipulation de B-Splines rationnelles non uniformes (NURBS), basées sur la boîte à outils NURBS de Mark Spink
  • ocs - Package pour résoudre les équations de circuits électriques DC et transitoires
  • octclip - Ce package permet aux utilisateurs d'effectuer des opérations booléennes avec des polygones à l'aide de l'algorithme Greiner-Hormann
  • octproj - Ce paquet permet aux utilisateurs d'appeler des fonctions de PROJ
  • optique - Fonctions couvrant divers aspects de l'optique
  • optim - Boîte à outils d'optimisation non linéaire
  • optimiinterp - Une boîte à outils d'interpolation optimale pour l'octave
  • parallèle - package d'exécution parallèle
  • quaternion - package Quaternion pour GNU Octave, inclut une classe quaternion avec des opérateurs surchargés
  • file d'attente - Le package de mise en file d'attente fournit des fonctions pour les réseaux de mise en file d'attente et l'analyse des chaînes de Markov
  • secs1d - Un simulateur de dérive-diffusion pour les dispositifs semi-conducteurs 1d
  • secs2d - Un simulateur de dérive-diffusion pour les dispositifs semi-conducteurs 2D
  • secs3d - Un simulateur de dérive-diffusion pour les dispositifs semi-conducteurs 3D
  • signal - Outils de traitement du signal, y compris les fonctions de filtrage, de fenêtrage et d'affichage
  • sockets - Fonctions de socket pour la mise en réseau à partir d'une octave
  • sparsersb - Interface vers le package librsb implémentant le format de matrice creuse RSB pour des calculs rapides de matrice creuse en mémoire partagée
  • splines - Fonctions splines supplémentaires
  • statistiques - Fonctions statistiques supplémentaires pour Octave
  • stk - Le STK est une (pas si) petite boîte à outils pour le krigeage
  • strings - Fonctions supplémentaires pour la manipulation et l'analyse des chaînes
  • struct - Fonctions supplémentaires de manipulation de structure
  • symbolique - Le package Octave-Forge Symbolic ajoute des fonctionnalités de calcul symbolique à GNU Octave
  • tisean - Port de TISEAN 3
  • tsa - Concepts stochastiques et méthodes d'entropie maximale pour l'analyse de séries chronologiques
  • vibes - L'API VIBes permet d'afficher facilement les résultats (boîtes, pavages) des méthodes d'intervalle
  • vidéo - Un wrapper pour libavformat et libavcodec de ffmpeg, implémentant addframe, avifile, aviinfo et aviread
  • vrml - graphiques 3D utilisant VRML
  • windows - Fournit une interface COM et des fonctionnalités supplémentaires sur Windows
  • zeromq - Liaisons ZeroMQ pour GNU Octave

Voir également

Remarques

Les références

Lectures complémentaires

Liens externes