1. Notions de base MATLAB et GNU Octave

1.1 Introduction

1.1.1 Qu'est-ce que MATLAB et GNU Octave ?

MATLAB

MATLAB est un logiciel commercial de calcul numérique/scientifique, visualisation et programmation performant et convivial développé par la société The MathWorks Inc. À ne pas confondre cependant avec les outils de calcul symbolique ou formel (tels que les logiciels commerciaux Mathematica ou Maple, ou le logiciel libre Maxima).

Le nom de MATLAB vient de MATrix LABoratory, les éléments de données de base manipulés par MATLAB étant des matrices de dimension quelconque (tableaux n-D, pouvant se réduire à des matrices 2D, vecteurs et scalaires) qui ne nécessitent ni déclaration de type ni dimensionnement (typage dynamique). Contrairement aux langages de programmation classiques (scalaires), les opérateurs et fonctions MATLAB permettent de manipuler directement ces tableaux (donc la plupart du temps sans programmer de boucles), rendant ainsi MATLAB particulièrement efficace en calcul numérique, analyse et visualisation de données en particulier.

Mais MATLAB est aussi un environnement de développement (progiciel) à part entière : son langage de haut niveau, doté notamment de structures de contrôles, fonctions d'entrée-sortie et de visualisation 2D et 3D, outils de construction d'interface utilisateur graphique (GUI)... permet à l'utilisateur d'élaborer ses propres fonctions ainsi que de véritables programmes (M-files) appelés scripts vu le caractère interprété de ce langage.

MATLAB est disponible sur les systèmes d'exploitation standards (Windows, GNU/Linux, macOS...). Le champ d'application de MATLAB peut être étendu aux systèmes non linéaires> et aux problèmes associés de simulation avec le produit complémentaire SIMULINK. Les capacités de MATLAB peuvent en outre être enrichies par des fonctions plus spécialisées regroupées au sein de dizaines de toolboxes (boîtes à outils qui sont des collections de M-files) couvrant des domaines nombreux et variés tels que :

Une interface de programmation applicative (API) rend finalement possible l'interaction entre MATLAB et les environnements de développement classiques (exécution de routines C ou Fortran depuis MATLAB, ou accès aux fonctions MATLAB depuis des programmes C ou Fortran).

Ces caractéristiques (et d'autres encore) font aujourd'hui de MATLAB un standard incontournable en milieu académique, dans la recherche et l'industrie.

GNU Octave, et autres alternatives à MATLAB

MATLAB est cependant un logiciel commercial fermé et qui coûte cher (frais de licence), même aux conditions académiques. Mais la bonne nouvelle, c'est qu'il existe des logiciels libres/open-source analogues voire même totalement compatibles avec MATLAB, donc gratuits et multiplateformes : Dans des domaines voisins, on peut mentionner les logiciels libres suivants :

1.1.2 Quelques caractéristiques fondamentales de MATLAB et GNU Octave

À ce stade de la présentation, nous voulons insister sur quelques caractéristiques de base fondamentales de MATLAB et GNU Octave :

1.2 GNU Octave versus MATLAB

GNU Octave, associé aux packages Octave-Forge, se présente donc comme le logiciel libre/open-source le plus compatible avec MATLAB. Outre l'apprentissage de MATLAB/Octave, l'un des objectifs de ce support de cours est de vous montrer les similitudes entre Octave-Forge et MATLAB. Il subsiste cependant quelques différences que nous énumérons sommairement ci-dessous. Celles-ci s'atténuent avec le temps, étant donné qu'Octave évolue dans le sens d'une toujours plus grande compatibilité avec MATLAB, que ce soit au niveau du noyau de base ou des "packages" Octave-Forge (voir chapitre "Les packages Octave-Forge") implémentant les fonctionnalités des "toolboxes" MATLAB les plus courantes.

Caractéristiques propres à MATLAB :

Caractéristiques propres à Octave-Forge :

Jusqu'à récemment, les usagers de MATLAB dédaignaient GNU Octave en raison de l'absence d'interface utilisateur graphique (GUI). Ce reproche n'est plus valable depuis la version 3.8 qui implémente, avec Octave GUI, un IDE complet (file browser, workspace, history, éditeur/debugger...).

1.3 Démarrer et quitter MATLAB ou Octave, prologues et épilogues, interface graphique

1.3.1 Démarrer et quitter MATLAB ou Octave

Lancement de MATLAB ou Octave sous Windows :
Vous trouvez bien entendu les raccourcis de lancement MATLAB et Octave dans le menu Démarrer > Tous les programmes...

Dans les salles d'enseignement EPFL-ENAC-SSIE sous Windows, les raccourcis se trouvent sous :

Dans les salles d'enseignement EPFL-ENAC-SGC sous Windows, ils se trouvent sous :
Lancement de MATLAB ou Octave sous Linux :
Sous Ubuntu avec Unity, vous disposez des lanceurs MATLAB et GNU Octave dans le "Dash" (en frappant la touche super ou touche windows). Ils démarrent ces logiciels en mode interface graphique. Vous pouvez ensuite ancrer ces lanceurs dans votre propre barre de lanceurs.

Lancement depuis une fenêtre terminal (shell) :

Si l'exécutable matlab ou octave n'est pas trouvé, complétez le PATH de recherche de votre shell par le chemin complet du répertoire où est installé MATLAB/Octave, ou définissez un alias de lancement intégrant le chemin du répertoire d'installation.

Sortie de MATLAB ou Octave :

1.3.2 Répertoire de travail de base, prologues et épilogues

Répertoire de travail de base

Le "répertoire de travail de base" est celui dans lequel MATLAB ou Octave vous place au début d'une session. Il s'agit par défaut du "répertoire utilisateur de base" (appelé home), donc /home/votre_username sous Linux, /Users/votre_username sous macOS, Z:\ sous Windows dans les salles ENAC-SSIE...

Si vous désirez changer automatiquement le répertoire de travail MATLAB/Octave au démarrage :

Prologues

Le mécanisme des "prologues" permet à l'utilisateur de faire exécuter automatiquement par MATLAB/Octave un certain nombre de commandes en début de session. Il est implémenté sous la forme de scripts (M-files). Le prologue est très utile lorsque l'on souhaite configurer certaines options, par exemple :

Lorsque MATLAB démarre, il passe successivement par les échelons de prologues suivants :

Lorsque Octave démarre, il passe successivement par les échelons de prologues suivants :

Épilogues

S'agissant des épilogues MATLAB et Octave, il s'agit du mécanisme automatiquement invoqué lorsque l'on termine une session :

1.3.3 Interface graphique et IDE de MATLAB

MATLAB intègre depuis longtemps un IDE (Integrated Development Environment), c'est-à-dire une interface graphique (GUI) se composant, en plus de la console de base et des fenêtres de graphiques, de diverses sous-fenêtres, d'un bandeau de menus et d'une barre d'outils (voir illustration ci-dessous).


Interface graphique et IDE de MATLAB R2014 (ici sous Windows)

Les différents réglages MATLAB s'effectuent au moyen du bouton Preferences

Cette interface graphique offre les sous-fenêtres suivantes :

1.3.4 Interface graphique et IDE de GNU Octave

GNU Octave n'a longtemps été utilisable (en usage interactif ou lancement de scripts) que depuis une fenêtre de terminal. Dès 2014 une interface graphique officielle très attendue, nommée Octave GUI (Octave Graphical User Interface), voit le jour sous Octave 3.8. Elle se compose, en plus de la console de base et des fenêtres de graphiques, de diverses sous-fenêtres, d'une barre de menus et d'une barre d'outils (voir illustration ci-dessous).


Interface graphique et IDE de GNU Octave 4.0 (ici sous Windows)

Les différents réglages de Octave GUI s'effectuent via le menu Edit > Preferences

Cette interface graphique offre les sous-fenêtres suivantes :


Pour mémoire, d'autres tentatives de développement d'interfaces graphiques à Octave (voire même d'IDE's complets) ont existé par le passé et sont encore parfois utilisées (notamment QtOctave), généralement sous Linux et parfois sous Windows :  

1.4 Outils d'aide et d'information, références internet utiles

1.4.1 Aide en ligne

help fonction
Affiche, dans la fenêtre de commande MATLAB/Octave, la syntaxe et la description de la fonction MATLAB/Octave spécifiée. Le mode de défilement, continu (c'est le défaut dans MATLAB) ou "paginé" (défaut dans Octave), peut être modifié avec la commande more on|off (voir plus bas)
Passée sans paramètres, la commande help liste les rubriques d'aide principales (correspondant à la structure de répertoires définie par le path)
helpwin fonction, ou doc sujet, ou menu Help ou icône ? du bandeau MATLAB
Même effet que la commande help, sauf que le résultat est affiché dans la fenêtre d'aide spécifique MATLAB "Help" (voir illustration ci-dessous)


Fenêtre d'aide MATLAB R2014 (ici sous Windows)

doc sujet
Sous Octave, cette commande recherche et affiche l'information relative au sujet désiré à partir du manuel Octave. Avec Octave GUI, le résultat est affiché dans la fenêtre de l'onglet "Documentation" qui offre un mécanisme de navigation par hyper-liens.


Fenêtre de documentation GNU Octave 4.0 (ici sous Windows)

lookfor {-all} mot-clé
Recherche par mot-clé dans l'aide MATLAB/Octave. Cette commande retourne la liste de toutes les fonctions dont le mot-clé spécifié figure dans la première ligne (H1-line) de l'aide.
Avec l'option -all, la recherche du mot-clé spécifié s'effectue dans l'entier des textes d'aide et pas seulement dans leurs 1ères lignes (H1-lines); prend donc passablement plus de temps et retourne davantage de références (pas forcément en relation avec ce que l'on cherche...)

Ex: help inverse retourne dans MATLAB l'erreur comme quoi aucune fonction "inverse" n'existe ; par contre lookfor inverse présente la liste de toutes les fonctions MATLAB/Octave en relation avec le thème de l'inversion (notamment la fonction inv d'inversion de matrices)

Accès au Manuel Octave complet (HTML)
Avec Help > Documentation > Online, ou via ce lien
Dans les salles ENAC-SSIE sous Windows avec Démarrer > Tous les programmes > Math & Stat > Octave x.x > Documentation, puis sous-menus HTML ou PDF
Voyez en particulier, vers la fin de la table des matières, le "Function Index" qui est un index hyper-texte de toutes les fonctions Octave

Voyez aussi ce Octave Quick Reference Card (aide-mémoire en 3 pages, PDF) ainsi que cette FAQ

1.4.2 Exemples et démos

demo { type { nom } }
Liste dans la fenêtre Help Browser les exemples/démos liés au type et nom de produit spécifié

Ex : demo matlab : liste les démos de base MATLAB ; demo toolbox statistics : liste les démos associées à la toolbox statistics

demo('fonction', {N} )
Exécute les démos interactives (ou la Nème démo) liée(s) à la fonction spécifiée

Ex : demo('plot') : affiche des démos relatives à la fonction plot

rundemos(package)
Exécute les démos définies dans le répertoire du package spécifié (les packages sont sous OCTAVE_HOME/share/octave/packages/package)

Ex : rundemos('signal-version') : lance les démos du package "signal" (traitement de signaux) dans la version spécifiée (faites pkg list pour connaître le version de package installée)

1.4.3 Ressources Internet utiles relatives à MATLAB et Octave

Sites Web

Forums de discussion, mailing-lists, wikis, blogs



La commande info affiche sous Octave différentes sources de contact utiles : mailing list, wiki, packages, bugs report...

1.5 Types de nombres (réels/complexes, entiers), variables, expressions, fonctions

1.5.1 Types réels, double et simple précision

De façon interne (c'est-à-dire en mémoire=>workspace, et sur disque=>MAT-files), MATLAB/Octave stocke par défaut tous les nombres en virgule flottante "double précision" (au format IEEE qui occupe 8 octets par nombre, donc 64 bits). Les nombres ont donc une précision finie de 16 chiffres décimaux significatifs, et une étendue allant de 10-308 à 10+308. Cela permet donc de manipuler, en particulier, des coordonnées géographiques.

Les nombres réels seront saisis par l'utilisateur selon les conventions de notation décimale standard (si nécessaire en notation scientifique avec affichage de la puissance de 10)
      Ex de nombres réels valides : 3, -99, 0.000145, -1.6341e20, 4.521e-5

Il est cependant possible de définir des réels en virgule flottante "simple précision", donc stockés sur des variables occupant 2 fois moins d'espace en mémoire (4 octets c-à-d. 32 bits), donc de précision deux fois moindre (7 chiffres décimaux significatifs, et une étendue allant de 10-38 à 10+38). On utilise pour cela la fonction de conversion single( nombre | variable ), ou en ajoutant le paramètre 'single' à certaines fonctions telles que ones, zeros, eye... De façon inverse, la fonction de conversion double(variable) retourne, sur la base d'une variable simple précision, un résultat double précision. ATTENTION cependant : lorsque l'on utilise des opérateurs ou fonctions mélangeant des opérandes/paramètres de types simple et double précision, le résultat retourné sera toujours de type simple précision. Vous pouvez vérifier cela en testant vos variables avec la commande whos.

      Ex • l'expression 3 * ones(2,2) retourne une matrice double précision
      • mais les expressions single(3) * ones(2,2) ou 3 * ones(2,2,'single') ou single(3 * ones(2,2)) retournent toutes une matrice simple précision

Si vous lisez des données numériques réelles à partir d'un fichier texte et désirez les stocker en simple précision, utilisez la fonction textscan avec le format %f32 (32 bits, soit 4 octets). Le format %f64 est synonyme de %f et génère des variables de double précision (64 bits, soit 8 octets).

1.5.2 Types entiers, 64/32/16/8 bits

On vient de voir que MATLAB/Octave manipule par défaut les nombres sous forme réelle en virgule flottante (double précision ou, sur demande, simple précision). Ainsi l'expression nombre = 123 stocke de façon interne le nombre spécifié sous forme de variable réelle double précision, bien que l'on ait saisi un nombre entier.

Il est cependant possible de manipuler des variables de types entiers, respectivement :
      •  8 bits : nombre stocké sur 1 octet ; si signé, étendue de -128 (-2^7) à 127
      • 16 bits : nombre stocké sur 2 octets ; si signé, étendue de -32'768 (-2^15) à 32'767
      • 32 bits : nombre stocké sur 4 octets ; si signé, étendue de -2'147'483'648 (-2^31) à 2'147'483'647 (9 chiffres)
      • 64 bits : nombre stocké sur 8 octets ; si signé, étendue de -9'223'372'036'854'775'808 (-2^63) à 9'223'372'036'854'775'807 (18 chiffres)
Les opérations arithmétiques sur des entiers sont plus rapides que les opérations analogues réelles.

On dispose, pour cela, des possibilités suivantes :

IMPORTANT : Lorsque l'on utilise des opérateurs ou fonctions mélangeant des opérandes/paramètres de types entier et réels (double ou simple précision), le résultat retourné sera toujours de type entier ! Si l'on ne souhaite pas ça, il faut convertir au préalable l'opérande entier en réel double précision (avec double(entier)) ou simple précision (avec single(entier)) !

Sous MATLAB, certaines opérations mixant des données de type réel avec des données de type entier 64 bits ne sont pas autorisées. Ainsi l'expression 13.3 * int64(12) génère une erreur.

      Ex :
      • int8(-200) retourne -128 (valeure minimale signée pour int8),   int8(-4.7) retourne -5,   int8(75.6) retourne 76,   int8(135) retourne 128 (valeure maximale signée pour int8)
      • uint8(-7) retourne 0 (valeure minimale non signée pour int8),   uint8(135.2) retourne 135,   uint8(270) retourne 255 (valeure maximale non signée pour int8)
      • si a=uint8(240), a/320 retourne 0, alors que single(a)/320 retourne 0.75000
      • la série indices1=int8(1:100) occupe 8x moins de place en mémoire (100 octets) que la série indices2=1:100 (800 octets)
      • 4.6 * ones(2,2,'int16') retourne une matrice de dimension 2x2 remplie de chiffres 5 stockés chacun sur 2 octets (entiers 16 bits)

Si vous lisez des données numériques entières à partir d'un fichier texte et désirez les stocker sur des entiers et non pas sur des réels double précision, utilisez la fonction textscan avec l'un des formats suivants :

1.5.3 Nombres complexes

MATLAB/Octave est aussi capable de manipuler des nombres complexes (stockés de façon interne sous forme de réels double precision, mais sur 2x 8 octets, respectivement pour la partie réelle et la partie imaginaire)
      Ex de nombres complexes valides (avec partie réelle et imaginaire) : 4e-13 - 5.6i, -45+5*j

Le tableau ci-dessous présente quelques fonctions MATLAB/Octave relatives aux nombres complexes.

Fonction Description
real(nb_complexe)
imag(nb_complexe)
Retourne la partie réelle du nb_complexe spécifié,
respectivement sa partie imaginaire

Ex: real(3+4i) retourne 3, et imag(3+4i) retourne 4

conj(nb_complexe) Retourne le conjugué du nb_complexe spécifié

Ex: conj(3+4i) retourne 3-4i

abs(nb_complexe) Retourne le module du nb_complexe spécifié

Ex: abs(3+4i) retourne 5

arg(nb_complexe) Retourne l'argument du nb_complexe spécifié

Ex: arg(3+4i) retourne 0.92730

isreal(var), iscomplex(var) Permet de tester si l'argument (sclaire, tableau) contient des nombres réels ou complexes

1.5.4 Conversion de nombres de la base 10 dans d'autres bases

Notez que les nombres, dans d'autres bases que la base 10, sont ici considérés comme des chaînes (str_binaire, str_hexa, str_baseB) !

1.5.5 Généralités sur les variables et expressions

Les variables créées au cours d'une session (interactivement depuis la fenêtre de commande MATLAB/Octave ou par des M-files) résident en mémoire dans ce que l'on appelle le "workspace" (espace de travail, voir chapitre "Workspace MATLAB/Octave"). Comme déjà dit, le langage MATLAB ne requiert aucune déclaration préalable de type de variable et de dimension de tableau/vecteur (typage dynamique). Lorsque MATLAB/Octave rencontre un nouveau nom de variable, il crée automatiquement la variable correspondante et y associe l'espace mémoire nécessaire dans le workspace. Si la variable existe déjà, MATLAB/Octave change son contenu et, si nécessaire, lui alloue un nouvel espace mémoire en cas de redimensionnement de tableau. Les variables sont définies à l'aide d'expressions.

Un nom de variable valide consiste en une lettre suivie de lettres, chiffres ou caractères souligné "_". Les lettres doivent être dans l'intervalle a-z et A-Z, donc les caractères accentués ne sont pas autorisés. MATLAB (mais pas Octave) n'autorise cependant pas les noms de variable dépassant 63 caractères (voir la fonction namelengthmax).
      Ex: noms de variables valides : x_min, COEFF55a, tres_long_nom_de_variable
      Ex: noms non valides : 86ab (commence par un chiffre), coeff-555 (est considéré comme une expression), temp_mesurée (contient un caractère accentué)

Les noms de variable sont donc case-sensitive (distinction des majuscules et minuscules).
      Ex: MAT_A désigne une matrice différente de mat_A

Pour se référer à un ensemble de variables (principalement avec commandes who, clear, save...), on peut utiliser les caractères de substitution * (remplace 0, 1 ou plusieurs caractères quelconques) et ? (remplace 1 caractère quelconque).
      Ex: si l'on a défini les variables x=14 ; ax=56 ; abx=542 ; , alors :
      who *x liste toutes les variables x, ax et abx
      clear ?x n'efface que la variables ax

Une "expression" MATLAB/Octave est une construction valide faisant usage de nombres, de variables, d'opérateurs et de fonctions.
      Ex: pi*r^2 et sqrt((b^2)-(4*a*c)) sont des expressions

Nous décrivons ci-dessous les comandes de base relatives à la gestion des variables. Pour davantage de détails sur la gestion du workspace et les commandes y relatives, voir le chapitre "Workspace MATLAB/Octave".

variable = expression
Affecte à variable le résultat de l' expression, et affiche celui-ci
Ex: r = 4, surface=pi*r^2
variable = expression ;
Affecte à variable le résultat de l'expression, mais effectue cela "silencieusement" (effet du caractère ; terminant l'instruction) c'est-à-dire sans affichage du résultat à l'écran
expression
Si l'on n'affecte pas une expression à une variable, le résultat de l'évaluation de l'expression est affecté à la variable de nom prédéfini ans ("answer")
Ex: pi*4^2 retourne la valeur 50.2655... sur la variable ans
a) [var1, var2, ... varn] = deal(v1, v2, ... vn)
b) [var1, var2, ... varn] = deal(v)
La fonction deal permet d'affecter plusieurs variables en une seule instruction. Il faut que l'on ait exactement le même nombre d'éléments à gauche et à droite de l'expression (forme a)), ou que l'on ait un seul élément à droite (forme b)), sinon deal retourne une erreur.
Ex: [a, b, c] = deal(11, 12, 13) est identique à a=11, b=12, c=13
      [a, b, c] = deal(10) est identique à a=b=c=10
      [coord(1,:), coord(2,:)] = deal([100,200], [110,210]) donne coord=[100, 200 ; 110, 210]
variable
Affiche le contenu de la variable spécifiée
who {variable(s)}
Liste le nom de toutes les variables couramment définies dans le workspace (ou de la (des) variable(s) spécifiée(s) )
whos {variable(s)}
Affiche une liste plus détaillée que who de toutes les variables couramment définies dans le workspace (ou de la (des) variable(s) spécifiée(s) ) : nom de la variable, dimension, espace mémoire, classe.
variable = who{s} ...
La sortie des commandes who et whos peut elle-même être affectée à une variable de type tableau cellulaire (utile en programmation !)
clear {variable(s)}
Efface du workspace toutes les variables (ou la(les) variable(s) spécifiée(s), séparées par des espaces et non pas des virgules !)
Ex: clear mat* détruit toutes les variables dont le nom commence par "mat"
Layout > Show > Workspace
Window > Show Workspace
Affichage de la fenêtre "Workspace" MATLAB ou Octave GUI (illustrations ci-dessous) qui présente, à la façon de la commande whos, toutes les variables courantes du workspace et qu'il est possible de manipuler avec le menu contextuel droite-clic (renommer, détruire... voire même éditer sous MATLAB par double-clic)

Workspace browser de MATLAB (ici sous Windows) Workspace browser de Octave GUI (ici sous Windows)

1.5.6 Généralités sur les chaînes de caractères

Il est bien entendu possible de manipuler du texte (des "chaînes" de caractères) dans MATLAB/Octave. Lorsque l'on utilise une chaîne, celle-ci doit être délimite par deux apostrophes, voire des guillemets sous Octave.

string = 'chaîne de caractères'
string = "chaîne de caractères"
Stocke la chaîne de caractères sur la variable string qui sera un vecteur-ligne de type char.
Si la chaîne contient des apostrophes, il faut les dédoubler (sinon ils seraient interprétés comme signe de fin de chaîne... et la suite de la chaîne provoquerait une erreur)
Ex: section = 'Sciences et ingénierie de l''environnement'
string(i:j)
Retourne la partie de la chaîne string comprise entre le i-ème et le j-ème caractère
Ex: suite à l'exemple ci-dessus, section(13:22) retourne la chaîne "ingénierie"

Pour davantage de détails dans l'utilisation des chaînes, voir plus loin le chapitre dédié aux "Chaînes de caractères" ainsi que l'introduction aux "Tableaux cellulaires".

1.5.7 Généralités sur les fonctions

Comme en ce qui concerne les noms de variables, les noms de fonctions sont "case-sensitive" (distinction des majuscules et minuscules). Les noms de toutes les fonctions prédéfinies MATLAB/Octave sont en minuscules.
      Ex: sin() est la fonction sinus, tandis que SIN() n'est pas définie !

Les fonctions MATLAB/Octave sont implémentées soit au niveau du noyau MATLAB/Octave (fonctions "built-ins"), soit par des "toolboxes" MATLAB ou des "packages" Octave, ou encore par vos propres M-files et packages.
      Ex: which sin indique que sin est une fonction built-in, alors que which axis montre dans quel M-file est implémentée la fonction axis.

Attention : les noms de fonction ne sont pas réservés et il est donc possible de les écraser !
      Ex: si l'on définissait sin(1)=444, l'affectation val=sin(1) retournerait alors 444 ! Pour restaurer la fonction originale, il faudra dans ce cas passer la commande clear sin, et la fonction sin(1) retournera alors à nouveau le sinus de 1 radian (qui est 0.8415).

Pour une présentation détaillée des principales fonctions MATLAB/Octave, voir les chapitres dédiés plus loin ("Fonctions de base", "Fonctions matricielles").

L'utilisateur a donc la possibilité de créer ses propres fonctions au moyen de M-files (voir chapitre "Fonctions").

1.6 Fenêtre de commandes MATLAB/Octave

1.6.1 Généralités

La fenêtre "Command Window" apparaît donc automatiquement dès que MATLAB ou Octave est démarré (voir illustrations plus haut). Nous présentons ci-dessous quelques commandes permettant d'agir sur cette fenêtre.

more on|off
Activation ou désactivation du mode de défilement "paginé" (contrôlé) dans la fenêtre "Command Window". Par défaut le défilement n'est pas paginé dans MATLAB (off). Sous Octave, cela dépend des versions.
Dans Octave, cette commande positionne la valeur retournée par la fonction built-in page_screen_output (respectivement à 0 pour off et 1 pour on).

En mode paginé, on agit sur le défilement avec les touches suivantes :
MATLAB: enter pour avancer d'une ligne, espace pour avancer d'une page, q pour sortir (interrompre l'affichage)
Octave: mêmes touche que pour MATLAB, avec en outre: curseur-bas et curseur-haut pour avancer/reculer d'une ligne ; PageDown ou f, resp. PageUp ou b pour avancer/reculer d'une page ; 1G pour revenir au début ; nombreG pour aller à la nombre-ième ligne ; G pour aller à la fin ; /chaîne pour rechercher chaîne ; n ou N pour recherche respectivement l'occurrence suivante ou précédente de cette chaîne ; h pour afficher l'aide du pagineur

PS1('specification')
Changement du prompt primaire de Octave ("invite" dans la fenêtre de commande Octave)
La specification est une chaîne pouvant notamment comporter les séquences spéciales suivantes :
\w : chemin complet (path) du répertoire courant
\# : numéro de commande (numéro incrémental)
\u : nom de l'utilisateur courant
\H : nom de la machine courante
Ex: la commande PS1('\w \#> ') modifie le prompt de façon qu'il affiche le répertoire courant suivi d'un espace puis du numéro de commande suivi de ">" et d'un espace
clc ou home
  Clear Commands > Command Window
  Edit > Clear Command Window
clc efface le contenu de la fenêtre de commande (clear command window), et positionne le curseur en haut à gauche
home positionne le curseur en haut à gauche, sans effacer la fenêtre de commande sous MATLAB
format loose|compact
Activation ou suppression de l'affichage de lignes vides supplémentaires dans la fenêtre de commande (pour une mise en plage plus ou moins aérée). MATLAB et Octave sont par défaut en mode loose, donc affichage de lignes vides activé

1.6.2 Caractères spéciaux dans les commandes MATLAB et Octave

La commande helpwin punct décrit l'ensemble des caractères spéciaux MATLAB. Parmi ceux-ci, les caractères ci-dessous sont particulièrement importants.

Caractère Description
; • Suivie de ce caractère, une commande sera normalement exécutée (sitôt enter frappé), mais son résultat ne sera pas affiché. Caractère faisant par la même occasion office de séparateur de commandes lorsque l'on saisit plusieurs commandes sur la même ligne
• Utilisé aussi comme caractère de séparation des lignes d'une matrice lors de la définition de ses éléments
, • Caractère utilisé comme séparateur de commande lorsque l'on souhaite passer plusieurs commandes sur la même ligne
• Utilisé aussi pour délimiter les indices de ligne et de colonne d'une matrice
• Utilisé également pour séparer les différents paramètres d'entrée et de sortie d'une fonction

Ex: a=4 , b=5 affecte les variables a et b et affiche le résultat de ces affectations ; tandis que a=4 ; b=5 affecte aussi ces variable mais n'affiche que le résultat de l'affectation de b. A(3,4) désigne l'élément de la matrice A situé à la 3e ligne et 4e colonne

... ("ellipsis")
\
• Utilisé en fin de ligne lorsque l'on veut continuer une instruction sur la ligne suivante (sinon la frappe de enter exécute l'instruction)
:
("colon")
• Opérateur de définition de séries (voir chapitre "Séries") et de plage d'indices de vecteurs et matrices

Ex: 5:10 définit la série "5 6 7 8 9 10"

%   ou   # • Ce qui suit est considéré comme un commentaire (non évalué par MATLAB/Octave). Utile pour documenter un script ou une fonction (M-file)
• Lorsqu'il est utilisé dans une chaîne, le caractère % débute une définition de format (voir chapitre "Entrées-sorties")

Ex: commentaire : r=5.5 % rayon en [cm] ; format sprintf('Rabais %2u%%', 25)

%{
  plusieurs lignes
  de code...
%}
• Dans un M-file, les séquences %{ et %} délimitent un commentaire s'étendant sur plusieurs ligne . Notez bien qu'il ne doit rien y avoir d'autre dans les 2 lignes contenant ces séquences %{ et %} (ni avant ni après)
'
(apostrophe)
• Caractère utilisé pour délimiter le début et la fin d'une chaîne de caractère
• Également utilisé comme opérateur de transposition de matrice

Les caractères espace et tab ne sont en principe pas significatifs dans une expression (MATLAB/Octave travaille en "format libre"). Vous pouvez donc en mettre 0, 1 ou plusieurs, et les utiliser ainsi pour mettre en page ("indenter") le code de vos M-files.
      Ex: b=5*a est équivalent à b = 5 * a

Pour nous-autres, utilisateurs d'ordinateurs avec clavier "Suisse-Français", rappelons que l'on forme ainsi les caractères suivants qui sont importants sous MATLAB (si vous ne trouvez pas la touche AltGr, vous pouvez utiliser à la place la combinaison ctrl-alt) :

1.6.3 Rappel et édition des commandes, copier/coller

L'usage des touches de clavier suivantes permet de rappeler, éditer et exécuter des commandes MATLAB/Octave passées précédemment :

Touche Description
curseur-haut et curseur-bas rappelle la ligne précédente / suivante
curseur-gauche et curseur-droite déplace le curseur d'un caractère à gauche / à droite
ctrl-curseur-gauche et ctrl-curseur-droite déplace le curseur d'un mot à gauche / à droite
home et end déplace le curseur au début / à la fin de la ligne
backspace et delete détruit le caractère à gauche / à droite du curseur
ctrl-k détruit les caractères depuis le curseur jusqu'à la fin de la ligne
escape efface entièrement la ligne
enter exécute la commande courante

Voir en outre, en ce qui concerne Octave, le mécanisme de l'historique au chapitre "Workspace".

Pour copier/coller du texte (commandes, données...) dans la fenêtre de commandes, MATLAB et Octave offrent les mêmes possibilités mais avec une interface différente.

Fonction MATLAB
    (Win/Lin/macOS)
Octave GUI
    (Win/Lin/macOS)
Octave CLI Windows Octave CLI Linux
    (X-Window)
Octave CLI macOS
Copier la sélection dans le "presse-papier" Edit > Copy ou ctrl-C

    (sur macOS cmd-C)
Edit > Copy ou ctrl-C

    (sur macOS cmd-C)
Sélectionner, puis enter.
Ou sélectionner puis bouton clic-droite
La sélection courante est automatiquement copiée dans le "presse-papier" Edit > Copy   ou   cmd-C

Si on a une souris à 3 boutons, on peut aussi utiliser la technique Linux

Coller le contenu du "presse-papier" à la position courante du curseur d'insertion Edit > Paste ou ctrl-V

    (sur macOS cmd-V)
Edit > Paste ou ctrl-V

    (sur macOS cmd-V)
Bouton clic-droite

Pour que cela fonctionne, le raccourci de lancement Octave doit être correctement configuré (voir chapitre "Installation de Octave sous Windows")

Bouton clic-milieu Edit > Paste   ou   cmd-V

Si on a une souris à 3 boutons, on peut aussi utiliser la technique Linux

Remarque : sous MATLAB sous Linux, si les raccourcis Copier et Coller ne fonctionnent pas, allez dans les [Preferences] sous MATLAB > Keyboard > Shortcuts, et dans le menu "Active settings" passez de "Emacs Default Set" en "Windows Default Set".

1.6.4 Extension automatique ("completion") de noms de variables/fonctions/fichiers...

La fenêtre "Command Window" MATLAB/Octave offre en outre (comme dans les shell Unix) un mécanisme dit de "commands, variables & files completion" : lorsque l'on entre un nom de fonction/commande, de variable ou de fichier, il est possible de ne frapper au clavier que les premiers caractères de celui-ci, puis utiliser la touche tab pour demander à MATLAB/Octave de compléter automatiquement le nom :

1.6.5 Formatage des nombres dans la fenêtre de commandes

Dans tous les calculs numériques, MATLAB/Octave travaille toujours de façon interne en précision maximum, c'est-à-dire en double précision (voir plus haut).

On peut choisir le format d'affichage des nombres dans la fenêtre "Command Window" à l'aide de la commande format :

Commande Type d'affichage Exemple
format {short {e}} Affichage par défaut : notation décimale fixe à 5 chiffres significatifs
Avec option e => notation décimale flottante avec exposant
72.346
7.2346e+001
format long {e} Affichage précision max : 15 chiffres significatifs
Avec option e => avec exposant
72.3456789012345
7.23456789012345e+001
format bank Format monétaire (2 chiffres après virgule) 72.35
format hex En base hexadécimale 4052161f9a65ee0f
format rat Approximation par des expressions rationnelles (quotient de nombres entiers) 3.333... s'affichera 10/3


Sous Octave seulement, on peut activer/désactiver le mécanisme d'affichage de vecteurs/matrices précédé ou non par un "facteur d'échelle". Toujours activé sous MATLAB, ce mécanisme n'est pas activé par défaut sous Octave.

Ex: la fonction logspace(1,7,5) affichera par défaut, sous Octave :
  1.0000e+01   3.1623e+02   1.0000e+04   3.1623e+05   1.0000e+0

mais si on se met dans le mode fixed_point_format(1), elle affichera (comme sous MATLAB) :
  1.0e+07  *
  0.00000  0.00003  0.00100  0.03162  1.00000
Remarquez le "facteur d'échelle" (de multiplication) 1.0e+07 de la première ligne.


Pour un contrôle plus pointu au niveau du formatage à l'affichage, voir les fonctions sprintf (string print formated) et fprintf (file print formated) (par exemple au chapitre "Entrées-sorties").

1.7 Les packages Octave-Forge

Les "packages" sont à Octave ce que les "toolboxes" sont à MATLAB. C'est à partir de la version 2.9.12 que l'architecture d'Octave implémente complètement les packages (Octave étant auparavant beaucoup plus monolithique).

Tous les packages Octave-Forge sont recensés et disponible en téléchargement via le dépôt (repository) officiel http://octave.sourceforge.net/packages.php. L'installation et l'utilisation d'un package consiste à :

  1. le télécharger (depuis le site ci-dessus) => fichier de nom package-version.tar.gz
  2. l'installer (une fois pour toutes) ; au cours de cette opération, les fichiers constituant le package seront "compilés" puis mis en place
  3. le charger (s'il n'est pas en mode "autoload") dans le cadre de chaque session Octave où l'on veut l'utiliser
Les étapes 1. et 2. peuvent être combinées avec la nouvelle option -forge (commande pkg install -forge package).

Si vous désirez savoir dans quel package est implémentée une fonction de nom donné (en vue d'installer ce package), vous pouvez consulter la liste des fonctions http://octave.sourceforge.net/function_list.html (catégorie "alphabetical"). Le nom du package est spécifié entre crochets à coté du nom de la fonction.

S'agissant des packages installés, la commande which fonction vous indiquera dans quel package ou quel oct-file la fonction spécifiée est implémentée, ou s'il s'agit d'une fonction built-in.

Nous décrivons ci-dessous les commandes de base relatives à l'installation et l'usage de packages Octave (voir help pkg pour davantage de détails).

pkg list
Cette commande affiche la liste des packages installés. Outre le nom de chaque package, on voit en outre si ceux-ci sont chargés (signalé par *) ou non, leur numéro de version et leur emplacement.
Avec [USER_PACKAGES, SYSTEM_PACKAGES]=pkg('list') on stocke sur 2 tableaux cellulaires la liste et description des packages installés respectivement de façon locale (utilisateur courant) et globale (tous les utilisateurs de la machine)
pkg list -forge
Affiche la liste des packages Octave disponibles sur SourceForge (nécessite connexion Internet)
pkg describe {-verbose} package | all
Affiche une description du package spécifié (resp. de tous les packages installés).
Avec l'option -verbose, la liste des fonctions du package est en outre affichée.
news package
Affiche le document release notes du package spécifié (i.e. les nouveautés apportées par chaque version)
pkg load|unload package | all
Cette commande charge (resp. décharge) le package spécifié (resp. tous les packages installés). De façon interne le chargement, qui rend "visibles" les fonctions du package, consiste simplement à ajouter au path Octave l'emplacement des fichiers du package.
Pour ne charger que les packages installés en mode "autoload", on peut faire pkg load auto
a) pkg install {-local|-global} {-auto} {-verbose} package-version.tar.gz
b) pkg install {...} -forge package
a) Installe le package spécifié à partir du fichier package-version.tar.gz préalablement téléchargé
b) Installe le package spécifié en le téléchargeant directement depuis SourceForge (nécessite connexion Internet)

• Si Octave a été démarré en mode super utilisateur (avec sudo octave sous Linux ou macOS), le package est installé par défaut de façon globale (i.e. pour tous les utilisateurs de la machine), à moins de spécifier l'option -local. Si Octave a été démarré depuis un compte non privilégié, l'installation s'effectue par défaut pour l'utilisateur courant (i.e. déposé dans le dossier octave se trouvant dans le "profile" de l'utilisateur), à moins de spécifier l'option -global. Dans le "profile" également, un fichier .octave_packages répertorie les packages locaux de l'utilisateur.
• Avec l'option -auto, le package est installé en mode "autoload", c'est-à-dire qu'il sera disponible, dans les sessions Octaves ultérieures, sans devoir le "charger".
• L'option -verbose est utile pour mieux comprendre ce qui se passe quand l'installation d'un package pose problème.

Notez que la plupart des packages étant écrits en C/C++, leur installation par cette procédure requiert la présence d'outils de compilation (p.ex. MinGW sous Windows, Apple XCode sous macOS...)

pkg uninstall package
Désinstallation du package spécifié
pkg update
Tente de mettre à jour l'ensemble des packages à partir de SourceForge (nécessite connexion Internet)
a) pkg rebuild
b) pkg rebuild -noauto package(s)
a) Cette commande reconstruit la base de donnée des packages à partir des répertoires de packages trouvés dans l'arborescence d'installation. Si l'on déplace le dossier d'installation Octave, il est ensuite nécessaire le lancer cette commande.
b) En plus de la reconstruction de la base de donnée des packages, on désactive ici l'autoload de certains package(s) à partir des prochaines sessions

Quelques remarques finales concernant le packaging Octave sous GNU/Linux :


Documentation CC BY-SA 4.0 / J.-D. BONJOUR () / EPFL-ENAC-IT / Rév. 26-09-2016       ↵ Table des matières