Matlab Octave Cours JDBonjour 2016 09 26 PDF
Matlab Octave Cours JDBonjour 2016 09 26 PDF
Matlab Octave Cours JDBonjour 2016 09 26 PDF
Avant-propos
0 Installation & configuration de Octave
1 Notions de base
1.1 Introduction
1.2 Octave-Forge vs. MATLAB
1.3 Dmarrer, quitter, prologues, IDE
1.4 Aide, dmos, liens Internet
1.5 Types de nombres, variables, fonctions
1.6 Fentre de commandes, copier/coller, formatage nombres
1.7 Packages Octave-Forge
2 Workspace, environnement, commandes OS
2.1 Workspace, journal, historique
2.2 Environnement, path de recherche
2.3 Commandes en liaison avec OS
3 Constantes, oprateurs et fonctions de base
3.1 Scalaires, constantes
3.2 Oprateurs de base (arith., relationnels, logiques)
3.3 Fonctions de base (math., logiques)
4 Objets : vecteurs, matrices, chanes, tableaux n-D et cellulaires, structures
4.1 Sries (ranges)
4.2 Vecteurs
4.3 Matrices
4.4 Oprateurs matriciels
4.5 Fonctions matricielles (rorganis., calcul, stat., recherche, logiques)
4.6 Indexation logique
4.7 Chanes de caractres
4.8 Tableaux multidimensionnels
4.9 Structures (enregistrements)
4.10 Tableaux cellulaires (cell arrays)
5 Autres notions diverses
5.1 Dates et temps, timing
5.2 Equations non linaires
6 Graphiques 2D/3D, images, animations
6.1 Concepts de base
6.2 Graphiques 2D
6.3 Graphiques 2D et 3D
6.4 Traitement d'image
6.5 Sauvegarder et imprimer
6.6 Handle Graphics
6.7 Animations, movies
7 Programmation : diteurs, interaction, debugging, optimisation, structures de contrle, scripts,
fonctions, entres-sorties, GUI
7.1 Gnralits
7.2 diteurs
7.3 Interaction cran/clavier, warnings/erreurs
7.4 Debugging, optimisation, profiling
7.5 Structures de contrle
7.6 Autres commandes de programmation
7.7 Scripts, mode batch
7.8 Fonctions, P-Code
7.9 Entres-sorties formates, fichiers
7.10 Interfaces graphiques (GUI)
7.11 Publier un code
Avant-propos
Mis jour en t 2016, le prsent support de cours se rfre MATLAB R2015 et GNU Octave 4.0.3 (avec
extensions Octave-Forge ). Nous nous efforons de faire systmatiquement le parallle entre ces deux progiciels -
le premier commercial, le second libre/open-source - en dmontrant par l le trs haut degr de compatibilit de
GNU Octave par rapport MATLAB, et donc le fait que ce logiciel libre peut tre utilis en lieu et place de MATLAB
dans la plupart des situations (en environnement acadmique notamment).
en police de caractre espacement fixe ombr bleu : fonction ou commande MATLAB/Octave entrer telle
quelle ; exemple: help plot
en italique : vous devez substituer vous-mme l'information dsigne ; il s'agit en gnral des paramtres
d'une fonction ; exemples: save nom_fichier , plot(x,y)
entre accolades : on dsigne ainsi des lments facultatifs tels que les options d'une commande ou les
paramtres d'une fonction ; exemples: save fichier {-append} , pause({secondes}) ; ces accolades
ne doivent donc pas tre saisies ; exception cette rgle: les tableaux cellulaires o les accolades font partie
intgrante de la syntaxe MATLAB/Octave
caractre barre verticale : dsigne un choix ; exemple: grid ('on|off') indiquant les deux usages
possibles grid('on') et grid('off')
encadr de bleu : touche de clavier (ou combinaison de touches) ou bouton de souris ; exemples: enter ,
ctrl+C , curseur-haut , double-clic , clic-droite
texte ombr de gris : choix dans un menu d'interface graphique ; exemple: File > Save as
galement ombr de gris mais encadr : bouton d'interface graphique ; exemple: Save
En rgle gnrale toutes les instructions dcrites dans ce support de cours s'appliquent la fois MATLAB et GNU
Octave. Dans le cas contraire, ou pour dfinir certaines spcificits, on utilisera les symboles suivants :
Par le signe on met en vidence des fonctions et notions essentielles MATLAB/Octave que l'tudiant, dans une
premire approche de cette matire, devrait assimiler en priorit.
Ce support de cours existe aussi sous forme de fichier PDF (voir menu ci-contre), mais celui-ci n'est pas mis jour
aussi frquemment que la version web.
L'auteur reoit trs volontiers toutes vos remarques concernant ce support de cours (corrections, propositions de
complments...) qui peuvent lui tre directement adresses par email [email protected]. D'avance un
grand merci de votre feedback !
1
GNU Octave - 0. Installation et conguration de GNU OCTAVE-Forge
0.1 Avant-propos
Les tudiants peuvent gnralement se procurer sur leur campus une licence personnelle "MATLAB Student Version"
(DVD d'installation de MATLAB, Simulink avec quelques toolboxes, vendu au prix de CHF 120.- environ) permettant
l'installation de MATLAB sur leur machine prive et l'utilisation dans le cadre de leurs tudes. l'EPFL cela est mme
possible sans bourse dlier, l'cole finanant la licence couvrant ce type d'usage. Mais pour les adeptes du "logiciel
libre" (ou ceux qui ne veulent pas faire les frais d'une licence MATLAB), GNU Octave reprsente actuellement la
meilleure alternative libre/open-source MATLAB (donc utilisable gratuitement et sans restriction).
Il existe encore d'autres logiciels libres dans le domaine du calcul scientifique, mais non compatibles avec MATLAB
(autre syntaxe, donc code MATLAB non rutilisable tel quel). Ces alternatives sont mentionnes au chapitre
"Qu'est-ce que MATLAB et GNU Octave ?".
GNU Octave se compose d'un noyau de base (Octave Core, http://www.gnu.org/software/octave/) ainsi que
d'extensions implmentes sous la forme de packages (concept analogue aux toolboxes MATLAB) distribus via la
plateforme SourceForge (http://octave.sourceforge.net/). Nous dcrivons ci-aprs son installation sur les trois
systmes d'exploitation principaux :
GNU/Linux
Windows
macOS
De faon gnrale, les tapes de base d'installation de Octave sous Linux consistent donc installer, au moyen du
gestionnaire de paquetages de votre distribution ( apt sous Debian et drivs tels que Ubuntu, yum sous RedHat
et Fedora...), le noyau de base Octave (paquet octave et ses dpendances), les packages Octave-Forge dont vous
avez besoin (gnralement packags sous le nom octave-package ), et optionnellement gnuplot (qui vient en
gnral automatiquement en dpendance de octave ). Il reste bien entendu possible de compiler/installer des
packages Octave-Forge au sein mme de Octave (voir chapitre "Packages Octave-Forge").
Pour un aperu des portages Octave sur les diffrentes distributions Linux, voyez le wiki Octave. La distribution la
plus utilise dans notre facult tant Ubuntu, c'est sur celle-ci que nous nous concentrons dans le chapitre qui suit.
Introduction
Les diffrentes versions de Octave et de ses outils, pour les releases Ubuntu rcents, sont :
Ubuntu 14.04 LTS (Trusty Tahr) : Octave 3.8.1 | backends FLTK et Gnuplot 4.6.4 | Octave-GUI beta
1
GNU Octave - 0. Installation et conguration de GNU OCTAVE-Forge
Ubuntu 14.10 (Utopic Unicorn) : Octave 3.8.1 | backends FLTK et Gnuplot 4.6.5 | Octave-GUI beta
Ubuntu 15.04 (Vivid Vervet) : Octave 3.8.2 | backends FLTK et Gnuplot 4.6.6 | Octave-GUI beta
Ubuntu 15.10 (Wily Werewolf) : Octave 4.0.0 | backends Qt , FLTK et Gnuplot 4.6.6 | Octave-GUI final
Ubuntu 16.04 LTS (Xenial Xerus) : Octave 4.0.0 | backends Qt, FLTK et Gnuplot 4.6.6 | Octave-GUI
Installation de GNU Octave 4.x sous Ubuntu 15.10 base sur le packaging
standard de Canonical
La version 4.0 de GNU Octave fait officiellement son apparition depuis la version 15.10 (Wily Werewolf) de Ubuntu. Il
est donc possible de l'installer de faon classique partir des dpts de Canonical.
Installation
Installation du noyau Octave et de la documentation :
Pour installer ensuite les packages Octave-Forge dont vous avez besoins, il y a deux mthodes possibles, la
premire tant la plus simple et donc recommande :
A. Installer les paquets Octave-Forge sous leur forme package au niveau OS par Debian/Canonical (i.e. dans
les "dpts Ubuntu"). L'avantage de cette mthode est que les paquets dpendants (au niveau Ubuntu et/ou
Octave) seront automatiquement installs !
Principes : commandes de base, passer dans un shell Linux (et non sous Octave) :
la liste de ces packages est visible avec : apt-cache search ^octave- (expression rgulire
dsignant les packages dont le nom commence par octave- )
pour afficher les informations sur un package : apt-cache show octave-package
puis installation proprement dite d'un package avec : sudo apt install octave-package
Si vous dsirez installer tous les packages disponibles (en date du 17.8.2016), passez la commande
(en une seule ligne) : sudo apt install octave-bim octave-communications octave-
communications-common octave-control octave-data-smoothing octave-dataframe
octave-econometrics octave-fpl octave-ga octave-general octave-geometry
octave-gsl octave-image octave-interval octave-linear-algebra octave-ltfat
octave-ltfat-common octave-miscellaneous octave-missing-functions octave-msh
octave-nan octave-nurbs octave-ocs octave-octcdf octave-odepkg octave-optim
octave-optiminterp octave-parallel octave-quaternion octave-signal octave-
sockets octave-specfun octave-splines octave-statistics octave-stk octave-
strings octave-struct octave-tsa octave-zenity
Puis mettez ces packages en mode autoload ( l'exception de ceux dont le chargement gnrent des
warnings) avec : sudo octave -qf --eval "pkg rebuild -auto, pkg rebuild -noauto
tsa sockets ocs nan"
B. Installer les paquets Octave-Forge en allant les chercher la source (SourceForge) et en les compilant
(mthode dcrite plus en dtail au chapitre "Packages Octave-Forge"). L'avantage de cette mthode est
qu'elle vous permet d'installer des packages Octave-Forge qui ne sont pas encore packags par
Debian/Canonical, ou installer ceux-ci dans une version plus rcente !
2
GNU Octave - 0. Installation et conguration de GNU OCTAVE-Forge
a. Si vous utilisez le backend Gnuplot et que la barre d'icnes est absente au haut de la fentre graphique,
introduisez, dans votre prologue Octave ~/.octaverc , la commande : setenv('GNUTERM','wxt')
b. Ce point n'est utile que si vous utilisez Octave-CLI (Octave en mode commande dans une fentre terminal) :
l'diteur de M-files configur par dfaut tant emacs, si vous souhaitez plutt utiliser Gedit (diteur de texte
standard sous GNOME), il vous faut :
introduire, dans votre prologue Octave ~/.octaverc , la commande : EDITOR('gedit')
activer la coloration syntaxique avec: View > Highlight Mode > Scientific > Octave
nous vous recommandons d'installer les plugins Gedit et configurer proprement cet diteur (voir nos
"Conseils relatifs l'diteur Gedit sous Linux")
3
GNU Octave - 0. Installation et conguration de GNU OCTAVE-Forge
L'tat des diffrents portages binaires de Octave sous Windows est dcrit sur le wiki Octave. La situation actuelle
est la suivante (t 2016) :
A. Le nouvel environnement de build cross-platform appel Octave MXE a vu le jour en 2013 et dbouch
sur la premire distribution binaire Octave 3.8 MXE pour Windows en 2014, puis Octave 4.x MXE ds 2015.
C'est celle-ci que nous vous recommandons et dont nous dcrivons l'installation au chapitre suivant.
Avec l'avnement de Octave MXE, le dveloppement des 2 distributions Octave traditionnelles pour Windows,
diffuses via la plateforme open-source SourceForge, est arrt depuis 2013.
Caractristiques
Cette distribution d'Octave, qui date du 2.7.2016, intgre les composants suivants :
Les nouveauts de la version 4.0 sont prsentes dans ce fichier (que l'on peut aussi afficher avec la commande
news ) ou le menu News > Release Notes
1. Tlchargez l'archive ZIP que nous vous avons prpare en cliquant sur ce lien (277 MB)
2. Dballez celle-ci la racine de votre disque C:\ en faisant souris-droite Extraire tout... dans C:\ sans
4
GNU Octave - 0. Installation et conguration de GNU OCTAVE-Forge
tapes facultatives :
11. Si vous n'avez pas dball Octave l'emplacement indiqu ci-dessus, vous devrez :
- mettre jour la "cible" des raccourcis
- passer sous Octave les commandes suivantes (faute de quoi les packages Octave-Forge pr-installs ne
seront pas accessibles) :
pkg rebuild -auto puis pkg rebuild -noauto tsa specfun ocs nan
12. Quittez Octave, redmarrez-le, et passez la commande pkg list pour vous assurer que l'ensemble des
packages soient visibles et autoloads ( l'exception des packages exclus avec -noauto )
Vous constaterez que nous avons intgr, dans ce packaging-maison, un prologue spcifique (celui qui est en usage
dans les salles de PCs ENAC-SSIE). Nous affichons clairement, au dmarrage d'Octave, ce qui est implment par ce
prologue.
b. Lorsque le rpertoire de travail est la racine d'un lecteur Windows (par exemple Z:\ ), les M-files
crs au cours de la session ne sont pas directement utilisables (considrs comme s'ils taient invisibles), et
il est ncessaire de relancer Octave pour qu'ils soient accessibles. Pour ne pas souffrir de ce bug, travaillez
donc toujours dans un sous-rpertoire (ou plus profond) de lecteur (p.ex. Z:\exos_octave).
c. Octave 3.x et 4.0 sous Windows ne supporte officiellement pas l'utilisation de caractres accentus
dans les scripts et dans les noms de fichiers/dossiers (voir wiki). On se limitera donc aux caractres
ASCII-7bits
5
GNU Octave - 0. Installation et conguration de GNU OCTAVE-Forge
C'est actuellement (septembre 2016) la mthode A) que nous prconisons et que nous prsentons dans le chapitre
qui suit.
Procdure d'installation
1. Tlchargez l'image-disque de l'installeur depuis ce lien, ou depuis notre miroir (fichier *.dmg de 323 MB)
2. Ouvrez ce fichier-image, acceptez les termes de la licence GPL en cliquant sur [Agree] => une icne
Octave-Installer apparat sur le bureau, et une fentre de mme nom s'ouvre
3. Faites un glisser-dposer de l'icne Octave sur l'icne de dossier Applications => l'installation de
Octave.app se droule (~1 GB) et une icne Octave apparat dans votre dossier d'Applications
4. Une fois l'installation termine, vous pouvez jecter/dmonter l'image-disque Octave-Installer, puis jeter le
fichier-image se trouvant dans votre dossier de Tlchargements
5. Lorsque vous dmarrez Octave (par double-clic sur son icne dans le dossier Applications), si vous recevez
le message d'erreur "Impossible d'ouvrir Octave car cette application provient d'un dveloppeur non
identifi..." : allez dans les Prfrences Systme, cliquez sur l'icne "Scurit et confidentialit", onglet
"Gnral", dverrouillez le cadenas, activez "Autoriser les applications tlcharges de: N'importe o", et
reverrouillez le cadenas. Remarque: si vous trouvez une solution pour n'autoriser explicitement que Octave,
faites-le nous savoir !
6. Au premier lancement de Octave, la question "Font cache not found, so first plotting will be slow. Create
font cache now ?", rpondez par [Yes]
6
GNU Octave - 0. Installation et conguration de GNU OCTAVE-Forge
Si vous tes intress par cet diteur : Acher les explications ...
7
MATLAB et Octave - 1. Notions de base
1.1 Introduction
MATLAB
MATLAB est un logiciel commercial de calcul numrique/scientifique, visualisation et programmation
performant et convivial dvelopp par la socit 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 lments de donnes de base manipuls par MATLAB tant
des matrices de dimension quelconque (tableaux n-D, pouvant se rduire des matrices 2D, vecteurs et scalaires)
qui ne ncessitent ni dclaration de type ni dimensionnement (typage dynamique). Contrairement aux langages de
programmation classiques (scalaires), les oprateurs et fonctions MATLAB permettent de manipuler directement
ces tableaux (donc la plupart du temps sans programmer de boucles), rendant ainsi MATLAB particulirement
efficace en calcul numrique, analyse et visualisation de donnes en particulier.
Mais MATLAB est aussi un environnement de dveloppement (progiciel) part entire : son langage de haut
niveau, dot notamment de structures de contrles, fonctions d'entre-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 vritables programmes (M-files) appels scripts vu le caractre interprt de ce langage.
MATLAB est disponible sur les systmes d'exploitation standards (Windows, GNU/Linux, macOS...). Le champ
d'application de MATLAB peut tre tendu aux systmes non linaires> et aux problmes associs de simulation avec
le produit complmentaire SIMULINK. Les capacits de MATLAB peuvent en outre tre enrichies par des fonctions
plus spcialises regroupes au sein de dizaines de toolboxes (botes outils qui sont des collections de M-files)
couvrant des domaines nombreux et varis tels que :
Une interface de programmation applicative (API) rend finalement possible l'interaction entre MATLAB et les
environnements de dveloppement classiques (excution de routines C ou Fortran depuis MATLAB, ou accs aux
fonctions MATLAB depuis des programmes C ou Fortran).
Ces caractristiques (et d'autres encore) font aujourd'hui de MATLAB un standard incontournable en milieu
acadmique, dans la recherche et l'industrie.
GNU Octave : logiciel libre offrant la meilleure compatibilit par rapport MATLAB (qualifiable de "clone
MATLAB", surtout depuis la version Octave 2.9/3.x et avec les packages du dpt Octave-Forge). Pour
l'installer sur votre ordinateur personnel (Windows, GNU/Linux, macOS), voyez notre page "Installation et
configuration de GNU Octave et packages Octave-Forge".
1
MATLAB et Octave - 1. Notions de base
FreeMat : logiciel libre multi-plateforme plus rcent mais dj assez abouti, implmentant un sous-ensemble
des fonctionnalits de MATLAB, avec un IDE comprenant: editeur/debuguer, historique, workspace tool, path
tool, explorateur de fichiers, graphiques 2D/3D... Pour l'installer, suivez les instructions figurant sous ce lien.
L'environnement Scientific Python, bas sur le langage Python et constitu d'un trs vaste cosystme
d'outils et bibliothques libres, notamment : l'interprteur interactif IPython et ses possibilits de "notebook",
NumPy pour manipuler des tableaux, SciPy implmentant des fonctions de calcul scientifique de haut niveau,
MatPlotLib pour raliser des graphiques 2D au moyen de fonctions similaires celles de MATLAB/Octave,
Mayavi pour la visualisation 3D, l'IDE Spyder, etc... Voyez ce sujet notre support de cours !
Julia, projet rcent et trs prometteur de dveloppement d'un langage dynamique de haut niveau, usage
gnral et pour le calcul scientifique, trs performant et spcifiquement adapt aux architectures parallles et
distribues (clusters...).
Scilab : logiciel libre analogue MATLAB et Octave en terme de possibilits, trs abouti, plus jeune que Octave
mais non compatible avec MATLAB/Octave (syntaxe et fonctions diffrentes, ncessitant donc une rcriture des
scripts).
SageMath : sous une interface base Python, il s'agit d'une combinaison de nombreux logiciels libres (NumPy,
SciPy, MatPlotLib, SymPy, Maxima, GAP, FLINT, R...) destins au calcul numrique et symbolique/formel. La
syntaxe est cependant diffrente de celle de MATLAB/Octave.
Dans des domaines voisins, on peut mentionner les logiciels libres suivants :
Le langage MATLAB/Octave est interprt, c'est--dire que chaque expression est traduite en code machine
au moment de son excution. Un programme MATLAB/Octave, appel script ou M-file, n'a donc pas besoin
d'tre compil avant d'tre excut. Si l'on recherche cependant des performances suprieures, il est possible
de convertir des fonctions M-files en P-code, voire en code C ou C++ (avec le MATLAB Compiler). Depuis la
version 6.5, MATLAB intgre en outre un JIT-Accelerator (just in time) qui augmente ses performances.
MATLAB et Octave sont "case-sensitive", c'est--dire qu'ils distinguent les majuscules des minuscules (dans
les noms de variables, fonctions...).
Ex : les variables abc et Abc sont 2 variables diffrentes ; la fonction sin (sinus) existe, tandis que la
fonction SIN n'est pas dfinie...
Le typage est entirement dynamique, c'est--dire que l'on n'a pas se soucier de dclarer le type et les
dimensions des variables avant de les utiliser.
La numrotation des indices des lments de tableaux dbute 1 (et non pas 0 comme dans la plupart
des langages actuels : Python, C/C++, Java...)
logiciel commercial (payant) dvelopp par une socit (The MathWorks Inc.) et dont le code est ferm
de nombreuses toolboxes commerciales (payantes) largissent les fonctionnalits de MATLAB dans des
domaines trs divers
2
MATLAB et Octave - 1. Notions de base
logiciel libre et open-source (gratuit, sous licence GPL v3) dvelopp de faon communautaire
logiciel packag (*.deb, *.rpm...) pour la plupart des distributions GNU/Linux, et disponible sous forme de
portages binaires (ou sinon compilable) sur les autres systmes d'exploitation courants (Windows, macOS)
extensions implmentes sous forme de packages galement libres (voir chapitre "Les packages Octave-
Forge")
le caractre modulaire de l'architecture et des outils Unix/Linux se retrouve dans Octave, et Octave interagit
facilement avec le monde extrieur ; Octave s'appuie donc sur les composants Unix/GNU Linux, plutt que
d'intgrer un maximum de fonctionnalits sous forme d'un environnement monolithique (comme MATLAB)
fonctionnalits graphiques s'appuyant sur diffrents "backends" (Qt/OpenGL, FLTK/OpenGL, Gnuplot,
Octaviz... voir chapitre "Graphiques, images, animations") dont il dcoule quelques diffrences par rapport
MATLAB
fonctionnalits pousses d'historique (rappel de commandes...)
Jusqu' rcemment, les usagers de MATLAB ddaignaient GNU Octave en raison de l'absence d'interface utilisateur
graphique (GUI). Ce reproche n'est plus valable depuis la version 3.8 qui implmente, avec Octave GUI, un IDE
complet (file browser, workspace, history, diteur/debugger...).
3
MATLAB et Octave - 1. Notions de base
Dans les salles d'enseignement EPFL-ENAC-SSIE sous Windows, les raccourcis se trouvent sous :
MATLAB : Dmarrer > Tous les programmes > Math & Stat > Matlab x.x > MATLAB (interface graphique)
Octave : Dmarrer > Tous les programmes > Math & Stat > Octave x.x MXE > Octave GUI (interface
graphique), respectivement Octave Command Line (fentre terminal)
Dans les salles d'enseignement EPFL-ENAC-SGC sous Windows, ils se trouvent sous :
MATLAB et Octave : Dmarrer > Tous les programmes > Programmes GC > ...
Si l'excutable matlab ou octave n'est pas trouv, compltez le PATH de recherche de votre shell par
le chemin complet du rpertoire o est install MATLAB/Octave, ou dfinissez un alias de lancement intgrant
le chemin du rpertoire d'installation.
4
MATLAB et Octave - 1. Notions de base
commande depuis une fentre terminal, le rpertoire de travail sera celui du shell de la fentre terminal
concernant Octave GUI (quel que soit le systme d'exploitation), cela se dfinit sous Edit > Preferences >
General > Octave Startup
Prologues
Le mcanisme des "prologues" permet l'utilisateur de faire excuter automatiquement par MATLAB/Octave un
certain nombre de commandes en dbut de session. Il est implment sous la forme de scripts (M-files). Le
prologue est trs utile lorsque l'on souhaite configurer certaines options, par exemple :
Lorsque MATLAB dmarre, il passe successivement par les chelons de prologues suivants :
Lorsque Octave dmarre, il passe successivement par les chelons de prologues suivants :
pilogues
S'agissant des pilogues MATLAB et Octave, il s'agit du mcanisme automatiquement invoqu lorsque l'on termine
une session :
MATLAB excute le premier script nomm finish.m qu'il trouve en parcourant le "rpertoire utilisateur de
base" puis les diffrents rpertoires dfinis dans le path MATLAB
Octave s'appuie sur la fonction atexit
5
MATLAB et Octave - 1. Notions de base
6
MATLAB et Octave - 1. Notions de base
Les diffrents rglages de Octave GUI s'effectuent via le menu Edit > Preferences
Pour mmoire, d'autres tentatives de dveloppement d'interfaces graphiques Octave (voire mme d'IDE's
complets) ont exist par le pass et sont encore parfois utilises (notamment QtOctave), gnralement sous Linux et
7
MATLAB et Octave - 1. Notions de base
doc sujet
Sous Octave, cette commande recherche et affiche l'information relative au sujet dsir partir du manuel
Octave. Avec Octave GUI, le rsultat est affich dans la fentre de l'onglet "Documentation" qui offre un
mcanisme de navigation par hyper-liens.
8
MATLAB et Octave - 1. Notions de base
Ex : help inverse retourne dans MATLAB l'erreur comme quoi aucune fonction "inverse" n'existe ; par
contre lookfor inverse prsente la liste de toutes les fonctions MATLAB/Octave en relation avec le
thme de l'inversion (notamment la fonction inv d'inversion de matrices)
Voyez aussi ce Octave Quick Reference Card (aide-mmoire en 3 pages, PDF) ainsi que cette FAQ
Ex : demo matlab : liste les dmos de base MATLAB ; demo toolbox statistics : liste les dmos
associes la toolbox statistics
demo('fonction', {N} )
Excute les dmos interactives (ou la Nme dmo) lie(s) la fonction spcifie
rundemos(package)
Excute les dmos dfinies dans le rpertoire du package spcifi (les packages sont sous
OCTAVE_HOME/share/octave/packages/package )
MATLAB
- site de la socit The MathWorks Inc (ditrice de MATLAB) : http://www.mathworks.com
- article sur MATLAB dans Wikipedia : franais, anglais
- site MATLAB Central, avec File Exchange (diffusion de scripts/fonctions, fonctionnant gnralement aussi sous
Octave), Newsgroup (forums de discussion), Answers (questions/rponses) : http://fr.mathworks.com
/matlabcentral/
- Wiki Book "Matlab Programming" : http://en.wikibooks.org/wiki/MATLAB_Programming
GNU Octave
- site principal consacr GNU Octave : http://www.octave.org (http://www.gnu.org/software/octave/)
- dpt des paquets "Octave-Forge" sur SourceForge.net : http://octave.sourceforge.net
- article sur GNU Octave dans Wikipedia : franais, anglais
- espace de partage de fonctions/scripts Octave : http://agora.octave.org/ (depuis t 2012)
- Wiki Book Octave : http://fr.wikibooks.org/wiki/Programmation_Octave (FR),
http://en.wikibooks.org/wiki/Octave_Programming_Tutorial (EN)
Gnuplot
- site principal Gnuplot (back-end graphique traditionnel sous Octave) : http://gnuplot.sourceforge.net
9
MATLAB et Octave - 1. Notions de base
MATLAB
- forum MathWorks : http://www.mathworks.ch/matlabcentral/answers/
- forum Usenet/News consacr MATLAB : https://groups.google.com/forum/#!forum/comp.soft-
sys.matlab
Octave
- wiki Octave : http://wiki.octave.org
- forum utilisateurs et dveloppeurs, avec mailing lists associes : http://octave.1599824.n4.nabble.com/
(avec sections: General, Maintainers, Dev)
- soumission de bugs en relation avec Octave core (depuis mars 2010) : http://bugs.octave.org
(http://savannah.gnu.org/bugs/?group=octave)
- en relation avec packages Octave-Forge :
- soumission de bugs : http://sourceforge.net/p/octave/bugs/
- demande de fonctionnalits : http://sourceforge.net/p/octave/feature-requests/
- blogs en relation avec le dveloppement de Octave :
- planet.octave : http://planet.octave.org/
- [email protected] : http://blog.gmane.org/gmane.comp.gnu.octave.maintainers/
La commande info affiche sous Octave diffrentes sources de contact utiles : mailing list, wiki, packages, bugs
report...
10
MATLAB et Octave - 1. Notions de base
Les nombres rels seront saisis par l'utilisateur selon les conventions de notation dcimale standard (si
ncessaire en notation scientifique avec affichage de la puissance de 10)
Ex de nombres rels valides : 3 , -99 , 0.000145 , -1.6341e20 , 4.521e-5
Il est cependant possible de dfinir des rels en virgule flottante "simple prcision", donc stocks sur des variables
occupant 2 fois moins d'espace en mmoire (4 octets c--d. 32 bits), donc de prcision deux fois moindre (7 chiffres
dcimaux 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 paramtre 'single' certaines fonctions telles que
ones , zeros , eye ... De faon inverse, la fonction de conversion double(variable) retourne, sur la base
d'une variable simple prcision, un rsultat double prcision. ATTENTION cependant : lorsque l'on utilise des
oprateurs ou fonctions mlangeant des oprandes/paramtres de types simple et double prcision, le rsultat
retourn sera toujours de type simple prcision. Vous pouvez vrifier cela en testant vos variables avec la commande
whos .
Si vous lisez des donnes numriques relles partir d'un fichier texte et dsirez les stocker en simple
prcision, utilisez la fonction textscan avec le format %f32 (32 bits, soit 4 octets). Le format %f64 est
synonyme de %f et gnre des variables de double prcision (64 bits, soit 8 octets).
les fonctions de conversion int8 , int16 , int32 et int64 gnrent des variables entires signes
stockes respectivement sur 8 bits, 16 bits, 32 bits ou 64 bits ; les valeurs relles (double ou simple prcision)
sont arrondies au nombre le plus proche (quivalent de round )
les fonctions de conversion uint8 , uint16 , uint32 et uint64 gnrent des variables entires non
signes (unsigned) stockes respectivement sur 8 bits, 16 bits, 32 bits ou 64 bits
en ajoutant l'un des paramtres 'int8' , 'uint8' , 'int16' , 'uint16' , 'int32' , 'uint32' ,
'int64' ou 'uint64' certaines fonctions telles que ones , zeros , eye ...
les valeurs relles (double ou simple prcision) sont arrondies au nombre le plus proche (quivalent de
round )
IMPORTANT : Lorsque l'on utilise des oprateurs ou fonctions mlangeant des oprandes/paramtres de types
11
MATLAB et Octave - 1. Notions de base
entier et rels (double ou simple prcision), le rsultat retourn sera toujours de type entier ! Si l'on ne souhaite
pas a, il faut convertir au pralable l'oprande entier en rel double prcision (avec double(entier) ) ou simple
prcision (avec single(entier) ) !
Sous MATLAB, certaines oprations mixant des donnes de type rel avec des donnes de type entier 64 bits ne
sont pas autorises. Ainsi l'expression 13.3 * int64(12) gnre une erreur.
Ex :
int8(-200) retourne -128 (valeure minimale signe pour int8), int8(-4.7) retourne -5,
int8(75.6) retourne 76, int8(135) retourne 128 (valeure maximale signe pour int8)
uint8(-7) retourne 0 (valeure minimale non signe pour int8), uint8(135.2) retourne 135,
uint8(270) retourne 255 (valeure maximale non signe pour int8)
si a=uint8(240) , a/320 retourne 0, alors que single(a)/320 retourne 0.75000
la srie indices1=int8(1:100) occupe 8x moins de place en mmoire (100 octets) que la srie
indices2=1:100 (800 octets)
4.6 * ones(2,2,'int16') retourne une matrice de dimension 2x2 remplie de chiffres 5 stocks chacun
sur 2 octets (entiers 16 bits)
Si vous lisez des donnes numriques entires partir d'un fichier texte et dsirez les stocker sur des entiers et
non pas sur des rels double prcision, utilisez la fonction textscan avec l'un des formats suivants :
Le tableau ci-dessous prsente quelques fonctions MATLAB/Octave relatives aux nombres complexes.
Fonction Description
Ex : abs(3+4i) retourne 5
12
MATLAB et Octave - 1. Notions de base
Un nom de variable valide consiste en une lettre suivie de lettres, chiffres ou caractres soulign "_". Les lettres
doivent tre dans l'intervalle a-z et A-Z, donc les caractres accentus ne sont pas autoriss. MATLAB (mais pas
Octave) n'autorise cependant pas les noms de variable dpassant 63 caractres (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 considr comme une
expression), temp_mesure (contient un caractre accentu)
Les noms de variable sont donc case-sensitive (distinction des majuscules et minuscules).
Ex : MAT_A dsigne une matrice diffrente de mat_A
Pour se rfrer un ensemble de variables (principalement avec commandes who , clear , save ...), on peut
utiliser les caractres de substitution * (remplace 0, 1 ou plusieurs caractres quelconques) et ? (remplace 1
caractre quelconque).
Ex : si l'on a dfini 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'oprateurs et de fonctions.
Ex : pi*r^2 et sqrt((b^2)-(4*a*c)) sont des expressions
Nous dcrivons ci-dessous les comandes de base relatives la gestion des variables. Pour davantage de dtails sur la
gestion du workspace et les commandes y relatives, voir le chapitre "Workspace MATLAB/Octave".
variable = expression
Affecte variable le rsultat de l' expression, et affiche celui-ci
Ex : r = 4 , surface=pi*r^2
variable = expression ;
Affecte variable le rsultat de l'expression, mais effectue cela "silencieusement" (effet du caractre ;
terminant l'instruction) c'est--dire sans affichage du rsultat l'cran
expression
Si l'on n'affecte pas une expression une variable, le rsultat de l'valuation de l'expression est affect la
variable de nom prdfini ans ("answer")
Ex : pi*4^2 retourne la valeur 50.2655... sur la variable ans
13
MATLAB et Octave - 1. Notions de base
variable
Affiche le contenu de la variable spcifie
who {variable(s)}
Liste le nom de toutes les variables couramment dfinies dans le workspace (ou de la (des) variable(s)
spcifie(s) )
whos {variable(s)}
Affiche une liste plus dtaille que who de toutes les variables couramment dfinies dans le workspace (ou
de la (des) variable(s) spcifie(s) ) : nom de la variable, dimension, espace mmoire, classe.
clear {variable(s)}
Efface du workspace toutes les variables (ou la(les) variable(s) spcifie(s), spares par des espaces et non
pas des virgules !)
Ex : clear mat* dtruit toutes les variables dont le nom commence par "mat"
Workspace browser de MATLAB (ici sous Workspace browser de Octave GUI (ici sous
Windows) Windows)
string(i:j)
Retourne la partie de la chane string comprise entre le i-me et le j-me caractre
Ex : suite l'exemple ci-dessus, section(13:22) retourne la chane "ingnierie"
Pour davantage de dtails dans l'utilisation des chanes, voir plus loin le chapitre ddi aux "Chanes de
caractres" ainsi que l'introduction aux "Tableaux cellulaires".
14
MATLAB et Octave - 1. Notions de base
Les fonctions MATLAB/Octave sont implmentes 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 implmente la fonction axis .
Attention : les noms de fonction ne sont pas rservs et il est donc possible de les craser !
Ex : si l'on dfinissait 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 prsentation dtaille des principales fonctions MATLAB/Octave, voir les chapitres ddis plus loin
("Fonctions de base", "Fonctions matricielles").
L'utilisateur a donc la possibilit de crer ses propres fonctions au moyen de M-files (voir chapitre "Fonctions").
1.6.1 Gnralits
La fentre "Command Window" apparat donc automatiquement ds que MATLAB ou Octave est dmarr (voir
illustrations plus haut). Nous prsentons ci-dessous quelques commandes permettant d'agir sur cette fentre.
more on|off
Activation ou dsactivation du mode de dfilement "pagin" (contrl) dans la fentre "Command Window".
Par dfaut le dfilement n'est pas pagin dans MATLAB ( off ). Sous Octave, cela dpend des versions.
Dans Octave, cette commande positionne la valeur retourne par la fonction built-in
page_screen_output (respectivement 0 pour off et 1 pour on ).
PS1('specification')
Changement du prompt primaire de Octave ("invite" dans la fentre de commande Octave)
La specification est une chane pouvant notamment comporter les squences spciales suivantes :
\w : chemin complet (path) du rpertoire courant
\# : numro de commande (numro incrmental)
\u : nom de l'utilisateur courant
\H : nom de la machine courante
Ex : la commande PS1('\w \#> ') modifie le prompt de faon qu'il affiche le rpertoire courant suivi
d'un espace puis du numro 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 fentre de commande (clear command window), et positionne le curseur en
haut gauche
home positionne le curseur en haut gauche, sans effacer la fentre de commande sous MATLAB
15
MATLAB et Octave - 1. Notions de base
format loose|compact
Activation ou suppression de l'affichage de lignes vides supplmentaires dans la fentre de commande (pour
une mise en plage plus ou moins are). MATLAB et Octave sont par dfaut en mode loose , donc affichage
de lignes vides activ
Caractre Description
; Suivie de ce caractre, une commande sera normalement excute (sitt enter frapp),
mais son rsultat ne sera pas affich. Caractre faisant par la mme occasion office de
sparateur de commandes lorsque l'on saisit plusieurs commandes sur la mme ligne
Utilis aussi comme caractre de sparation des lignes d'une matrice lors de la dfinition
de ses lments
, Caractre utilis comme sparateur de commande lorsque l'on souhaite passer plusieurs
commandes sur la mme ligne
Utilis aussi pour dlimiter les indices de ligne et de colonne d'une matrice
Utilis galement pour sparer les diffrents paramtres d'entre et de sortie d'une
fonction
... Utilis en fin de ligne lorsque l'on veut continuer une instruction sur la ligne suivante
("ellipsis") (sinon la frappe de enter excute l'instruction)
\
% ou # Ce qui suit est considr comme un commentaire (non valu par MATLAB/Octave). Utile
pour documenter un script ou une fonction (M-file)
Lorsqu'il est utilis dans une chane, le caractre % dbute une dfinition de format (voir
chapitre "Entres-sorties")
Les caractres 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-Franais", rappelons que l'on forme ainsi les
caractres suivants qui sont importants sous MATLAB (si vous ne trouvez pas la touche AltGr , vous pouvez utiliser
la place la combinaison ctrl-alt ) :
16
MATLAB et Octave - 1. Notions de base
Touche Description
Pour copier/coller du texte (commandes, donnes...) dans la fentre de commandes, MATLAB et Octave offrent les
mmes possibilits mais avec une interface diffrente.
Fonction MATLAB Octave GUI Octave CLI Octave CLI Octave CLI
(Win/Lin (Win/Lin Windows Linux macOS
/macOS) /macOS) (X-Window)
Copier la Edit > Copy ou Edit > Copy ou Slectionner, puis La slection Edit > Copy ou
slection ctrl-C ctrl-C enter . courante est cmd-C
dans le Ou slectionner automatiquement
"presse- (sur macOS (sur macOS puis bouton copie dans le Si on a une souris
papier" cmd-C ) cmd-C ) clic-droite "presse-papier" 3 boutons, on
peut aussi utiliser
la technique
Linux
Coller le Edit > Paste ou Edit > Paste ou Bouton Bouton Edit > Paste ou
contenu ctrl-V ctrl-V clic-droite clic-milieu cmd-V
du
"presse- (sur macOS (sur macOS Pour que cela Si on a une souris
papier" cmd-V ) cmd-V ) fonctionne, le 3 boutons, on
la position raccourci de peut aussi utiliser
courante lancement Octave la technique
du curseur doit tre Linux
d'insertion correctement
configur (voir
chapitre
"Installation de
Octave sous
Windows")
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".
17
MATLAB et Octave - 1. Notions de base
s'il y a une ambiguit avec une autre commande/fonction/variable (commenant par les mmes caractres),
MATLAB affiche alors directement un "menu droulant" contenant les diffrentes possibilits ; on slectionne
celle que l'on souhaite avec curseur-haut ou curseur-bas , puis on valide avec enter
si Octave ne complte rien, c'est qu'il y a une ambiguit avec une autre commande/fonction/variable
(commenant par les mmes caractres) : on peut alors complter le nom au clavier, ou frapper une seconde
fois tab pour qu'Octave affiche les diffrentes possibilits (et partiellement complter puis represser tab ...)
On peut choisir le format d'affichage des nombres dans la fentre "Command Window" l'aide de la commande
format :
format {short {e}} Affichage par dfaut : notation dcimale fixe 5 72.346
chiffres significatifs 7.2346e+001
Avec option e => notation dcimale flottante avec
exposant
format rat Approximation par des expressions rationnelles 3.333... s'affichera 10/3
(quotient de nombres entiers)
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
Pour un contrle plus pointu au niveau du formatage l'affichage, voir les fonctions sprintf (string print
formated) et fprintf (file print formated) (par exemple au chapitre "Entres-sorties").
18
MATLAB et Octave - 1. Notions de base
Tous les packages Octave-Forge sont recenss et disponible en tlchargement via le dpt (repository) officiel
http://octave.sourceforge.net/packages.php. L'installation et l'utilisation d'un package consiste :
Les tapes 1. et 2. peuvent tre combines avec la nouvelle option -forge (commande pkg install
-forge package ).
Si vous dsirez savoir dans quel package est implmente 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
(catgorie "alphabetical"). Le nom du package est spcifi entre crochets cot du nom de la fonction.
S'agissant des packages installs, la commande which fonction vous indiquera dans quel package ou quel
oct-file la fonction spcifie est implmente, ou s'il s'agit d'une fonction built-in.
Nous dcrivons ci-dessous les commandes de base relatives l'installation et l'usage de packages Octave (voir
help pkg pour davantage de dtails).
pkg list
Cette commande affiche la liste des packages installs. Outre le nom de chaque package, on voit en outre si
ceux-ci sont chargs (signal par * ) ou non, leur numro de version et leur emplacement.
Avec [USER_PACKAGES, SYSTEM_PACKAGES]= pkg('list') on stocke sur 2 tableaux cellulaires la liste et
description des packages installs respectivement de faon locale (utilisateur courant) et globale (tous les
utilisateurs de la machine)
news package
Affiche le document release notes du package spcifi (i.e. les nouveauts apportes par chaque version)
Si Octave a t dmarr en mode super utilisateur (avec sudo octave sous Linux ou macOS), le
package est install par dfaut de faon globale (i.e. pour tous les utilisateurs de la machine), moins de
spcifier l'option -local . Si Octave a t dmarr depuis un compte non privilgi, l'installation s'effectue
par dfaut pour l'utilisateur courant (i.e. dpos dans le dossier octave se trouvant dans le "profile" de
l'utilisateur), moins de spcifier l'option -global . Dans le "profile" galement, un fichier
.octave_packages rpertorie les packages locaux de l'utilisateur.
19
MATLAB et Octave - 1. Notions de base
Avec l'option -auto , le package est install en mode "autoload", c'est--dire qu'il sera disponible, dans
les sessions Octaves ultrieures, sans devoir le "charger".
L'option -verbose est utile pour mieux comprendre ce qui se passe quand l'installation d'un package
pose problme.
Notez que la plupart des packages tant crits en C/C++, leur installation par cette procdure requiert la
prsence d'outils de compilation (p.ex. MinGW sous Windows, Apple XCode sous macOS...)
pkg update
Tente de mettre jour l'ensemble des packages partir de SourceForge (ncessite connexion Internet)
a) pkg rebuild
b) pkg rebuild -noauto package(s)
a) Cette commande reconstruit la base de donne des packages partir des rpertoires de packages trouvs
dans l'arborescence d'installation. Si l'on dplace le dossier d'installation Octave, il est ensuite ncessaire le
lancer cette commande.
b) En plus de la reconstruction de la base de donne des packages, on dsactive ici l'autoload de certains
package(s) partir des prochaines sessions
le package communment appel " octave " propos sur les dpts (repositories) des diffrentes distributions
Linux (Debian, Ubuntu, RedHat, Fedora...) ne contient plus que le Octave core (noyau Octave), donc sans les
extensions/packages Octave-Forge (voir chapitre "Installation de Octave-Forge sous GNU/Linux")
dans la mesure o vous n'avez pas install Octave vis un dpt alternatif (PPA), avant de tenter d'installer
des "packages Octave" selon la technique dcrite ci-dessus, commencez par voir si le dpt de votre distribution
GNU/Linux ne propose pas le(s) package(s) que vous cherchez, sous le nom " octave-package " (c'est le cas
de l'architecture Octave sous Ubuntu depuis Ubuntu 9.04)
20
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
Les MAT-files sont des fichiers binaires de variables qui sont identifiables sous MATLAB par leur extension *.mat
( ne pas confondre avec les "M-files" qui sont des fichiers-texte de scripts ou de fonctions et qui ont l'extension
*.m ), alors qu'avec Octave ils n'ont par dfaut pas d'extension.
Sous Octave, le format et version des MAT-files dpend de la valeur affecte la fonction built-in Octave
save_default_options :
lorsque Octave est dmarr avec l'option --traditional , la valeur de "save_default_options" est
-mat-binary qui dsigne le format binaire de workspaces MATLAB V6 et suprieur
mais lorsque Octave est dmarr sans option particulire, la valeur de "save_default_options" est -text , ce
qui veut dire que les fichiers de variables sont sauvegards dans un format texte propre Octave et non lisible
par MATLAB ; dans ce cas il peut tre fort utile, si l'on jongle souvent entre Octave et MATLAB, de changer ce
rglage en dfinissant la commande suivante dans son prologue Octave : save_default_options('-
mat-binary')
une autre possibilit consiste spcifier explicitement le format lorsque l'on passe la commande save (voir
ci-dessous), par exemple: save -mat-binary MAT-file.mat
save {format et option(s)} MAT-file {variable(s)} , ou Save Workspace ou File > Save
Workspace As
Sauvegarde, dans le MAT-file spcifi, toutes les variables dfinies et prsentes en mmoire, ou seulement de
la(les) variable(s) spcifies.
MATLAB : Si l'on ne spcifie pas de nom de MAT-file, cette commande cre un fichier de nom
matlab.mat dans le rpertoire courant. Si l'on spcifie un nom sans extension, le fichier aura
l'extension .mat . Si le MAT-file spcifi existe dj, il est cras, moins que l'on utilise l'option
-append qui permet d'ajouter des variables dans un fichier de workspace existant. Sans spcifier
d'option particulire, MATLAB V7 utilise un nouveau format binaire -V7 spcifique cette version.
Octave : Il est ncessaire de spcifier un nom de MAT-file. Si l'on ne spcifie pas d'extension, le
fichier n'en aura pas (donc pas d'extension .mat , contrairement MATLAB => nous vous conseillons
de prendre l'habitude de spcifier l'extension .mat ). Sans spcifier d'option particulire, Octave 3
utilise le format dfini par la fonction built-in save_default_options (voir plus haut)
1
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
celles spcifies.
MATLAB : Il n'est pas besoin de donner l'extension .mat lorsque l'on spcifie un MAT-file. Si l'on
ne spcifie pas de MAT-file, cette commande charge le fichier de nom matlab.mat se trouvant dans
le rpertoire courant.
Au cours d'une longue session MATLAB (particulirement lorsque l'on cre/dtruit de gros vecteurs/matrices),
l'espace mmoire (workspace) peut devenir trs fragment et empcher la dfinition de nouvelles variables. Utiliser
dans ce cas la commande ci-dessous.
pack
Dfragmente/consolide l'espace mmoire du workspace (garbage collector manuel). MATLAB ralise cela en
sauvegardant toutes les variables sur disque, en effaant la mmoire, puis rechargeant les variables en
mmoire. Cette fonction existe aussi sous Octave pour des raisons de compatibilit avec MATLAB mais ne fait
rien de particulier.
2
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
Important : notez bien que si save -ascii permet de sauvegarder plusieurs variables d'un coup, la
fonction load quant elle ne permet de charger ces donnes que sur une seule variable.
Voici une technique alternative offrant un petit peu plus de finesses (dlimiteur...) :
Un dernier truc simple pour rcuprer des donnes numriques (depuis un fichier texte) sur des variables
MATLAB/Octave consiste enrober 'manuellement' ces donnes dans un M-file (script) et l'excuter.
On voit donc, par cet exemple, que le caractre newline a le mme effet que le caractre ;
pour dlimiter les lignes d'une matrice.
Pour manipuler directement des feuilles de calcul binaires (classeurs) OpenOffice.org Calc (ODS) ou MS Office
Excel (XLS), mentionnons encore les fonctions suivantes :
Finalement, pour raliser des oprations plus sophistiques de lecture/criture de donnes externes, on
renvoie le lecteur au chapitre "Entres-sorties formates" prsentant d'autres fonctions MATLAB/Octave plus
pointues (telles que textread , fscanf , fprintf ...)
3
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
diary off
Dsactive l'enregistrement des commandes subsquentes dans le fichier_texte prcdement spcifi (ou dans
le fichier "diary" si aucun nom de fichier n'avait t spcifi) et ferme ce fichier. Il faut ainsi le fermer pour
pouvoir l'utiliser (le visualiser, diter...)
diary
Passe sans paramtres, cette commande passe de l'tat on off ou vice-versa ("bascule") et permet
donc d'activer/dsactiver volont l'enregistrement dans le journal.
run_history n1 {n2}
Excute la n1 -me commande de l'historique, ou les commandes n1 n2
ctrl-R
Permet de faire une recherche dans l'historique
history_size(0)
Effacera tout l'historique lorsqu'on quittera Octave
Diffrentes fonctions built-in Octave permettent de paramtrer le mcanisme de l'historique (voir l'aide) :
history_file : emplacement et nom du fichier historique (donc par dfaut .octave_hist dans le
profile ou home de l'utilisateur)
history_size : taille de l'historique (nombre de commandes qui sont enregistres, par dfaut 1024)
4
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
2.2.1 Gnralits
MATLAB et Octave procdent de la faon suivante lorsqu'ils valuent les instructions d'un M-File ou ce que saisit
l'utilisateur. Si l'utilisateur fait par exemple rfrence au nom "xxx" :
Cet ordre de recherche entrane que les dfinitions ralises par l'utilisateur priment sur les dfinitions de base de
MATLAB/Octave !
Ex : si l'utilisateur dfinit une variable sqrt=444 , il ne peut plus faire appel la fonction MATLAB/Octave sqrt
(racine carre) ; pour sqrt(2) , MATLAB rechercherait alors le 2e lment du vecteur sqrt qui n'existe pas, ce
qui provoquerait une erreur ; pour restaurer la fonction sqrt , il faut effacer la variable avec clear sqrt .
Il ne faut, par consquent, jamais crer de variables ayant le mme nom que des fonctions MATLAB/Octave
prdfinies. Comme MATLAB/Octave est case-sensitive et que pratiquement toutes les fonctions sont dfinies en
minuscules, on vite ce problme en mettant par exemple en majuscule le 1er caractre du nom pour des variables
qui pourraient occasionner ce genre de conflit.
Pour que vos adaptations du path de recherche MATLAB/Octave soient prises en compte dans les sessions
ultrieures, il est ncessaire de placer ces commandes de changement dans votre prologue MATLAB/Octave (voir
chapitre "Dmarrer et quitter MATLAB ou Octave"). Elles seront ainsi automatiquement appliques au dbut de
chaque session MATLAB/Octave.
Rappelons encore que le path est automatiquement modifi, sous Octave, lors du chargement/dchargement de
packages (voir chapitre "Packages").
{variable =} path
Retourne le "path de recherche" courant.
Voir aussi la fonction pathdef qui retourne le path sous forme d'une seule chane (concatnation de tous
les paths)
addpath('chemin(s)' {,-end})
Cette commande ajoute, en tte du path de recherche courant (ou en queue du path si l'on utilise l'option
-end ), le(s) chemin(s) spcifi(s), pour autant qu'ils correspondent des rpertoires existants.
Ex (ici sous Windows): addpath('Z:/fcts','Z:/fcts bis')
rmpath('chemin1'{,'chemin2'...})
Supprime du path de recherche MATLAB/Octave le(s) chemin(s) spcifi(s).
Ex (ici sous Windows): rmpath('Z:/mes fcts')
genpath('chemin')
Retourne le path form du chemin spcifi et de tous ses sous-rpertoires (rcursivement).
Ex (ici sous Unix): addpath(genpath('/home/dupond/mes_fcts')) ajoute au path de recherche
5
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
path('chemin1'{,'chemin2'})
Commande dangereuse (utiliser plutt addpath ) qui redfinirait (craserait) entirement le path de
recherche en concatnant les paths chemin1 et chemin2. Retourne une erreur si chemin1 et/ou chemin2 ne
correspondent pas des rpertoires existants.
Ex (ici sous Unix): path(path,'/home/dupond/mes_fcts') : dans ce cas ajoute, en queue du path
de recherche courant, le chemin /home/dupond/mes_fcts . Si le chemin spcifi tait dj dfini dans le
path courant, la commande path ne l'ajoute pas une nouvelle fois.
Les commandes en relation avec la gestion du rpertoire courant sont les suivantes :
{variable =} pwd
Retourne le chemin d'accs du rpertoire courant
cd {chemin}
Change de rpertoire courant en suivant le chemin (absolu ou relatif) spcifi. Si ce chemin contient des
espaces, ne pas oublier de l'entourer d'apostrophes. Notez que, passe sans spcifier de chemin, cette
commande affiche sous MATLAB le chemin du rpertoire courant, alors que sous Octave elle renvoie
l'utilisateur dans son rpertoire home.
Ex :
cd mes_fonctions : descend d'un niveau dans le sous-rpertoire "mes_fonctions" (chemin relatif)
cd .. : remonte d'un niveau (chemin relatif)
sous Windows: cd 'Z:/fcts matlab' : passe dans le rpertoire spcifi (chemin absolu)
sous Unix: cd /home/dupond : passe dans le rpertoire spcifi (chemin absolu)
6
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
7
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
dir {chemin/}{fichier(s)}
ls {chemin/}{fichier(s)}
Affiche la liste des fichiers du rpertoire courant, respectivement la liste du(des) fichier(s) spcifis du
rpertoire courant ou du rpertoire dfini par le chemin spcifi.
On peut aussi obtenir des informations plus dtailles sur chaque fichiers en passant par une structure avec
l'affectation structure = dir
Sous Octave, la prsentation est diffrente selon que l'on utilise dir ou ls . En outre avec Octave sous
Linux, on peut faire ls -l pour un affichage dtaill la faon Unix (permissions, propritaire, date,
taille...)
readdir('chemin')
glob('{chemin/}pattern')
Retourne, sous forme de vecteur-colonne cellulaire de chanes, la liste de tous les fichiers/dossiers du
rpertoire courant (ou du rpertoire spcifi par chemin). Avec glob , on peut filtrer sur les fichiers dont le
nom correspond la pattern indique (dans laquelle on peut utiliser le caractre de substitution * )
what {chemin}
Affiche la liste des fichiers MATLAB/Octave (M-files, MAT-files et P-files) du rpertoire courant (ou du
rpertoire dfini par le chemin spcifi)
type {chemin/}fichier
Affiche le contenu du fichier-texte spcifi.
copyfile('fich_source', 'fich_destin')
Effectue une copie du fich_source spcifi sous le nom fich_destin
delete fichier(s)
unlink('fichier')
Dtruit le(s) fichier(s) spcifi(s)
8
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
a) Dans le cas d'un M-file, celui-ci est ouvert dans l'diteur MATLAB/Octave
b) Dans le cas d'un fichier de workspace .mat , ses variables sont charges sur les diffrents champs de la
structure spcifie
c) Si l'extension .ext est autre, c'est l'application externe propre au fichier qui est invoque. Par exemple
pour un fichier .html , celui-ci est ouvert dans la navigateur web par dfaut. Sous Windows, s'il s'agit d'un
fichier .exe , il est excut en tant qu'application.
computer
Retourne sur une chane le type de machine sur laquelle on excute MATLAB/Octave. On y voit notamment
apparatre le systme d'exploitation.
version
Retourne sur une chane le numro de version de MATLAB/Octave que l'on excute
ver
Retourne plusieurs lignes d'information : version de MATLAB/Octave, systme d'exploitation, liste des
toolboxes MATLAB installes, respectivement des packages Octave installs
get_home_directory
Retourne le chemin du rpertoire de base de l'utilisateur
matlabroot
OCTAVE_HOME
Retourne le chemin de la racine du dossier o est install MATLAB ou Octave
variable = getenv('variable_environnement')
Retourne la valeur de la variable d'environnement indique. Les noms de ces variables, propres au systme
d'exploitation, sont gnralement en majuscule.
Il ne faut pas confondre ces variables d'environnement systme avec les variables spcifiques Octave
produites (depuis Octave 2.9) par des fonctions built-ins, p.ex: OCTAVE_VERSION , EDITOR ...
setenv('variable_environnement', 'valeur')
putenv('variable_environnement', 'valeur')
Dfinition ou modification d'une variable d'environnement.
9
MATLAB et Octave - 2. Workspace, environnement, commandes gnrales
status = unsetenv('variable_environnement')
Dtruit la variable d'environnement. Le status de retour sera 0 si cela s'est bien pass.
10
MATLAB et Octave - 3. Scalaires, constantes, oprateurs et fonctions de base
MATLAB/Octave offre un certain nombre de constantes utiles. Celles-ci sont implmentes par des "built-in
functions" . Le tableau ci-dessous numre les constantes les plus importantes.
Constante Description
NA Valeur manquante
realmin Environ 2.2e-308 : le plus petit nombre positif utilisable (en virgule flottante double
prcision)
realmax Environ 1.7e+308 : le plus grand nombre positif utilisable (en virgule flottante double
prcision)
eps Environ 2.2e-16 : c'est la prcision relative en virgule flottante double prcision (ou le
plus petit nombre reprsentable par l'ordinateur qui est tel que, additionn un
nombre, il cre un nombre juste suprieur)
true Vrai. Correspond 1 , mais notez que n'importe quelle valeur numrique diffrente
de 0 ou chane non vide est aussi assimile "vrai"
Ex : si nb vaut 0 , la squence if nb, disp('vrai'), else,
disp('faux'), end retourne "faux",
mais si nb vaut n'importe quelle autre valeur, elle retourne "vrai"
false Faux. Correspond 0 . Une chane vide est aussi assimile "faux"
MATLAB/Octave manipule en outre des variables spciales de nom prdfini. Les plus utiles sont dcrites dans le
tableau ci-dessous.
Variable Description
ans Variable sur laquelle MATLAB retourne le rsultat d'une expression qui n'a pas t
affecte une variable, agissant donc comme nom de variable par dfaut pour les
rsultats
1
MATLAB et Octave - 3. Scalaires, constantes, oprateurs et fonctions de base
+ Addition 4
ou plus(v1, v2, v3 ...)
- Soustraction 4
ou minus(v1, v2)
* Multiplication 3
ou mtimes(v1, v2, v3
...)
/ Division standard 3
ou mrdivide(v1, v2)
\ Division gauche 3
ou mldivide(v1, v2) Ex : 14/7 est quivalent 7\14
^ ou ** Puissance 2
ou mpower(v1, v2) Ex : 4^2 => 16, 64^(1/3) => 4 (racine cubique)
Les expressions sont values de gauche droite avec l'ordre de prcdence classique : puissance, puis
multiplication et division, puis addition et soustraction. On peut utiliser des parenthses ( ) pour modifier cet ordre
(auquel cas l'valuation s'effectue en commenant par les parenthses intrieures).
Ex : a-b^2*c est quivalent a-((b^2)*c) ; mais 8 / 2*4 retourne 16, alors que 8 /(2*4) retourne 1
L'usage des fonctions plutt que des oprateurs s'effectue de la faon suivante :
Ex : la place de 4 - 5^2 on pourrait par exemple crire minus(4,mpower(5,2))
2
MATLAB et Octave - 3. Scalaires, constantes, oprateurs et fonctions de base
Les oprateurs de test ci-dessous "pourraent" tre appliqus des chanes de caractres, mais pour autant que la
taille des 2 chanes (membre de gauche et membre de droite) soit identique ! Cela retourne alors un vecteur logique
(avec autant de 0 ou de 1 que de caractres dans ces chanes). Pour tester l'galit exacte de chanes de longueur
quelconque, on utilisera plutt les fonctions strcmp ou isequal (voir chapitre "Chanes de caractres").
Les oprateurs relationnels MATLAB/Octave sont les suivants (voir help relop ) :
Ex :
si l'on a a=3, b=4, c=3 , l'expression a==b ou la fonction eq(a,b) retournent alors "0" (faux), et a==c ou
> eq(a,c) retournent "1" (vrai)
si l'on dfinit le vecteur A=1:5 , l'expression A>3 retourne alors le vecteur [0 0 0 1 1]
le test 'abc'=='axc' retourne le vecteur [1 0 1] ; mais le test 'abc'=='vwxyz' retourne une erreur (chanes
de tailles diffrentes)
expression1 & expression2 ET logique. Si les expressions sont des tableaux, retourne un
and (expression1, expression2) tableau
(rappel: 0 ET 0 => 0 ; 0 ET 1 => 0 ; 1 ET 1 => 1)
expression1 && expression2 ET logique "short circuit". A la diffrence de & ou and , cet
oprateur est plus efficace, car il ne prend le temps d'valuer
expression2 que si expression1 est vraie.
En outre:
- sous Octave: retourne un scalaire mme si les expressions
sont des tableaux
- sous MATLAB: n'accepte pas que les expressions soient
des tableaux
3
MATLAB et Octave - 3. Scalaires, constantes, oprateurs et fonctions de base
Pour des oprandes binaires, voir les fonctions bitand , bitcmp , bitor , bitxor ...
4
MATLAB et Octave - 3. Scalaires, constantes, oprateurs et fonctions de base
Les principales fonctions mathmatiques disponibles sous MATLAB/Octave sont les suivantes :
Fonction Description
log(var) Logarithme naturel de var (de base e), respectivement de base 10, et de base 2
log10(var)
log2(var) Ex : log(exp(1)) => 1, log10(1000) => 3, log2(8) => 3
Gnration de nombres alatoires rels compris entre 0.0 et 1.0 selon une
rand distribution uniforme standard :
rand(n) - gnre un nombre alatoire
rand(n,m) - gnre une matrice carre n x n de nombres alatoires
- gnre une matrice n x m de nombres alatoires
5
MATLAB et Octave - 3. Scalaires, constantes, oprateurs et fonctions de base
fix(var) Troncature l'entier, dans la direction de zro (donc 4 pour 4.7, et -4 pour -4.7)
round(var) Arrondi l'entier le plus proche de var
floor(var) Le plus grand entier qui est infrieur ou gal var
ceil(var) Le plus petit entier plus grand ou gal var
Ex :
fix(3.7) et fix(3.3) => 3, fix(-3.7) et fix(-3.3) => -3
round(3.7) => 4, round(3.3) => 3, round(-3.7) => -4,
round(-3.3) => -3
floor(3.7) et floor(3.3) => 3, floor(-3.7) et floor(-3.3)
=> -4
ceil(3.7) et ceil(3.3) => 4, ceil(-3.7) et ceil(-3.3) => -3
mod(var1,var2) Fonction var1 "modulo" var2
rem(var1,var2) Reste ("remainder") de la division de var1 par var2
Remarques:
- var1 et var2 doivent tre des scalaires rels ou des tableaux rels de mme
dimension
- rem a le mme signe que var1, alors que mod a le mme signe que var2
- les 2 fonctions retournent le mme rsultat si var1 et var2 ont le mme signe
idivide(var1, var2, Division entire. Fonction permettant de dfinir soi-mme la rgle d'arrondi.
'regle')
abs(var) Valeur absolue (positive) de var
Voir help elfun o sont notamment encore dcrites : autres fonctions trigonomtriques (scante, coscante,
cotangente), fonctions hyperboliques, manipulation de nombres complexes... Et voir encore help specfun pour
une liste des fonctions mathmatiques spcialises (Bessel, Beta, Jacobi, Gamma, Legendre...).
Fonction Description
var2 = single(var1) Retourne, dans le cas o var1 est une variable relle double
var4 = double(var3) prcision ou entire, une variable var2 en simple prcision
Retourne, dans le cas o var3 est une variable relle simple
prcision ou entire, une variable var4 en double prcision
int8 , int16 , int32 , int64 Fonctions retournant des variables de type entiers signs,
respectivement stocks sur 8 bits, 16 bits, 32 bits ou 64 bits
uint8 , uint16 , uint32 , uint64 ou des entiers non signs (unsigned) stocks sur 8 bits, 16 bits,
32 bits ou 64 bits
6
MATLAB et Octave - 3. Scalaires, constantes, oprateurs et fonctions de base
Fonction Description
isepmty(var) Vrai si la variable var est vide (de dimension 1x0), faux sinon.
Notez bien qu'il ne faut ici pas entourer var d'apostrophes,
contrairement la fonction exist .
ischar(var) Vrai si var est une chane de caractres, faux sinon. Ne plus
utiliser isstr qui va disparatre.
exist ('objet' Vrifie si l'objet spcifi existe. Retourne "1" si c'est une
{,'var|builtin|file|dir'}) variable, "2" si c'est un M-file, "3" si c'est un MEX-file, "4" si
c'est un MDL-file, "5" si c'est une fonction builtin, "6" si c'est
un P-file, "7" si c'est un directoire. Retourne "0" si aucun objet
de l'un de ces types n'existe.
Notez bien qu'il faut ici entourer objet d'apostrophes,
contrairement la fonction isempty !
Les fonctions logiques spcifiques aux tableaux (vecteurs, matrices N-D) sont prsentes au chapitre "Fonctions
matricielles".
7
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
srie= dbut:fin
srie= colon(dbut,fin)
Cre une srie numrique linaire dbutant par la valeur dbut, auto-incrmente de "1" et se terminant par
la valeur fin. Il s'agit donc d'un vecteur ligne de dimension 1xM (o M=fin-dbut+1). Si fin<dbut, cre une
srie vide (vecteur de dimension 1x0)
Ex :
v=1:9 cre le vecteur v=[1 2 3 4 5 6 7 8 9]
v(1:2:end) retourne le vecteur [1 3 5 7 9]
x=1.7:4.6 cre le vecteur x=[1.7 2.7 3.7]
srie= dbut:pas:fin
srie= colon(dbut,pas,fin)
Cre une srie numrique linaire (vecteur ligne) dbutant par la valeur dbut, incrmente ou dcrmente
du pas spcifi et se terminant par la valeur fin. Cre une srie vide (vecteur de dimension 1x0) si fin<dbut
et que le pas est positif, ou si fin>dbut et que le pas est ngatif
Ex :
x=0:0.2:pi gnre le vecteur x=[0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0]
-4:-2:-11.7 retourne le vecteur [-4 -6 -8 -10]
Lorsqu'on connait la valeur de dbut, la valeur de fin et que l'on souhaite gnrer des sries linaires ou
logarithmique de nbval valeurs, on peut utiliser les fonctions suivantes :
Sous Octave depuis la version 3, la syntaxe dbut:pas:fin (plutt qu'avec linspace ) est particulirement
intressante au niveau utilisation mmoire ! En effet, quelle que soit la taille de la srie qui en dcoule, celle-ci
n'occupera en mmoire que 24 octets (c'est--dire l'espace de stockage ncessaire pour stocker en double prcision
les 3 valeurs dfinissant la srie) !
Ex : s1=0:10/99:10; et s1=linspace(0,10,100); sont fonctionellement identiques, mais :
- sous MATLAB 7.x : les variables s1 et s2 consomment toutes deux 800 octets (100 rels double prcision)
- alors que sous Octave 3.x : s2 consomme aussi 800 octets, mais s1 ne consomme que 24 octets !!!
noter cependant que, selon son usage, cette srie est susceptible d'occuper aussi 800 octets (p.ex. s1' ou
s1*3 )
Pour construire des sries d'un autre type (gomtrique, etc...), il faudra raliser des boucles for ou while ...
(voir chapitre "Structures de contrle").
1
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
RAPPEL IMPORTANT: les lments du vecteurs sont numrots par des entiers dbutant par la valeur 1 (et non
pas 0, comme dans la plupart des autres langages de programmation).
On prsente ci-dessous les principales techniques d'affectation de vecteurs par l'usage des crochets [ ] , et
adressage de ses lments par l'usage des parenthses ( ) .
Syntaxe Description
vec= [val1 val2 val3 Cration d'un vecteur ligne vec contenant les valeurs val, variables var,
...] ou expressions expr spcifies.
Celles-ci doivent tre dlimites par des espace , tab ou , (virgules).
= [val var expr ...]
Ex : v1=[1 -4 5] , v2=[-3,sqrt(4)] et v3=[v2 v1 -3]
retournent v3=[-3 2 1 -4 5 -3]
vec= [val ; var ; expr Cration d'un vecteur colonne vec contenant les valeurs val (ou variables
...] var, ou expressions expr) spcifies.
Celles-ci doivent tre dlimites par des ; (point-virgules) (1re forme
= [val1 ci-contre) et/ou par la touche <enter> (2e forme).
val2 La 3me forme ci-contre consiste dfinir un vecteur ligne et le
... ] transposer avant de l'affecter vec.
2
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
for k=i{:p}:j Initialise les lments (spcifis par la srie i{:p}:j) du vecteur ligne vec
vec(k)=expression par l'expression spcifie
end
Ex : for i=2:2:6, v9(i)=i^2, end cre le vecteur v9=[0 4 0 16 0
36] (les lments d'indice 1, 3 et 5 n'tant pas dfinis, ils sont
automatiquement initialiss 0)
vec(indices)=[] Destruction des lments indics du vecteur vec (qui est redimensionn
en consquence)
3
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
4.3 Matrices
Une matrice MATLAB/Octave est un tableau rectangulaire 2 dimensions de NxM lments (N lignes et M
colonnes) de types nombres rels ou complexes ou de caractres. La prsentation ci-dessous des techniques
d'affectation de matrices (avec les crochets [ ] ) et d'adressage de ses lments (parenthses ( ) ) est donc
une gnralisation 2 dimensions de ce qui a t vu pour les vecteurs 1 dimension (chapitre prcdent), la seule
diffrence tant que, pour se rfrer une partie de matrice, il faut spcifier dans l'ordre le(s) numro(s) de ligne puis
de colonne(s) spars par une virgule " , ".
Comme pour les vecteurs, les indices de ligne et de colonne sont des valeurs entires dbutant par 1 (et non pas 0
comme dans la plupart des autres langages).
Syntaxe Description
mat= [v11 v12 ... v1m ; Dfinit une matrice mat de n lignes x m colonnes dont les lments
v21 v22 ... v2m ; sont initialiss aux valeurs vij. Notez bien que les lments d'une
... ... ... ... ; ligne sont spars par des espace , tab ou , (virgules), et que
vn1 vn2 ... vnm ] les diffrentes lignes sont dlimites par des ; (point-virgules)
et/ou par la touche enter . Il faut qu'il y aie exactement le mme
nombre de valeurs dans chaque ligne, sinon l'affectation choue.
mat= [vco1 vco2 ...] Construit la matrice mat par concatnation de vecteurs colonne
ou mat= [vli1 ; vli2 ; ...] vcoi ou de vecteurs ligne vlii spcifis. Notez bien que les
sparateurs entre les vecteurs colonne est l' espace , et celui entre
les vecteurs ligne est le ; ! L'affectation choue si tous les vecteurs
spcifis n'ont pas la mme dimension.
[mat1 mat2 {mat3...}] ou Concatnation de matrices (ou vecteurs). Dans le premier cas, on
horzcat(mat1, mat2 concatne cte cte (horizontalement) les matrices mat1, mat2,
{,mat3...}) mat3... Dans le second, on concatne verticalement les matrices
mat4, mat5, mat6... Attention aux dimensions qui doivent tre
respectivement: cohrentes : dans le premier cas toutes les matrices doivent avoir le
[mat4; mat5 {; mat6...}] mme nombre de lignes, et dans le second cas le mme nombre de
ou colonnes.
vertcat(mat1, mat2
{,mat3...}) Ex : ajout devant la matrice m2 ci-dessus de la colonne
v3=[44;55] : avec m2=[v3 m2] ou avec
m2=horzcat(v3,m2) , ce qui donne m2=[44 9 8 7 ; 55 1 4 7]
ones(n{,m}) Renvoie une matrice de n lignes x m colonnes dont tous les
lments sont gaux "1". Si m est omis, cre une matrice carre
de dimension n
4
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
Applique une matrice mat (qui peut ne pas tre carre), cette
fonction retourne un vecteur-colonne form partir des lments
de la diagonale de cette matrice
mat2= repmat(mat1,M,N) Renvoie une matrice mat2 forme partir de la matrice mat1
duplique en "tuile" M fois verticalement et N fois horizontalement
Ex : repmat(eye(2),1,2) retourne [1 0 1 0 ; 0 1 0 1]
[n m]= size(var) La premire forme renvoie, sur un vecteur ligne, la taille (nombre n
taille= size(var,dimension) de lignes et nombre m de colonnes) de la matrice ou du vecteur
var. La seconde forme renvoie la taille de var correspondant la
n= rows(mat_2d) dimension spcifie (dimension= 1 => nombre de lignes, 2 =>
m= columns(mat_2d) nombre de colonnes).
Ex :
si m4=[1 2;3 4] , alors m4(:) retourne [1 ; 3 ; 2 ; 4]
mat(:)=val rinitialise tous les lments de mat la valeur val
5
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
On rapelle ici les fonctions load {-ascii} fichier_texte et save -ascii fichier_texte variable
(dcrites au chapitre "Workspace") qui permettent d'initialiser une matrice partir de valeurs numriques provenant
d'un fichier_texte, et vice-versa.
6
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
Ex :
[1 2]*[3;4] ou [1 2]*[3 4]' produit le scalaire "11" (mais [1
2]*[3 4] retourne une erreur!)
2*[3 4] ou [3 4]*2 retournent [6 8]
.* ou fonction Produit lments par lments. Les arguments doivent tre des
times(m1,m2,m3,...) vecteurs ou matrices de mme dimension, moins que l'un des deux ne
soit un scalaire (auquel cas c'est identique l'oprateur * ).
Si "A" est une matrice carre NxN et "B" est un vecteur colonne Nx1,
A\B est quivalent inv(A)*B et il en rsulte un vecteur "X" de
dimension Nx1
S'il y a surdtermination, c'est--dire que "A" est une matrice MxN o
M>N et B est un vecteur colonne de Mx1, l'opration A\B s'effectue
alors selon les moindres carrs et il en rsulte un vecteur "X" de
dimension Nx1
./ ou fonction Division lments par lments. Les 2 arguments doivent tre des
rdivide(m1,m2) vecteurs ou matrices de mme dimension, moins que l'un des deux ne
soit un scalaire auquel cas la division applique le scalaire sur tous les
lments du vecteur ou de la matrice. Les lments de l'objet de gauche
sont diviss par les lments de mme indice de l'objet de droite
7
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
^ ou fonction mpower Elvation la puissance matricielle. Il faut distinguer les 2 cas suivants
(dans lesquels "M" doit tre une matrice carre et "scal" un scalaire) :
8
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
vec = mat(:) Dverse la matrice mat colonne aprs colonne sur le vecteur-colonne
vec
sort(var {,mode}) Fonction de tri par lments (voir aussi la fonction unique dcrite plus
bas). Le mode de tri par dfaut est 'ascend' (tri ascendant), moins
sort(var, d {,mode})
que l'on spcifie 'descend' pour un tri descendant
sortrows(mat Trie les lignes de la matrice mat dans l'ordre croissant des valeurs de la
{,no_col}) premire colonne, ou dans l'ordre croissant des valeurs de la colonne
no_col.
S'il s'agit d'une matrice cellulaire, les lments de la colonne de tri
doivent tre de type chane !
9
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
flip(tableau, dim) Retourne le tableau (qui peut avoir n'importe quelle dimension) selon sa
flipdim(tableau, dim) dimension dim
Fonction Description
cross(vec1,vec2) Calcule la produit vectoriel (en 3D) des 2 vecteurs vec1 et vec2 (ligne ou
colonne, mais qui doivent avoir 3 lments !).
inv(mat) Inversion de la matrice carre mat. Une erreur est produite si la matrice
est singulire (ce qui peut tre test avec la fonction cond qui est plus
appropri que le test du dterminant)
min(var {,d}) Appliques un vecteur ligne ou colonne, ces fonctions retournent le plus
max(var {,d}) petit, resp. le plus grand lment du vecteur. Appliques une matrice
var, ces fonctions retournent :
10
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
eig , eigs , svd , svds , Fonctions en relation avec vecteurs propres et valeurs propres (voir
cond , condeig ... help)
vec = find(mat) Recherche des indices des lments non-nuls de la matrice mat
Dans la 1re forme, MATLAB/Octave retourne un vecteur-colonne vec
[v1, v2 {, v3 }] = find(mat) d'indices une dimension en considrant les lments de la matrice mat
colonne aprs colonne
Dans la seconde forme, les vecteurs-colonne v1 et v2 contiennent
respectivement les numros de ligne et de colonne des lments non nuls
; les lments eux-mmes sont ventuellement dposs sur le vecteur-
colonne v3
Remarques importantes :
la place de mat vous pouvez dfinir une expression logique (voir
aussi le chapitre "Indexation logique" ci-dessous) ! Ainsi par exemple
find(isnan(mat)) retournera un vecteur-colonne contenant les
11
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
indices de tous les lments de mat qui sont indtermins (gaux NaN).
Le vecteur vec rsultant permet ensuite d'adresser les lments
concerns de la matrice, pour les rcuprer ou les modifier. Ainsi par
exemple mat(find(mat<0))=NaN remplace tous les lments de mat
qui sont infrieurs 0 par la valeur NaN.
unique(mat) Retourne un vecteur contenant les lments de mat tris dans un ordre
croissant et sans rptitions. Si mat est une matrice ou un vecteur-
colonne, retourne un vecteur-colonne ; sinon (si mat est un vecteur-ligne),
retourne un vecteur-ligne. (Voir aussi les fonctions sort et sortrows
dcrites plus haut).
mat peut aussi tre un tableau cellulaire (contenant par exemple des
chanes)
Ex :
si m=[5 3 8 ; 2 9 3 ; 8 9 1] , la fonction unique(m) retourne
alors [1 ; 2 ; 3 ; 5 ; 8 ; 9]
si a={'pomme','poire';'fraise','poire';
'pomme','fraise'} , alors unique(a) retourne
{'fraise';'poire';'pomme'}
Le vecteur rsultant sera de type colonne, moins que var1 et var2 soient
tous deux de type ligne.
var1 et var2 peuvent tre des tableaux cellulaires (contenant par exemple
des chanes)
Sous Octave, var1 et var2 peuvent tre des matrices numriques, alors
que MATLAB est limit des vecteurs numriques
Ex :
si a={'pomme','poire';'fraise','cerise'} et
b={'fraise','abricot'} , alors
- setdiff(a,b) retourne {'cerise';'poire';'pomme'}
- union(m1,m2) retourne
{'abricot';'cerise';'fraise';'poire';'pomme'}
si m1=[3 4 ; -1 6 ; 6 3] et m2=[6 -1 9] , alors
intersect(m1,m2) retourne [-1 6]
12
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
Fonction Description
isequal(mat1,mat2) Retourne le scalaire vrai ("1") si tous les lments de mat1 sont gaux
aux lments de mat2, faux ("0") sinon
isscalar(var) Retourne le scalaire vrai si var est un scalaire, faux si c'est un vecteur ou
isvector(var) tableau 2-dim
Retourne le scalaire vrai si var est un vecteur ou scalaire, faux si tableau
2-dim
iscolumn(var) Retourne le scalaire vrai si var est un vecteur colonne ou scalaire, faux si
isrow(var) tableau 2-dim
Retourne le scalaire vrai si var est un vecteur ligne ou scalaire, faux si
tableau 2-dim
mat3 = Cherche si les valeurs de mat1 sont prsentes dans mat2 : retourne une
ismember(mat1,mat2) matrice mat3 de la mme dimension que mat1 o mat3(i,j)=1 si la valeur
mat1(i,j) a t trouve quelque-part dans dans mat3, sinon mat3(i,j)=0.
Les matrices (ou vecteurs) mat1 et mat2 peuvent avoir des dimensions
diffrentes.
mat1 et mat2 peuvent tre des tableaux cellulaires (contenant par
exemple des chanes)
any(vec) et all(vec) Retourne le scalaire vrai si l'un au moins des lments du vecteur vec n'est
pas nul, respectivement si tous les lments ne sont pas nuls
any(mat) et all(mat)
Comme ci-dessus, mais analyse les colonnes de mat et retourne ses
rsultats sur un vecteur ligne
Introduction
Sous le terme d' "indexation logique" (logical indexing, logical subscripting) on entend la technique d'indexation
par une matrice logique, c'est--dire une matrice boolenne (i.e. exclusivement compose de valeurs true ou
false ). Ces "matrices logiques d'indexation" rsultent le plus souvent :
d'oprations bases sur les "oprateurs relationnels et logiques" (p.ex. == , > , ~ , etc...) (voir le chapitre
"oprateurs de base")
de "fonctions logiques de base" (les fonctions is* , p.ex. isnan ) (voir le chapitre "oprateurs de base")
ainsi que des "fonctions matricielles logiques" (voir ci-dessus)
si la matrice logique est construite " la main" (avec des valeurs 0 et 1), on devra lui appliquer la fonction
logical pour en faire une vraie matrice logique boolenne (voir l'exemple ci-dessous).
Il faudrait en principe que les dimensions de la matrice logique soient identiques celles de la matrice que l'on
indexe (cela engendrant, dans le cas contraire, des diffrences de comportement entre MATLAB et Octave...).
L'avantage de l'indexation logique rside dans le fait qu'il s'agit d'un mcanisme vectoris (donc bien plus efficaces
qu'un traitement bas sur des boucles for ou while ).
Dans ce qui vient d'tre dit, le terme "matrice" dsigne bien entendu galement des tableaux
multidimensionnels ou de simples vecteurs (ligne ou colonne). Et encore mieux : l'indexation logique peut aussi
tre applique des structures et des tableaux cellulaires ! (Voir les exemples spcifiques dans les chapitres
traitant de ces deux types de donnes).
13
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
vec = mat(mat_log)
Examine la matrice mat travers le "masque" de la matrice logique mat_log (de mmes dimensions que mat),
et retourne un vecteur-colonne vec comportant les lments de mat(i,j) o mat_log(i ,j)=true. Les lments
sont dverss dans vec en examinant la matrice mat colonne aprs colonne.
Remarques importantes :
mat_log peut tre (et est souvent !) une expression logique base sur la matrice mat elle-mme. Ainsi, par
exemple, mat(mat>val) (indexation de la matrice mat par la matrice logique produite par mat>val )
retournera un vecteur-colonne contenant tous les lments de mat qui sont suprieurs val.
On peut rapprocher cette fonctionnalit de la fonction find dcrite plus haut. Pour reprendre l'exemple
ci-dessus, mat(find(mat>val)) (indexation de la matrice mat par le vecteur d'indices une
dimension produit par find(mat>val) ) retournerait galement les lments de mat qui sont suprieurs
val.
Ex :
Soit la matrice m=[5 3 8 ; 2 9 3 ; 8 9 1] ; m(m>3) retourne le vecteur-colonne [5 ; 8 ; 9 ; 9 ; 8]
(contenant donc les lments suprieurs 3)
Si l'on construit manuellement une matrice logique m_log1=[1 0 1;0 1 0;1 1 0] , on ne peut pas
faire m(m_log1) , car m_log1 n'est alors pas considr par MATLAB/Octave comme une matrice logique
(boolenne) mais comme une matrice de nombres... et MATLAB/Octave essaie alors de faire de l'indexation
standard avec des indices nuls, d'o l'erreur qui est gnre ! Il faut plutt faire
m_log2=logical(m_log1) (ou m_log2=(m_log1~=0) ), puis m(m_log2) . On peut bien entendu
aussi faire directement m(logical(m_log1)) ou m(logical([1 0 1;0 1 0;1 1 0])) . En effet,
regardez avec la commande whos , les types respectifs de m_log1 et de m_log2 !
Pour liminer les valeurs indtermines (NaN) d'une srie de mesures s=[-4 NaN -2.2 -0.9 0.3 NaN
1.5 2.6] en vue de faire un graphique, on fera s=s(~isnan(s)) ou s=s(isfinite(s)) qui
retournent toutes deux s=[-4 -2.2 -0.9 0.3 1.5 2.6]
mat(mat_log) = valeur
Utilise sous cette forme-l, l'indexation logique ne retourne pas un vecteur d'lments de mat, mais modifie
certains lments de la matrice mat : tous les lments de mat(i,j) o mat_log(i ,j)=true seront remplacs
par la valeur spcifie. Comme cela a t vu plus haut, la matrice logique mat_log devrait avoir les mmes
dimensions que mat, et mat_log peut tre (et est souvent !) une expression logique base sur la matrice mat
elle-mme.
Ex :
En reprenant la matrice m=[5 3 8 ; 2 9 3 ; 8 9 1] de l'exemple ci-dessus, l'instruction
m(m<=3)=-999 modifie la matrice m en remplaant tous les lments infrieurs o gaux 3 par -999 ;
celle-ci devient donc [5 -999 8 ; -999 9 -999 ; 8 9 -999]
L'indexation logique peut aussi tre applique des chanes de caractres pour identifier ou remplacer des
caractres. Soit la chane str='Bonjour tout le monde' . L'affectation str(isspace(str))='_'
remplace dans str tous les caractres espace par le caractre '_' et retourne donc
str='Bonjour_tout_le_monde'
14
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
4.7.1 Gnralits
Lorsque l'on dfinit une chane de caractres (string), celle-ci sera dlimite entre deux apostrophes. Si la
chane contient des apostrophes, le mcanisme d'chappement consiste les ddoubler.
De faon interne, les chanes sont stockes par MATLAB/Octave sur des vecteurs-ligne de type char dans
lesquels chaque caractre de la chane occupe un lment du vecteur. Il est aussi possible de manipuler des
matrices de chanes, comme nous l'illustrons ci-dessous, ainsi que des "tableaux cellulaires" de chanes.
Dans le cas o vous manipuleriez des caractres accentus (ou tout caractre non-ASCII-7bits), prenez note de
la diffrence suivante qui peut conduire des problmes de portage de code :
string(i:j)
Retourne la partie de la chane string comprise entre le i-me et le j-me caractre
Ex : suite l'exemple ci-dessus, section(13:22) retourne la chane "ingnierie"
string(i:end)
quivalent string(i:length(string)) , retourne la fin de la chane string partir du i-me caractre
Ex : suite l'exemple ci-dessus, section(29:end) retourne la chane "environnement"
[s1 s2 s3...]
Concatne horizontalement les chanes s1, s2, s3
Ex : soit s1=' AAA ', s2='CCC ', s3='EEE '
alors [s1 s2 s3] retourne " AAA CCC EEE "
strcat(s1,s2,s3...)
Concatne horizontalement les chanes s1, s2, s3... en supprimant les caractres <espace> terminant les
chanes s1, s2... ("trailing blanks") (mais pas les <espace> commenant celles-ci). Noter que, sous Octave,
cette suppression des espaces n'est implmente qu' partir de la version 3.2.0
Ex : soit s1=' AAA ', s2='CCC ', s3='EEE '
alors strcat(s1,s2,s3) retourne " AAACCCEEE"
mat_string = strvcat(s1,s2,s3...)
15
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
Concatne verticalement les chanes s1, s2, s3... Produit donc une matrice de chanes de caractres
mat_string contenant la chane s1 en 1re ligne, s2 en seconde ligne, s3 en 3me ligne... Les chanes
ventuellement vides sont ignres, c'est--dire ne produisent dans ce cas pas de lignes blanches
(contrairement char ou str2mat ).
Ex :
en utilisant les variables "s1", "s2", "s3" de l'exemple ci-dessus, mat=strvcat(s1,s2,s3) retourne la
matrice de chanes de dimension 3x16 caractres :
Jules Dupond
Albertine Durand
Robert Muller
puis mat=strvcat(mat,'xxxx') permettrait ensuite d'ajouter une ligne supplmentaire cette matrice
pour stocker ces chanes dans un tableau cellulaire, on utiliserait tabl_cel={s1;s2;s3} ou
tabl_cel={'Jules Dupond';'Albertine Durand';'Robert Muller'}
ou pour convertir la matrice de chane ci-dessus en un tableau cellulaire, on utilise
tabl_cel=cellstr(mat)
mat_string = char(s1,s2,s3...)
mat_string = str2mat(s1,s2,s3...)
mat_string = [s1 ; s2 ; s3 ...]
Concatne verticalement les chanes s1, s2, s3... de la mme manire que strvcat , la nuance prs que
les ventuelles chanes vides produisent dans ce cas une ligne vide. La 3me forme ne fonctionne que sous
Octave (MATLAB gnrant une erreur si les chanes s1, s2, s3... n'ont pas toutes la mme longueur)
mat_string(i,:)
mat_string(i,j:k)
Retourne la i-me ligne de la matrice de chanes mat_string,
respectivement la sous-chane de cette ligne allant du j-me au k-me caractre
Ex : en reprenant la matrice "mat" de l'exemple ci-dessus, mat(2,:) retourne "Albertine Durand", et
mat(3,8:13) retourne "Muller"
Si un M-file dfinit des chanes contenant des caractres acccentus (caractres non-ASCII-7bits) et les crit sur
un fichier, l'encodage des caractres dans ce fichier dpend bien entendu de l'encodage du M-file ayant gnr
ce fichier. Si le M-file est encod ISO-latin-1, le fichier produit sera encod ISO-latin1 ; si le M-file est encod
UTF-8, le fichier produit sera encod UTF-8...
Sous Linux et macOS, l'encodage par dfaut est UTF-8 et il n'y a aucun problme particulier, que ce soit avec
MATLAB ou Octave !
Sous Windows, si le M-file est encod UTF-8 et qu'il affiche des chanes dans la console MATLAB/Octave (avec
disp , fprintf ...) :
avec MATLAB (test sous R2014), les caractres accentus ne s'affichent pas proprement
avec Octave 3.2 3.8, ils s'afficheront proprement pour autant que la police de caractres utilise dans
la fentre de commande soit de type TrueType (par exemple Lucida Console) et que l'on ait activ le
code-page Windows UTF-8 avec la commande dos('chcp 65001') ; sous Octave 4.0 l'usage de
caractres accentus n'est officiellement pas support
Notez que, pour la plupart des fonctions ci-dessous, l'argument string peut aussi tre une cellule contenant une
chane ou un tableau cellulaire de chanes !
16
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
Fonction Description
Ex : strmatch('abc', str2mat('def
abc','abc','yyy','abc xxx')) retourne [2 ; 4]
En ajoutant le paramtre 'exact' , ne retourne que [ 2 ]
regexp(mat_string, pattern) Effectue une recherche dans mat_string l'aide du motif dfini
par l'expression rgulire pattern (extrmement puissant...
regexpi(mat_string, pattern) lorsque l'on matrise les expression rgulires Unix). La seconde
forme effecte une recherche "case insensitive" (ne diffrenciant
17
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
pas majuscules/minuscules).
strrep(string,s1,s2) Retourne une copie de la chane string dans laquelle toutes les
occurences de s1 sont remplaces par s2
Ex : strrep('abc//def//ghi/jkl','//','|')
retourne "abc|def|ghi/jkl"
Ex : strsplit('abc//def//ghi/jkl','//') retourne
le vecteur {'abc', 'def', ghi/jkl'}
Ex : ostrsplit('abc/def/ghi*jkl','/*') retourne le
vecteur cellulaire {'abc','def','ghi','jkl'}
[debut fin]= strtok(string,delim) Dcoupe la chane string en 2 parties selon le(s) caractre(s)
de dlimitation numr(s) dans la chane delim ("tokens") : sur
debut est retourne la premire partie de string (caractre de
dlimitation non compris), sur fin est retourne la seconde
partie de string (commenant par le caractre de dlimitation).
Si le caractre de dlimitation est tab , il faudra entrer ce
caractre tel quel dans delim (et non pas '\t' qui serait
interprt comme les 2 dlimiteurs \ et t).
Si ce que l'on dcoupe ainsi ce sont des nombres, il faudra
encore convertir les chanes rsultantes en nombres avec la
fonction str2num (voir plus bas).
18
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
mat2str(mat {,n}) Convertit la matrice mat en une chane de caractre incluant les
crochets [ ] et qui serait dont "valuable" avec la fonction eval
(voir ci-dessous). L'argument n permet de dfinir la prcision
(nombre de chiffres). Cette fonction peut tre intressante pour
sauvegarder une matrice sur un fichier (en combinaison avec
fprintf , voir chapitre "Entres-sorties").
19
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
4.8.1 Gnralits
Sous la dnomination de "tableaux multidimensionnels"
(multidimensional arrays, ND-Arrays), il faut simplement imaginer
des matrices ayant plus de 2 indices ( ex : B(2,3,3) ). S'il est
facile de se reprsenter la 3e dimension (voir Figure ci-contre), c'est
un peu plus difficile au-del :
- 4 dimensions pourrait tre vu comme un vecteur de tableaux 3D
- 5 dimensions comme une matrice 2D de tableaux 3D
- 6 dimensions comme un tableau 3D de tableaux 3D...
Un tableau tridimensionnel permettra, par exemple, de stocker une
squence de matrices 2D de tailles identiques (pour des matrices de
tailles diffrentes, on devra faire appel aux "tableaux cellulaires"
dcrits plus loin) relatives des donnes physiques de valeurs
spatiales (chantillones sur une grille) voluant en fonction d'un 3e
paramtre (altitude, temps...).
Ex :
si le tableau B ne pr-existe pas, la simple affectation B(2,3,3)=2 va gnrer un tableau
tridimensionnel (de dimension 2x3x3 analogue celui de la Figure ci-dessus) dont le dernier lment,
d'indice (2,3,3), sera mis la valeur 2 et tous les autres lments initialiss la valeur 0
puis B(:,:,2)=[1 1 1 ; 1 1 1] ou B(:,:,2)=ones(2,3) ou encore plus simplement
B(:,:,2)=1 permettrait d'initialiser tous les lments de la seconde "couche" de ce tableau 3D la
valeur 1
et B(1:2,2,3)=[2;2] permettrait de modifier la seconde colonne de la troisime "couche" de ce
tableau 3D
on pourrait de mme accder individuellement tous les lments B(k,l,m) de ce tableau par un
ensemble de boucles for tel que (bien que ce ne soit pas efficace ni lgant pour un langage
"vectoris" tel que MATLAB/Octave) :
Certaines fonctions MATLAB/Octave dj prsentes plus haut permettent de gnrer directement des tableaux
multidimensionnels lorsqu'on leur passe plus de 2 arguments : ones , zeros , rand , randn .
Ex :
C=ones(2,3,3) gnre un tableau 3D de dimension 2x3x3 dont tous les lments sont mis la valeur
1
D=zeros(2,3,3) gnre un tableau 3D de dimension 2x3x3 dont tous les lments sont mis la
valeur 0
E=rand(2,3,3) gnre un tableau 3D de dimension 2x3x3 dont les lments auront une valeur
alatoire comprise entre 0 et 1
20
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
Voir aussi les fonctions de gnration et rorganisation de matrices, telles que repmat(tableau,[M N P ...])
et reshape(tableau,M,N,P...) , qui s'appliquent galement aux tableaux multidimensionnels.
Les oprations dont l'un des deux oprandes est un scalaire, les oprateurs de base (arithmtiques, logiques,
relationnels...) ainsi que les fonctions oprant "lment par lment" sur des matrices 2D (fonctions
trigonomtriques...) travaillent de faon identique sur des tableaux multidimensionnels, c'est--dire s'appliquent
tous les lments du tableau. Par contre les fonctions qui oprent spcifiquement sur des matrices 2D et vecteurs
(algbre linaire, fonctions "matricielles" telles que inversion, produit matriciel, etc...) ne pourront tre appliques
qu' des sous-ensembles 1D (vecteurs) ou 2D ("tranches") des tableaux multidimensionnels, donc moyennement un
usage correct des indices de ces tableaux !
Ex :
en reprenant le tableau C de l'exemple prcdent, F=3*C retourne un tableau dont tous les lments
auront la valeur 3
en faisant G=E+F on obtient un tableau dont les lments ont une valeur alatoire comprise entre 3 et 4
sin(E) calcule le sinus de tous les lments du tableau E
Certaines fonctions prsentes plus haut (notamment les fonctions statistiques min , max , sum , prod ,
mean , std ...) permettent de spcifier un "paramtre de dimension" d qui est trs utile dans le cas de
tableaux multidimensionnels. Illustrons l'usage de ce paramtre avec la fonction sum :
sum(tableau, d )
Calcule la somme des lments en faisant varier le d-me indice du tableau
Ex : dans le cas d'un tableau de dimension 3x4x5 (nombre de: lignes x colonnes x profondeur)
sum(tableau,1) retourne un tableau 1x4x5 contenant la somme des lments par ligne
sum(tableau,2) retourne un tableau 3x1x5 contenant la somme des lments par colonne
sum(tableau,3) retourne une matrice 3x4x1 contenant la somme des lments calculs selon la
profondeur
Concatne les 2 matrices mat1 et mat2 selon la d-me dimension. Si d=1 (indice de ligne) => concatnation
verticale. Si d=2 (indice de colonne) => concatnation horizontale. Si d=3 (indice de "profondeur") =>
cration de "couches" suppmentaires ! Etc...
Ex :
Les fonctions ci-dessous permettent de connatre la dimension d'un tableau (2D, 3D, 4D...) et la "taille de chaque
dimension" :
vect= size(tableau)
taille= size(tableau, dimension)
Retourne un vecteur-ligne vect dont le i-me lment indique la taille de la i-me dimension du tableau
Retourne la taille du tableau correspondant la dimension spcifie
Ex :
21
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
pour un scalaire (vu comme une matrice dgnre) cette fonction retourne toujours [1 1]
ndims(tableau)
Retourne la dimension tableau : 2 pour une matrice 2D et un vecteur ou un scalaire (vus comme des matrices
dgnres !), 3 pour un tableau 3D, 4 pour un tableau quadri-dimensionnel, etc... Identique
length(size(tableau))
Ex : pour le tableau B ci-dessus, ndims(B) retourne donc 3
Il est finalement intressant de savoir, en matire d'changes, qu'Octave permet de sauvegarder des tableaux
multidimensionnels sous forme texte (utiliser save -text ...), ce que ne sait pas faire MATLAB.
22
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
4.9.1 Gnralits
Une "structure" (enregistrement, record) est un type d'objet MATLAB/Octave (que l'on retrouve dans d'autres
langages) se composant de plusieurs "champs" nomms (fields) qui peuvent tre de types diffrents (chanes,
matrices, tableaux cellulaires...), champs qui peuvent eux-mmes se composer de sous-champs... MATLAB/Octave
permet logiquement de crer des "tableaux de structures" (structures array) multidimensionels.
On accde aux champs d'une structure avec la syntaxe structure.champ.sous_champ ... (usage du
caractre " . " comme sparateur). Pour illustrer les concepts de base relatifs aux structures, prenons l'exemple
d'une structure permettant de stocker les diffrents attributs d'une personne (nom, prnom, age, adresse, etc...).
Exemple :
A) Cration d'une structure personne par dfinition des Tableau de structures personne
attributs du 1er individu : nom: Dupond prenom: Jules
age: 25
avec personne.nom='Dupond' la structure est mise en
code_postal: 1010 localite:
place et contient le nom de la 1re personne ! (vrifiez avec
Lausanne
whos personne )
enfants: -
avec personne.prenom='Jules' on ajoute un champ
tel.prive: 021 123 45 67 tel.prof: 021
prenom cette structure et l'on dfinit le prnom de la 1re 987 65 43
personne
et ainsi de suite : personne.age=25 ; nom: Durand prenom: Albertine
personne.code_postal=1010 ; age: 30
personne.localite='Lausanne' code_postal: 1205 localite: Geneve
on peut, ce stade, vrifier le contenu de la structure en enfants: Arnaud Camille
frappant personne tel.prive: - tel.prof: -
Dfinition d'une 3e personne via une notation plus compacte en spcifiant tous les champs d'un coup :
personne(3)=struct('nom','Muller','prenom','Robert','age',28,'code_postal',2000,'localite',
ATTENTION: on ne peut utiliser cette fonction que si l'on spcifie tous les champs ! Donc
personne(3)=struct('nom','Muller','age',28) retournerait une erreur (car il manque les
champs : prenom, code_postal, localite)
Sous MATLAB seulement, les champs doivent toujours tre passs dans le mme ordre ! Donc si
l'on cre la structure pays(1)=struct('nom','Suisse','capitale','Berne') , l'instruction
pays(1)=struct('capitale','Paris','nom','France',) gnre ensuite une erreur (les 2
champs nom et capitale tant permuts par rapport la squence initiale de cration des champs de
cette structure) !
Ajout d'un champ enfants de type "tableau cellulaire" (voir chapitre suivant) en dfinissant les 2 enfants
de la 2e personne avec :
personne(2).enfants={'Arnaud','Camille'}
Comme illustration de la notion de sous-champs, dfinissions les numros de tlphone priv et prof.
ainsi :
personne(1).tel.prive='021 123 45 67' ; personne(1).tel.prof='021 987 65 43'
Attention : le fait de donner une valeur au champ principal personne.tel (avec
23
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
Avec personne(1) on rcupre donc la structure correspondant notre 1re personne (Dupond),
et personne([1 3]) retourne un tableau de structures contenant la 1re et la 3e personne
personne(1).tel.prive retourne le No tel priv de la 1re personne (021 123 45 67)
Attention : comportements bizarres dans le cas de sous-champs : personne(2).tel retourne []
(ce qui est correct vu que la 2e personne n'a pas de No tl), mais personne(2).tel.prive provoque
une erreur !
personne(2).enfants retourne un tableau cellulaire contenant les noms des enfants de la 2e
personne
et personne(2).enfants{1} retourne le nom du 1er enfant de la 2e personne (Arnaud)
Pour obtenir la liste de toutes les valeurs d'un champ spcifi, on utilise :
pour des champs de type nombre (ici liste des ges de tous les individus) :
- vec_ages = [ personne.age ] retourne un vecteur-ligne vec_ages
pour des champs de type chane (ici liste des noms de tous les individus) :
- soit tabl_cel_noms = { personne.nom } qui retourne un objet tab_cel_noms de type "tableau
cellulaire"
- ou [tab_cel_noms{1:length(personne)}] = deal(personne.nom) (idem)
- ou encore la boucle for k=1:length(personne), tab_cel_noms{k}=personne(k).nom ;
end (idem)
Et l'on peut utiliser l'indexation logique pour extraire des parties de structure !
Voici un exemple trs parlant : l'instruction prenoms_c = { personne( [personne.age] > 26
).prenom } retourne le vecteur cellulaire prenoms_c contenant les prnoms des personnes ges de
plus de 26 ans ; on a pour ce faire "index logiquement" la structure personne par le vecteur logique
[personne.age] > 26
personne(:).age=[] supprime l'ge des 2 personnes, mais conserve le champ ge de ces structures
personne(2)=[] dtruit la 2e structure (personne Durand)
personne = rmfield(personne,'tel') supprime le champ tel (et ses sous-champs prive et prof)
dans toutes les structures du tableau personne
G) Matrices de structures :
- ci-dessus, personne est en quelque-sorte un vecteur-ligne de structures
- on pourrait aussi dfinir (mme si c'est un peu "tordu") un tableau bi-dimensionnel (matrice) de structures
en utilisant 2 indices (numro de ligne et de colonne) lorsque l'on dfinit/accde la structure,
par exemple personne(2,1) ...
Il est finalement utile de savoir, en matire d'changes, qu'Octave permet de sauvegarder des structures sous forme
texte (utiliser save -text ...), ce que ne sait pas faire MATLAB.
24
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
struct
setfield Ces fonctions ont t illustres dans l'exemple
rmfield ci-dessus...
for [ valeur , champ ] = tab_struct Propre Octave, cette forme particulire de la structure
% on peut utiliser champ de contrle for ... end permet de boucler sur tous
% et valeur les lments d'un tableau de structures tab_struct et
end
accder aux noms de champ et aux valeurs respectives
25
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
4.10.1 Gnralits
Le "tableau cellulaire" ("cells array") est le type de donne MATLAB/Octave le plus polyvalent. Il se distingue du
'tableau standard' en ce sens qu'il peut se composer d'objets de types diffrents (scalaire, vecteur, chane, matrice,
structure... et mme tableau cellulaire => permettant ainsi mme de faire des tableaux cellulaires imbriqus dans des
tableaux cellulaires !).
Initialement uniquement bidimensionnels sous Octave, les tableaux cellulaires peuvent dsormais tre
multidimensionnels (i.e. 3 indices ou plus) depuis Octave 3.
Pour dfinir un tableau cellulaire et accder ses lments, on recourt aux accolades { } (notation qui ne
dsigne ici pas, contrairement au reste de ce support de cours, des lments optionnels). Ces accolades seront
utilises soit au niveau des indices des lments du tableau, soit dans la dfinition de la valeur qui est introduite
dans une cellule. Illustrons ces diffrentes syntaxes par un exemple.
Exemple :
B) Pour accder aux lments d'un tableau cellulaire, il faut bien comprendre la diffrence de syntaxe
suivante :
- la notation tableau (i,j) (usage de parenthses) retourne le "container" de la cellule d'indice i,j
du tableau (tableau cellulaire 1 lment)
- par extension, tableau (i,:) retournerait par exemple un nouveau tableau cellulaire contenant la
i-me ligne de tableau
- tandis que tableau {i,j} (usage d'accolades) retourne le contenu (c--d. la valeur) de la cellule
d'indice i,j
26
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
C) Pour supprimer une ligne ou une colonne d'un tableau cellulaire, on utilise la syntaxe habituelle :
D) Pour rcuprer sur un vecteur numrique tous les nombres d'une colonne ou d'une ligne d'un tableau
cellulaire :
- soit le tableau cellulaire suivant: TC={'aa' 'bb' 123 ; 'cc' 'dd' 120 ; 'ee' 'ff' 130}
E) Et l'on peut mme utiliser l'indexation logique pour extraire des parties de tableau cellulaire !
Il est intressant de noter que les tableaux cellulaires peuvent tre utiliss comme paramtres d'entre et de
sortie toutes les fonctions MATLAB/Octave (un tableau cellulaire pouvant, par exemple, remplacer une liste de
paramtres d'entre).
Il est finalement utile de savoir, en matire d'changes, qu'Octave permet de sauvegarder des tableaux cellulaires
sous forme texte (avec save -text ...), ce que ne sait pas faire MATLAB.
On utilisera en outre avec profit, dans des tableaux cellulaires contenant des chanes de caractres, les fonctions de tri
et de recherche sort / sortrows , unique , intersect / setdiff / union et ismember prsentes plus
haut.
Fonction Description
iscell(var) Test si var est un objet de type tableau cellulaire : retourne 1 si c'est le
cas, 0 sinon.
iscellstr(var)
Test si var est un tableau cellulaire de chanes.
27
MATLAB et Octave - 4. Objets : sries/vecteurs, matrices, chanes, tableaux multidimensionnels et cellulair...
mat = cell2mat(tab_cel) Convertit le tableau cellulaire tab_cel en une matrice mat en concatnant
ses lments
Ex : cell2mat( { 11 22 ; 33 44 } ) retourne [11 22 ; 33 44]
28
MATLAB et Octave - 5. Diverses autres notions
5.1.1 Gnralits
De faon interne, MATLAB/Octave gre les dates et le temps sous forme de nombres (comme la plupart des autres
langages de programmation, tableurs...). L' "origine du temps", pour MATLAB/Octave, a t dfinie au 1er janvier
de l'an 0 minuit, et elle est mise en correspondance avec le nombre 1 (vous pouvez vrifier cela avec
datestr(1.0001) ). Chaque jour qui passe, ce nombre est incrment de 1, et les heures, minutes et secondes
dans la journe correspondent donc des fractions de jour (partie dcimale du nombre exprimant le temps).
On obtient la liste des fonctions relatives la gestion du temps avec helpwin timefun ou au chapitre "Timing
Utilities" du manuel Octave.
date_string = date Retourne la date courante sous forme de chane de caractre au format
'dd-mmm-yyyy' (o mmm est le nom du mois en anglais abrg aux 3
premiers caractres)
date_num = now Retourne le nombre exprimant la date et heure locale courante (donc le
nombre de jours -et fractions de jours- couls depuis le 1er janvier
0000). Passez au pralable la commande format long si vous voulez
afficher ce nombre en pleine prcision.
Ex :
rem(now,1) (partie dcimale) retourne donc l'heure locale courante
sous forme de fraction de jour, et
datestr(rem(now,1),'HH:MM:SS') retourne l'heure courante sous
forme de chane !
floor(now) (partie entire) retourne donc le numro de jour relatif
la date courante, et datestr(floor(now)) la mme chose que la
fonction date
date_vec = clock Retourne la date et heure courante sous forme d'un vecteur-ligne
date_vec de 6 valeurs numriques [annee mois jour heure minute
seconde]. Est identique datevec(now) .
Pour avoir des valeurs entires, faire fix(clock) .
1
MATLAB et Octave - 5. Diverses autres notions
Ex :
datestr(now) ou datestr(now,'dd-mmm-yyyy HH:MM:SS')
retournent '08-Apr-2005 20:45:00'
datestr(now,'ddd') retourne 'Fri' (abrviation de Friday) (voir
aussi la fonction weekday ci-dessous)
mat = calendar(...) Affecte une variable, cette fonction retourne une matrice mat 6x7
contenant les numros de jour du mois correspondant.
Apr 2005
2
MATLAB et Octave - 5. Diverses autres notions
S M Tu W Th F S
0 0 0 0 0 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
0 0 0 0 0 0 0
datetick('x|y|z',format) Sur l'axe spcifi (x, y ou z) d'un graphique, remplace au niveau des
labels correspondants aux lignes de quadrillage (tick lines), les valeurs
numriques par des dates au format indiqu
Sous Octave, implment depuis la version 3.2.0
Fonction Description
3
MATLAB et Octave - 5. Diverses autres notions
4
MATLAB et Octave - 5. Diverses autres notions
Remarque : sous MATLAB, la fonction fzero est standard, mais la fonction fsolve est implmente dans la
toolbox "Optimisation".
tape Ralisation
1) Soit la fonction de 3e degr : On doit donc trouver les solutions x1, x2... pour f(x)=0, donc : - 0.5*x^3 -
y = - 0.5*x^3 - x^2 + x^2 + 15*x - 8 = 0
15*x - 8
2) Commenons par dfinir cette Raliser le M-file appel fct_deg3.m contenant par consquent le code
quation sous forme d'une suivant :
fonction MATLAB/Octave
function [Y]=fct_deg3(X)
(voir chapitre "Fonctions") Y = - 0.5 * X.^3 - X.^2 + 15*X - 8
return
5
MATLAB et Octave - 5. Diverses autres notions
6
MATLAB et Octave - 6. Graphiques, images, animations
L'aide en ligne relative aux fonctions de ralisation de graphiques s'obtient, de faon classique, en frappant help
fonction_graphique ( Ex : help plot ). En outre :
sous MATLAB: les commandes help graph2d , help graph3d et help specgraph affichent la liste des
fonctions graphiques disponibles
sous Octave: on se rfrera au Manuel Octave (HTML ou PDF) au chapitre "Plotting", ou via la commande doc
fonction_graphique
Pour une comparaison des possibilits graphiques entre Octave/FLTK, Octave/Gnuplot et MATLAB, voyez cette intressante page
: http://octave.sourceforge.net/compare_plots/
GNU Octave est conu, dans la philosophie Unix, de faon plus modulaire en s'appuyant sur des outils externes. En matire de
visualisation, on parle de "backends graphiques" :
C'est ainsi que le logiciel libre de visualisation Gnuplot a longtemps t utilis par Octave comme "moteur graphique"
standard. l'origine essentiellement orient trac de courbes 2D et de surfaces 3D en mode "filaire", Gnuplot est devenu
capable, depuis la version 4.2, de remplir des surfaces colores, ce qui a permis (depuis Octave 3) l'implmentation de
fonctions graphiques 2D/3D classiques MATLAB (fill, pie, bar, surf...). Les "handles graphics" ont commenc tre
implments avec Gnuplot depuis Octave 2.9.
Depuis la version 3.4 (en 2011), Octave embarque son propre moteur graphique bas FLTK (Fast Light Toolkit) et
OpenGL. Celui-ci est plus rapide et offre davantage d'interactivit que Gnuplot.
Depuis la version 4.0 (en 2015), qui voit l'arrive d'une interface utilisateur graphique officielle (Octave GUI) base sur le
toolkit graphique Qt, Octave intgre un nouveau backend QtHandles s'appuyant logiquement aussi sur Qt et OpenGL.
Ces diffrentes solutions n'empchent pas l'utilisateur de recourir d'autres "backends graphiques" s'il le souhaite. Parmi les
autres projets de couplage ("bindings") avec des grapheurs existants, ou de dveloppement de backends graphiques propres
Octave, on peut citer notamment :
Octaviz : 2D/3D, assez complet (wrapper donnant accs aux classes VTK, Visualization ToolKit) (voir article FI-EPFL 5/07)
OctPlot : 2D (ultrieurement 3D ?)
epsTK : fonctions spcifiques pour graphiques 2D trs sophistiqus (tait intgr la distribution Octave-Forge 2.1.42
Windows)
Quant aux anciens projets suivants, ils sont (ou semblent) arrts : JHandles (package Octave-Forge, dveloppement interrompu
depuis 2010, voir cette ancienne page), Yapso (Yet Another Plotting System for Octave, 2D et 3D, bas OpenGL), PLplot (2D et
3D), Oplot++ (2D et 3D, seulement sous Linux et macOS), KMatplot (2D et 3D, ancien, ncessitant Qt/KDE), KNewPlot (2D et
3D, ancien, ncessitant Qt et OpenGL), Grace (2D).
available_graphics_toolkits
Indique quels sont les backends disponibles dans votre distribution d'Octave
backend_courant= graphics_toolkit
Retourne le nom du backend qui est couramment actif
1
MATLAB et Octave - 6. Graphiques, images, animations
Attention : avant de passer cette commande commencez par fermer, avec close('all') , les fentres de
graphiques qui auraient t ouvertes avec un autre backend
Dans les chapitres qui suivent on prsente l'aspect et les fonctionnalits des fentres graphiques correspondant aux diffrentes
backends graphiques. Le code qui a t utilis pour produire les illustrations est le suivant :
x=0:0.1:10*pi;
y1=sin(x); y2=sqrt(x); y3=sin(x).*sqrt(x);
plot(x,y1,x,y2,x,y3);
grid('on');
axis([0 30 -6 6]);
set(gca,'Xtick',0:5:30); set(gca,'Ytick',-5:1:5);
title('Fentre de graphique MATLAB / FLTK / Gnuplot');
xlabel('X'); ylabel('Y=fonction(X)');
legend('sinus(x)','racine(x)','sin(x)*racine(x)');
2
MATLAB et Octave - 6. Graphiques, images, animations
Une barre d'outils comportant les boutons suivants (que l'on peut,
pour certains, aussi activer via le menu Edit ) :
Rotate : souris-gauche-glisser-horiz. effectue une rotation 2D,
souris-gauche-glisser-vertic. effectue une rotation 3D, souris-
milieu fait un autoscale en annulant la rotation 3D dans le cas
d'une figure 2D
Z+ (Zoom In) : un clic souris-gauche fait un zoom avant 2x,
souris-gauche-glisser effectue un rectangle-zoom
Z- (Zoom Out) : un clic souris-gauche fait un zoom arrire 2x
Z+ ou Z- : souris-roulette effectue un zoom avant/arrire
(sans affecter la dimension Z dans les graphiques 3D)
Pan : souris-gauche-glisser pour dplacement horiz./vertical,
souris-milieu fait un autoscale
Insert Text : ouvre une fentre de dialogue permettant de placer
dans la figure une annotation en dfinissant police, taille, style et
couleur ; comme pour la fonction annotation , la position est
dfinie en units normalises par rapport la fentre de figure,
c'est--dire systme de coordonnes dont l'angle infrieur gauche
est (0,0) et l'angle suprieur droite (1,1) (et non dans le systme
d'axes du graphique comme le texte plac avec text ) ;
l'annotation sera donc fixe par rapport la fentre de figure et ne
change pas si l'on fait un pan ou zoom du graphique
Select : n'est pas encore oprationnel
Axes : affichage/masquage des axes et de la grille (bascule)
Grid : affichage/masquage de la grille (bascule, comme
grid('on|off') )
Autoscale : autoscaling des axes (comme axis('auto') )
3
MATLAB et Octave - 6. Graphiques, images, animations
Pour mmoire, suivre ce lien pour accder aux informations relatives aux anciennes versions de : Gnuplot 3.x 4.0 embarqu
dans Octave-Forge 2.x Windows, Gnuplot 4.2.2/4.3 embarqu dans Octave 3.0.1/3.0.3 MSVC
4
MATLAB et Octave - 6. Graphiques, images, animations
Fonction et description
Exemple Illustration
Lorsque l'on trace un graphique, MATLAB/Octave dtermine automatiquement les limites infrieures et suprieurs des axes X,
Y {et Z} sur la base des valeurs qui sont graphes, de faon que le trac occupe toute la fentre graphique (en hauteur et
largeur). Les rapports d'chelle des axes sont donc diffrents les uns des autres. Les commandes axis et
xlim / ylim / zlim permettent de modifier ces rglages.
a) ratio = daspect()
b) daspect(ratio)
c) daspect('auto')
Rapport d'chelle entre les axes X-Y{-Z} (data aspect ratio) (voir aussi la commande pbaspect relatif au "plot
box")
a) rcupre, sur le vecteur ratio (3 lments), le rapport d'chelle courant entre les 3 axes du graphique
b) modifie le rapport d'chelle entre les axes selon le vecteur ratio spcifi
c) le rapport d'chelle est mis en mode automatique, s'adaptant ds lors la dimension de la fentre de graphique
a) axis('off | on')
b) axis('nolabel | labelx | labely | labelz')
c) axis('ticx | ticy | ticz')
Dsactivation/ractivation affichage cadre/axes/graduation, quadrillage et labels :
a) dsactive/rtablit l'affichage du cadre/axes/graduation et quadrillage du graphique ; sous MATLAB (mais pas Octave)
agit en outre galement sur les tiquettes des axes (labels)
b) dsactive l'affichage des graduations des axes (ticks), respectivement rtablit cet affichage de faon diffrencie en x, y
et/ou z
c) active l'affichage des graduations des axes (ticks) et du quadrillage (grid) de faon diffrencie en x, y et/ou z
a) axis('xy')
b) axis('ij')
Inversion du sens de l'axe Y :
a) origine en bas gauche, valeurs Y croissant de bas en haut (par dfaut)
b) origine en haut gauche, valeurs Y croissant de haut en bas.
5
MATLAB et Octave - 6. Graphiques, images, animations
Remarque : la dnomination ij fait rfrence au systme de coordonnes communment utilis en traitement d'image
(origine se situant dans le coin suprieur gauche de l'image, axe horizontal nomm i et orient normalement de gauche
droite, mais axe vertical j orient de haut en bas !)
Ex 1
x=0:0.1:10*pi;
y1=sin(x); y2=sqrt(x); y3=sin(x).*sqrt(x);
plot(x,y1,x,y2,x,y3);
legend('off');
grid('on');
axis([0 10 -1 3]); % changement limites (zoom)
axis('ij'); % inversion de l'axe Y
a) zoom(facteur)
b) zoom off|on|xon|yon
c) zoom reset|out
a) Zoome du facteur spcifi dans la figure courante. Si >1 => grossit, si compris entre 0 et 1 => diminue.
Si facteur est un scalaire, agit sur tous les axes. Si c'est un vecteur, le 1er lment agit sur l'axe X, le second sur l'axe Y...
b) off dsactive compltement les possibilits de zoom interactif dans la figure, on les ractive. xon n'autorise le
zoom interactif qu'en X, et yon qu'en Y.
c) reset mmorise le zoom courant. out retourne au facteur de zoom pralablement mmoris avec reset .
axis([-4 4 -4 4])
axis('equal')
for k=1:36
pause(0.1)
rotate(h, [0 0 1], 10, [0 0 0])
% on ne fait tourner que le carr rouge,
% 36 fois de 10 degrs dans le plan horiz.
% autour de l'origine, donc 360 degrs
% (tour complet), avec pause 0.1 seconde
% entre chaque chaque mouvement
end
Remarque: cette animation a t capture avec le logiciel libre
recordMyDesktop, puis convertie en gif-anim (pour affichage
dans navigateur web) avec l'outil libre ffmpeg
peaks(-3:0.2:3, -4:0.2:4)
h =get(gca,'children'); % handle de la surface
axis([-3 3 -8 8 -8 8])
for k=1:180
pause(0.02)
rotate(h, [1 0 0], 1, [0 0 0])
% chaque 0.02 secondes rotation de 1 degr
6
MATLAB et Octave - 6. Graphiques, images, animations
pan off|on|xon|yon
off dsactive compltement les possibilits de dplacememt (pan) interactif dans la figure, on les ractive. xon
n'autorise le dplacement interactif qu'en X, et yon qu'en Y.
rotate3d off|on
off dsactive la possibilit de rotation 3D interactive dans la figure, on la ractive.
Ex 3
date_debut = datenum('01-Apr-2005');
date_fin = date_debut + 2; % 2 jours plus tard
plot(x,y);
grid('on'); % => premier graphique ci-contre
xlabel('dates');
7
MATLAB et Octave - 6. Graphiques, images, animations
box('on|off')
Activation/dsactivation de l'affichage, autour du graphique, d'un cadre (graphiques 2D) ou d'une "bote" (graphiques
3D).
Sans paramtre, cette fonction agit comme une bascule on/off.
xlabel('label_x' {,'proprit','valeur'...} )
ylabel('label_y' {,'proprit','valeur'...} )
zlabel('label_z' {,'proprit','valeur'...} )
Dfinit et affiche le texte de lgende des axes X, Y et Z (tiquettes, labels). Par dfaut les axes d'un nouveau graphique
n'ont pas de labels.
Des attributs, au sens "Handle Graphics" (couples proprit et valeur), permettent de spcifier la police, taille, couleur...
title('titre' {,'proprit','valeur'...} )
Dfinit un titre de graphique qui est plac au-dessus de la zone graphe. Un nouveau graphique n'a par dfaut pas de
titre. Pour effacer le titre, dfinir une chane titre vide.
Si vous dsirez crer un titre compos de plusieurs lignes, procdez ainsi : title( sprintf('1ere ligne\n2eme
ligne') )
Des attributs, au sens "Handle Graphics" (couples proprit et valeur), permettent de spcifier la police, taille, couleur...
Lorsqu'on utilise plusieurs fois ces fonctions, cela ajoute chaque fois un nouveau texte au graphique.
Des attributs, au sens "Handle Graphics" (couples proprit et valeur), permettent de spcifier la police, taille, couleur,
orientation...
La proprit Rotation n'est implmente sous Octave 4.0 qu' l'impression ou sauvegarde de fichier
graphique, mais pas l'affichage !
8
MATLAB et Octave - 6. Graphiques, images, animations
Ex 4
x=linspace(0,30,200);
y1=sin(x)./exp(x/10); y2=1.5*sin(2*x)./exp(x/10);
plot(x,y1,x,y2);
xlabel('Duree [ms]'); ylabel('Amplitude [mm]');
title('Comparaison amortisseurs');
legend('amortisseur 1','amortisseur 2',4);
text(6,1,'Experience A', ...
'FontSize',14,'Rotation',-20, ...
'Color','red');
a) annotation('line', x, y)
b) annotation('arrow', x, y)
c) annotation('doublearrow', x, y)
d) annotation('textarrow', x, y)
e) annotation('textbox', pos)
f) annotation('rectangle', pos)
g) annotation('ellipse', pos)
Place dans la figure une annotation. ATTENTION: notez que la position (x, y, pos) est dfinie en units normalises par
rapport la fentre de figure, c'est--dire dans un systme de coordonnes dont l'angle infrieur gauche est (0,0) et
l'angle suprieur droite (1,1). (Donc pas dans le systme d'axes du graphique comme le texte plac avec text ).
L'annotation sera donc fixe par rapport la fentre de figure et ne bouge pas si l'on fait un pan/zoom/rotation du
graphique.
a) Place un texte
b) Place une flche
c) Place une double flche
d) Place un texte associ une flche
e) Place un texte dans une bote
f) Place un rectangle
g) Place une ellipse
a) whitebg()
b) whitebg(couleur)
c) whitebg('none')
Change la couleur de fond du graphique :
a) Inversion du schma de couleur, agissant comme une bascule
b) Le fond est mis la couleur spcifie sous forme de nom (p.ex. 'yellow' ) ou de triplet RGB (p.ex. [0.95 0.95
0.1] )
c) Rtablit le schma de couleur par dfaut
texlabel('expression')
Sous MATLAB, convertit au format TeX l'expression spcifie. Cette fonction est gnralement utilise comme argument
dans les commandes title , xlabel , ylabel , zlabel , et text pour afficher du texte incorporant des indices,
exposants, caractres grecs...
Sous Octave, un interprteur TeX est implment dans les backends graphiques Qt et FLTK. Toute fonction affichant du
texte peut faire usage des codes de formatage suivants :
{ } : permet de grouper des caractres pour leur appliquer un code de formatage
\bf : ce qui suit sera en gras
\it : ce qui suit sera en italique
\rm : retour fonte normale (annulation du gras ou de l'italique)
^ : le caractre suivant (ou groupe) est mis en exposant
_ : le caractre suivant (ou groupe) est mis en indice
\car : permet d'afficher un caractre grec dfini par son nom car
\fontname{fonte} : utilise la fonte spcifie pour le texte qui suit
\fontsize{taille} : affiche le texte qui suit dans la taille spcifie
\color[rgb]{red green blue} : affiche le texte qui suit dans la couleur spcifie par le triplet {red green blue}
9
MATLAB et Octave - 6. Graphiques, images, animations
Notez cependant que ces fonctionnalits ne sont pour l'instant supportes qu' l'affichage et non l'impression ou
sauvegarde d'un fichier graphique !
10
MATLAB et Octave - 6. Graphiques, images, animations
A. Superposition de plusieurs tracs de type analogue dans le mme graphique en utilisant le mme systme d'axes
(overlay plots)
B. Tracer les diffrents graphiques cte--cte, dans la mme fentre mais dans des axes distincts (multiple plots)
C. Utiliser des fentres distinctes pour chacun des graphiques (multiple windows)
Exemple Illustration
a) hold('on') ou hold on
b) hold('off') ou hold off
a) Cette commande indique MATLAB/Octave d'accumuler (superposer) les ordres de dessin qui suivent dans la
mme figure (pour empcher qu'un nouveau trac efface le prcdent). Elle peut tre passe avant tout trac ou
aprs le premier ordre de dessin. Dans les modes "multiple plots" ou "multiple windows" (voir plus bas), l'tat
on/off de hold est mmoris indpendemment pour chaque sous-graphique, resp. chaque fentre de figure
b) Aprs cette commande, MATLAB/Octave est remis dans le mode par dfaut, c'est--dire que tout nouveau
graphique effacera le prcdent. En outre, les annotations et attributs de graphique prcdemment dfinis (labels
x/y/z, titre, lgende, tat on/off de la grille...) sont bien videmment effacs.
Remarque: les 2 primitives de base de trac de lignes line et de surfaces remplies patch , de mme que la
fonction rectangle , permettent de dessiner par "accumulation" dans un graphique sans que hold doive tre
mis on !
ishold
Retourne l'tat courant du mode hold pour la figure active ou le sous-graphique actif : 0 (false) si hold est off,
1 (true) si hold est on.
Ex
Exemple Illustration
subplot(L,C,i)
Dcoupe la fentre graphique courante (cre ou slectionne par la commande figure(numero) , dans le cas o
l'on fait du "multiple windows") en L lignes et C colonnes, c'est--dire en L x C espaces qui disposeront chacun leur
11
MATLAB et Octave - 6. Graphiques, images, animations
propre systme d'axes (mini graphiques). Slectionne en outre la i -me zone (celles-ci tant numrotes ligne aprs
ligne) comme espace de trac courant.
Si aucune fentre graphique n'existe, cette fonction en ouvre automatiquement une
Si l'on a dj une fentre graphique simple (i.e. avec 1 graphique occupant tout l'espace), le graphique sera effac !
Dans une fentre donne, une fois le "partitionnement" effectu (par la 1re commande subplot ), on ne devrait
plus changer les valeurs L et C lors des appels subsquents subplot , faute de quoi on risque d'craser certains
sous-graphiques dj raliss !
Ex
Ne vous attardez pas sur la syntaxe des commandes plot, pie, bar
et fplot qui seront dcrites plus loin au chapitre "Graphiques 2D"
subplot(2,2,1);
plot([0 1 1 0 0],[0 0 1 1 0]);
text(0.2,0.5,'Multiple plots');
axis('off'); legend('off'); title('zone 1');
subplot(2,2,2);
pie([2 1 5 3]); legend('a','b','c','d');
title('zone 2');
subplot(2,2,3);
bar(rand(18,1)); title('zone 3');
subplot(2,2,4);
fplot('x*cos(x)',[-10*pi 10*pi]);
title('zone 4');
Ex
h1 =subplot(2,1,1);
fplot('sin(x)',[0 10],'b'); grid('on')
h2 =subplot(2,1,2);
fplot('cos(x)',[0 10],'r'); grid('on')
a) figure
b) figure(numero)
a) Ouvre une nouvelle fentre de graphique (figure), et en fait la fentre de trac active (dans laquelle on peut
ensuite faire du "single plot" ou du "multiple plots"). Ces fentres sont automatiquement numrotes 1, 2, 3...
b) Si la fentre de numero spcifi existe, en fait la fentre de trac active. Si elle n'existe pas, ouvre une
nouvelle fentre de graphique portant ce numero.
12
MATLAB et Octave - 6. Graphiques, images, animations
refresh ou refresh(numero)
Raffrachit (redessine) le(s) graphique(s) dans la fentre de figure courante, respectivement la fentre de
numro spcifi
a) close
b) close(numero)
c) close all
a) Referme la fentre graphique active (figure courante)
b) Referme la fentre graphique de numero spcifi
c) Referme toutes les fentre graphique !
Met hold off s'il n'y a plus de fentre graphique
13
MATLAB et Octave - 6. Graphiques, images, animations
Le symbole indique que la spcification n'est valable que pour MATLAB, le symbole indique qu'elle n'est valable que pour
Octave/Qt, le symbole indique qu'elle n'est valable que pour Octave/FLTK, le symbole indique qu'elle n'est valable que pour
Octave/Gnuplot . Sinon c'est valable pour tous les grapheurs/backends !
Il est possible d'utiliser la fonction [L,C,M,err]=colstyle('linespec') pour tester un linespec et le dcoder sur 3
variables spares L (type de ligne), C (couleur) et M (marker). Si linespec est erron, une erreur err est retourne.
Pour un rappel sur l'ancienne faon de spcifier les proprits de lignes sous Octave 2.x, suivre ce lien.
w ligne traitille
blanc (white) ^ < triangle (orient selon
--
> v symbole)
k noir (black)
ligne pointille < v triangle point vers le bas
: > ^ vide/rempli
triangle point vers le haut
ligne trait-point vide/rempli
-.
s carr vide (square) ( rempli)
p toile 5 branches
(pentagram)
carr vide
h toile 6 branches
(hexagram)
losange vide
Exemple Illustration
x=linspace(0,20,30);
y1=sin(x)./exp(x/10); y2=1.5*sin(2*x)./exp(x/10);
plot(x,y1, 'r-o' ,x,y2, 'b:.' );
legend('amortisseur 1','amortisseur 2');
14
MATLAB et Octave - 6. Graphiques, images, animations
Ex 2 sous Octave/Gnuplot
On verra plus loin (chapitre 3D "Vraies couleurs, tables de couleurs et couleurs indexes") qu'il est possible d'utiliser beaucoup
plus de couleurs en spcifiant des "vraies couleurs" sous forme de triplets RGB (valeurs d'intensits [red green blue] de
0.0 1.0), ou en travaillant en mode "couleurs indexes" via une "table de couleurs" (colormap). Les couleurs ainsi spcifies
peuvent tre utilises avec la proprit 'color' de la commande set (voir chapitre qui suit), commande qui permet de
dfinir galement plus librement l'paisseur et le type de trait, ainsi que le type de symbole et sa dimension.
Pour dfinir de faon plus fine les types de traits, symboles et couleurs, on utilisera la techique des "handles" dcrite
ci-aprs dans le chapitre "Handle Graphics".
On a dj vu plus haut la fonction gtext('chane' ) qui permet de placer interactivement ( l'aide de la souris) une chane
de caractre dans un graphique.
15
MATLAB et Octave - 6. Graphiques, images, animations
6.2 Graphiques 2D
Sous MATLAB, la liste des fonctions relatives aux graphiques 2D est accessible via help graph2d et help
specgraph . Concernant Octave/Gnuplot, on se rfrera au chapitre "Plotting" du Manuel Octave (HTML ou PDF).
Exemple Illustration
Avec la seconde forme, dfinition de proprits du graphiques plus spcifiques (voir l' exemple parlant du chapitre
prcdent !)
b) Lorsqu'une seule variable vect (de type vecteur) est dfinie pour la courbe, les valeurs vect sont graphes en Y,
et c'est l'indice de chaque valeur qui est utilis en X (1, 2, 3 ... n). Ce n'est donc plus un 'vrai graphique X/Y' mais un
graphique dont les points sont uniformment rpartis selon X.
c) Lorsqu'une seule variable mat (de type matrice) est passe, chaque colonne de mat fera l'objet d'une courbe, et
chacune des courbes s'appuiera en X sur les valeurs 1, 2, 3 ... n (ce ne sera donc pas non plus un 'vrai graphique
X/Y')
d) Lorsque l'on passe des paires de valeurs de type vecteur/matrice, matrice/vecteur ou matrice/matrice :
plot([9 ; 7 ; 8 ; 6]);
16
MATLAB et Octave - 6. Graphiques, images, animations
plot([6 2 5 ; 8 3 4 ; 4 5 6]);
La diffrence par rapport plot , c'est qu'il n'y a ici pas besoin d'chantillonner les valeurs x et y de la fonction (i.e.
dfinition d'une srie de valeurs x puis du vecteur y=fct(x) ...), car fplot accepte en argument les 2 mthodes de
dfinition de fonction suivantes :
La fonction est en fait chantillonne automatiquement (de faon interne) par MATLAB/Octave sur un nombre de
points qui dpend des paramtres facultatifs tol ou nb_pts. Voir l'aide en ligne pour davantage de dtail.
Le paramtre optionnel linespec permet de spcifier un type particulier de lignes et/ou symboles.
Notez bien que l'on ne peut ici pas rcuprer directement le handle de la courbe avec handle = fplot(...) , car
:
a) si l'on affecte fplot [x, y], on rcupre les vecteurs des valeurs x et y qui ont t automatiquement
chantillonne
b) si l'on affecte fplot [x, ymat], on rcupre le vecteur des valeurs x et une matrice ymat avec autant de
colonnes que de fonctions
Voir encore la fonction ezplot (easy plot) qui permet de dessiner une fonction 2D dfinie sous sa forme paramtrique.
A titre d'exemple, voyez la fonction ezplot3 plus bas.
Ex 1
fplot('sin(x)*sqrt(x)', [0 20],'r');
hold('on');
fplot('2*log(x)-4',[1 18],'g');
grid('on');
ou
fplot('[sin(x)*sqrt(x),2*log(x)-4]', ...
[0 20],'b');
grid('on');
ylim([-5 5])
17
MATLAB et Octave - 6. Graphiques, images, animations
Ex 2
fplot('sin',[0 10],'r');
hold('on');
fplot('cos',[0 10],'g');
grid('on');
Ex 3
function [Y]=sin_sqrt(X)
Y=sin(X).*sqrt(X);
return
a) semilogx(...)
b) semilogy(...)
c) loglog(...)
Graphique 2D de lignes et/ou semis de points sur axes logarithmiques :
Ces 3 fonctions, qui s'utilisent exactement comme la fonction plot (mmes paramtres...), permettent de grapher
dans des systmes d'axes logarithmiques :
a) axe X logarithmique, axe Y linaire
b) axe X linaire, axe Y logarithmique
c) axes X et Y logarithmiques
Voir aussi, plus bas, la fonction plotyy pour graphiques 2D 2 axes Y qui peuvent tre logarithmiques
Ex
x1=logspace(1,6,6); y1=log(x1);
semilogx(x1,y1,'r-o', ...
[10 100 1e4 1e5 1e6],[6 8 4 6 4],'g');
grid('on');
18
MATLAB et Octave - 6. Graphiques, images, animations
Ex
x=0:0.1:4*pi;
h= plotyy(x, sin(2*x), x, exp(x), ...
'plot', 'semilogy');
xlabel('axe X');
hy1=get(h(1),'ylabel');
hy2=get(h(2),'ylabel');
set(hy1,'string','fonction 1');
set(hy2,'string','fonction 2');
a) stairs( {x,} y )
b) stairs( {x,} ymat {, linespec } )
Graphique 2D en escaliers :
a) Dessine une ligne en escaliers pour la courbe dfinie par les vecteurs (ligne ou colonne) x et y. Si l'on ne fournit
pas de vecteur x, la fonction utilise en X les indices de y (donc les valeurs 1 length(y) ).
b) Traage de plusieurs courbes sur le mme graphique en passant cette fonction une matrice ymat dans laquelle
chaque courbe fait l'objet d'une colonne.
Remarque : on peut aussi calculer le trac de la courbe sans le dessiner avec l'affectation
[xs,ys]=stairs(...); , puis le dessiner ultrieurement avec plot(xs,ys,linespec);
Ex
x1=0:0.6:4*pi; y1=x1.*cos(x1);
stairs(x1,y1,'r');
hold('on');
x2=0:0.2:4*pi; y2=5*cos(2*x2);
stairs(x2,y2,'g');
grid('on');
Ex
x=0:0.2:4*pi; y=sin(x).*sqrt(x);
stem(x,y,'mo-');
grid('on');
19
MATLAB et Octave - 6. Graphiques, images, animations
Ex
dy=linspace(-1,1,10) ;
dx=0.5*ones(1,length(dy)) ;
% vecteur ne contenant que des val. 0.5
feather(dx,dy)
grid('on')
axis([0 12 -1 1])
Ex
Attention : le paramtre format a une signification diffrente selon que l'on utilise MATLAB ou Octave :
Voir en outre les fonctions suivantes, spcifiques Octave : semilogxerr , semilogyerr , loglogerr
Ex 1
x=0:0.1:2; y=sin(x);
y_approx = x - (x.^3/6); % approximation fct sinus
error = y_approx - y;
errorbar(x,y,error,'r--o');
grid('on');
20
MATLAB et Octave - 6. Graphiques, images, animations
x=[1 3 5 9 13];
y=[3 3.8 3.5 4.1 3.8];
lowerX=[0.5 1 1.5 1 2];
upperX=[2 1 2 3 2];
lowerY=[0.2 0.1 0.3 0.2 0.3];
upperY=[0.1 0.2 0.1 0.1 0];
errorbar(x,y, ...
lowerX,upperX,lowerY,upperY,'#~>r');
hold('on');
plot(x,y,'r-o');
legend('off');
grid('on');
Remarque : en jouant avec l'attribut color et en choisissant une table de couleur approprie, cette fonction permet
de grapher des donnes 3D x/y/color
if ~ exist('OCTAVE_VERSION')
facteur=50*50 ; % MATLAB
else
facteur=50 ; % Octave
end
scatter(rand(30,1),rand(30,1), ...
facteur*rand(30,1),rand(30,1),'p','filled');
sous Octave Qt et FLTK 3.4 4.0, l'usage de la fonction colormap est sans effet
21
MATLAB et Octave - 6. Graphiques, images, animations
Ex
x=[1 2 7 11];
ymat=[1 2 4 ; 3 2 7 ; 1 5 -2 ; 2 6 4];
area(x,ymat);
colormap(autumn); % changement palette couleurs
grid('on');
set(gca,'Layer','top'); % quadrillage 1er plan
legend('Un','Deux','Trois')
a) fill(x, y, couleur)
b) fill(xA, yA, couleurA {, xB, yB, couleurB ... } )
c) patch(x, y, couleur)
Dessin 2D de surface(s) polygonale(s) remplie(s) :
a) Dessine et rempli de la couleur spcifie le polygone dfini par les vecteurs de coordonnes x et y. Le polygone
bouclera automatiquement sur le premier point, donc il n'y a pas besoin de dfinir un dernier couple de coordonnes
xn/yn identique x1/y1.
b) Il est possible de dessiner plusieurs polygones (A, B...) d'un coup en une seule instruction en passant en
paramtre cette fonction plusieurs triplets x,y,couleur.
c) Primitive de bas niveau de trac de surfaces remplies, cette fonction est analogue fill sauf qu'elle accumule
(tout comme la primitive de dessin de ligne line ) son trac dans la figure courante sans qu'il soit ncessaire de
faire au pralable un hold('on')
On spcifie la couleur par l'un des codes de couleur dfinis plus haut (p.ex. pour rouge: 'r' ou [1.0 0 0] )
Ex
a=linspace(0,2*pi,20);
x= 4.5 + 0.7*cos(a); % contour disque noir de
y= 6.0 + 0.7*sin(a); % rayon 0.7, centre 4.5/6.0
fill([1 8 8 1],[1 7 1 7],'r', ...
[4 5 5 4],[2 2 6 6],[0.6 0 0], ...
x,y,'k');
axis('equal');
axis([0 9 0 8]);
grid('on');
Notez finalement que cette fonction, qui s'appuie sur la fonction patch , accumule son trac dans la figure courante
sans qu'il soit ncessaire de faire au pralable un hold('on')
Ex
rectangle('position',[1 2 2 1],'curvature',1)
text(1.1,2.5,'Curvature 1')
22
MATLAB et Octave - 6. Graphiques, images, animations
axis([0 6 0 6.5])
axis('equal')
grid('on')
Ex
val=[20 15 60 10 35 50 10];
subplot(1,2,1);
pie(val, [0 0 1 0 0 1 0]);
colormap(summer); % changement palette couleur
subplot(1,2,2);
pie3(val);
legend('un','deux','trois','quatre', ...
'cinq','six','sept', ...
'location','east');
a) bar( {x,} y )
b) bar( {x,} mat {,larg} {,'style'} )
c) barh( {y,} mat {,larg} {,'style'} )
Graphique 2D en barres :
a) Dessine les barres verticales dfinies par les vecteurs x (position de la barre sur l'axe horizontal) et y (hauteur de
la barre). Si le vecteur x n'est pas fourni, les barres sont uniformment rparties en X selon les indices du vecteur y
(donc positionnes de 1 n).
b) Sous cette forme, on peut fournir une matrice mat dans laquelle chaque ligne dfinira un groupe de barres qui
seront dessines :
cte--cte si le paramtre style n'est pas spcifi ou que sa valeur est 'grouped'
de faon empile si la valeur de ce paramtre est 'stacked'
Avec le paramtre larg, on spcifie le rapport "largeur des barres / distance entre barres" dans le cadre du groupe ; la
valeur par dfaut est 0.8 ; si celle-ci dpasse 1, les barres se chevaucheront. Le nombre d'lments du vecteur x doit
tre gal au nombre de lignes de la matrice mat.
c) Identique la forme b), sauf que les barres sont dessines horizontalement et positionnes sur l'axe vertical selon
les valeurs du vecteur y
Remarque : on peut aussi calculer les tracs sans les dessiner avec l'affectation [xb,yb]=bar(...); , puis les
dessiner ultrieurement avec plot(xb,yb,linespec);
23
MATLAB et Octave - 6. Graphiques, images, animations
Ex 1
x=log(1:0.5:12);
y=sin(x);
bar(x,y);
axis([0 2.6 0 1]);
grid('on');
Ex 2
x=[2 4 9 11];
mat=[10 8 7 ; 2 3 5 ; 12 13 11 ; 4 5 3];
bar(x,mat,0.9,'grouped');
hold('on');
plot([2 4 6 12],[5 9 3 10]);
barh(x,mat,0.8,'stacked');
legend('un','deux','trois',-1)
colormap(summer)
annot={'note1','note2','note3','note4'};
for n=1:length(annot)
gtext(annot{n});
end
Voir aussi la fonction [nval {vindex}]=histc(y,limits) (qui ne dessine pas) permettant de dterminer la
distribution des valeurs de y dans des catgories dont les 'bordures' (et non pas le centre) sont prcisment dfinies
par le vecteur limits.
Remarque : sous MATLAB, y peut aussi tre une matrice de valeurs ! Si cette matrice comporte k colonnes, la
fonction hist effectue k fois le travail en examinant les valeurs de la matrice y colonne aprs colonne. Le
graphique contiendra alors n groupes de k barres. De mme, la variable nval retourne sera alors une matrice de n
lignes et k colonnes, mais xout restera un vecteur de n valeurs (mais, dans ce cas, en colonne).
Remarque : il existe sous Octave une variante de cette fonction nomme hist2d (dans le package "plot", qui
ne semble cependant plus maintenu)
Voir (plus bas) la fonction rose qui ralise aussi des histogrammes de distribution mais dans un systme de
coordonnes polaire.
24
MATLAB et Octave - 6. Graphiques, images, animations
Ex
y=[4 8 5 2 6 8 0 6 13 14 10 7 4 3 12 13 6 3 5 1];
[nval xout]=hist(y)
% => nval=[2 1 4 2 4 2 0 1 1 3]
% xout=[0.7 2.1 3.5 4.9 6.3 7.7 9.1
% 10.5 11.9 13.3]
hist(y); % => 1er graphique ci-contre
set(gca,'XTick',xout) % annote axe X sous barres
[nval xout]=hist(y,7)
% => nval=[3 4 5 3 1 1 3]
% xout=[1 3 5 7 9 11 13]
hist(y,7); % => 2e graphique ci-contre
set(gca,'XTick',xout) % annote axe X sous barres
[nval xout]=hist(y,centres)
% => nval=[7 8 2 3]
% xout=[3 5 11 13] % identique centres
hist(y,centres) % => 3e graphique ci-contre
axis([2 14 0 9]);
set(gca,'XTick',centres) % annote axe X sous barres
a) plotmatrix(m1, m2 {,linespec})
b) plotmatrix(m {,linespec})
Matrice de graphiques en semis de points :
a) En comparant les colonnes de la matrice m1 (de dimension P lignes x M colonnes) avec celles de m2 (de
dimension P lignes x N colonnes), affiche une matrice de N (verticalement) x M (horizontalement) graphiques en
semis de points
b) Cette forme est quivalente plotmatrix(m, m {,linespec}) , c'est dire que l'on effectue toutes les
comparaisons possibles, deux deux, des colonnes de la matrice m et qu'on affiche une matrice de comportant
autant de lignes et colonnes qu'ily a a de colonnes dans m. En outre dans ce cas les graphiques se trouvant sur la
diagonale (qui reprsenteraient des semis de points pas trs intressants, car distribus selon une ligne diagonale)
sont remplacs par des graphiques en histogrammes 2D (frquence de distribution) correspondant la fonction
hist(m(:,i))
Ex
25
MATLAB et Octave - 6. Graphiques, images, animations
Ex
hold('off'); clf;
for k=0:32
angle=k*2*pi/32;
x=cos(angle); y=sin(angle);
if mod(k,2)==0
coul='red'; epais=2;
else
coul='yellow'; epais=4;
end
line([0 x], [0 y], ...
'Color', coul, 'LineWidth', epais);
end
axis('off'); axis('square');
Voir aussi la fonction ezpolar qui permet de tracer, dans un systme polaire, une fonction dfinie par une expression.
Voir en outre les fonctions cart2pol et pol2cart de conversion de coordonnes carthsiennes en coordonnes polaires
et vice-versa.
Ex 1
angle1=0:0.02:2*pi;
rayon1=sin(2*angle1).*cos(2*angle1);
polar(angle1, rayon1, 'b');
angle2=0:pi/8:2*pi;
rayon2=[repmat([0.1 0.3],1,8), 0.1];
hold('on');
polar(angle2, rayon2, 'r');
26
MATLAB et Octave - 6. Graphiques, images, animations
Ex 2
angle=0:0.02:2*pi;
polar([angle' angle'], ...
[sin(angle') cos(angle')],'.');
legend('sinus','cosinus');
rose(val {,n} )
Histogramme polaire de distribution de valeurs (ou histogramme angulaire) :
Cette fonction est analogue la fonction hist vue plus haut, sauf qu'elle travaille dans un systme polaire
angle/rayon. Les valeurs dfinies dans le vecteur val, qui doivent ici tre comprises entre 0 et 2*pi, sont rparties
dans n catgories (par dfaut 20 si n n'est pas spcifi) et dessines sous forme de tranche de gteau dans un
diagramme polaire o l'angle dsigne la plage des valeurs, et le rayon indique le nombre de valeurs se trouvant dans
chaque catgorie.
Ex
rose(2*pi*rand(1,1000),16);
27
MATLAB et Octave - 6. Graphiques, images, animations
6.3 Graphiques 2D et 3D
MATLAB/Octave offre un grand nombre de fonctions de visualisation permettant de reprsenter des donnes 3D sous
forme de graphiques 2D (vue plane avec reprsentation de la 3e dimension sous forme de courbes de niveau, champ de
vecteurs, dgrads de couleurs...) ou de graphiques 3D (vue perspective). Ces donnes 3D peuvent tre des points/symboles,
des vecteurs, des lignes, des surfaces (par exemple fonction z = fct(x,y) ) et des tranches de volumes (dans le cas de jeux de
donnes 4D).
S'agissant des reprsentations perspectives 3D, et comme dans tout logiciel de CAO/modlisation 3D, diffrents types de "rendu"
des surfaces sont possibles : "fil de fer" (mesh, wireframe), colories, ombres (shaded surface). L'cran d'affichage ou la feuille
de papier tant 2D, la vue finale d'un graphique 3D est obtenue par projection 3D->2D au travers d'une "camra" dont
l'utilisateur dfinit l'orientation et la focale, ce qui donne un effet de perspective.
La liste des fonctions relatives aux graphiques 3D est accessible sous MATLAB via help graph3d ainsi que help
specgraph . Concernant GNU Octave, on se rfrera au chapitre "Plotting" du Manuel Octave (HTML ou PDF), et l'aide
en-ligne pour les fonctions additionnelles apportes par Octave-Forge.
Donne du problme :
x 0 1 2 3 4 5 6 7 8 9 10
y ------------------------
2 | |
2.5 | |
3 | matrice z |
3.5 | (7 x 11) |
4 | |
4.5 | |
5 | |
------------------------
Solution 1 : mthode classique ne faisant pas intervenir les capacits vectorises de MATLAB/Octave :
Cette solution s'appuie sur 2 boucles for imbriques utilises pour parcourir tous les points de la grille et de calculer
individuellement chacun des lments de la matrice z . C'est la technique classique utilise dans les langages de programmation
"non vectoriss", et son implmentation MATLAB/Octave correspond au code suivant :
[Xm,Ym]=meshgrid(x,y);
z2=sin(Xm/3).*cos(Ym/3); % calcul de la matrice z en une seule instruction vectorise
% notez bien que l'on fait produit .* (lm. par lm.) et non pas * (vectoriel)
surf(x,y,z2); % visualisation de la surface
Remarque: dans le cas tout fait particulier de cette fonction, on aurait aussi pu faire tout simplement
28
MATLAB et Octave - 6. Graphiques, images, animations
z=cos(y'/3)*sin(x/3) (en transposant y et en utilisant le produit vectoriel). Nous vous laissons rflchir
pourquoi cela fonctionne ;-)
sur la base des 2 vecteurs d'chantillonnage x et y (en ligne ou en colonne, peu importe!) dcrivant le domaine des
valeurs de la grille en X et Y, la fonction meshgrid gnre 2 matrices Xm et Ym d'chantillonnage (voir figure
ci-dessous) qui ont les proprits suivantes :
Xm est constitue par recopie, en length(y) lignes, du vecteur x
Ym est constitue par recopie, en length(x) colonnes, du vecteur y
elles ont donc toutes deux pour dimension length(y) lignes * length(x) colonnes (comme la matrice z que
l'on s'apprte dterminer)
on peut par consquent calculer la matrice z=fct(x,y) par une seule instruction MATLAB/Octave vectorise (donc sans boucle
for ) en utilisant les 2 matrices Xm et Ym et faisant usage des oprateurs "terme terme" tels que + , - , .* ,
./ ... ; en effet, l'lment z(ligne,colonne) peut tre exprim en fonction de Xm(ligne,colonne) (qui est
identique x(colonne) ) et de Ym(ligne,colonne) (qui est identique y(ligne) )
vous pouvez vrifier vous-mme que les 2 solutions ci-dessus donnent le mme rsultat avec isequal(z1,z2) (qui
retournera vrai, preuve que les matrices z1 et z2 sont rigoureusement identiques)
pour grapher la surface avec les fonctions mesh , meshc , surf , surfc , surfl ..., il est important de noter que :
si l'on passe ces fonctions le seul argument z (matrice d'altitudes), les axes du graphiques ne seront pas gradus
en fonction des valeurs en X et Y, mais selon les indices des lments de la matrice, c'est--dire de 1 length(x) en X,
et de 0 length(y) en Y
pour avoir une graduation correcte des axes X et Y (i.e. selon les valeurs en X et Y), il est absolument ncessaire
de passer ces fonctions 3 arguments, choix : (x, y, z) (vecteur, vecteur, matrice), ou (Xm, Ym, z)
(matrice, matrice, matrice)
-------------(7x11)--------------- ------------------------(7x11)-------------------------
| 0 1 2 3 4 5 6 7 8 9 10 | | 2 2 2 2 2 2 2 2 2 2 2 | | 2|
| 0 1 2 3 4 5 6 7 8 9 10 | | 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 | |2.5|
| 0 1 2 3 4 5 6 7 8 9 10 | | 3 3 3 3 3 3 3 3 3 3 3 | | 3|
Xm=| 0 1 2 3 4 5 6 7 8 9 10 | Ym=| 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 | y=|3.5|
| 0 1 2 3 4 5 6 7 8 9 10 | | 4 4 4 4 4 4 4 4 4 4 4 | |
| 0 1 2 3 4 5 6 7 8 9 10 | | 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 | |4.5|
| 0 1 2 3 4 5 6 7 8 9 10 | | 5 5 5 5 5 5 5 5 5 5 5 | | 5|
---------------------------------- -------------------------------------------------------
29
MATLAB et Octave - 6. Graphiques, images, animations
comme illustr dans la solution 2 de l'exemple ci-dessus. Il est important de noter que la grille peut avoir un nombre de
points diffrent en X et Y et que les valeurs dfinies par les vecteurs x et y ne doivent pas ncessairement tre espaces
linairement, ce qui permet donc de dfinir un maillage absolument quelconque.
Si le paramtre y est omis, cela est quivalent meshgrid(x,x) qui dfini un maillage avec la mme plage de valeurs en
X et Y
La fonction meshgrid remplace la fonction meshdom qui est obsolte.
b) Sous cette forme, la fonction gnre les tableaux tri-dimensionnels Xm,Ym et Zm qui sont ncessaires pour valuer une
fonction v=fct(x,y,z) et gnrer des graphiques 3D volumtriques (par exemple avec slice : voir exemple au chapitre
"Graphiques 3D volumtriques").
ndgrid(...)
C'est l'extension n-dimension de la fonction meshgrid
Plutt que d'entrer manuellement les coordonnes x/y/z d'une srie de points irrgulirement distribus, nous allons gnrer un
semis de point x/y irrgulier, puis calculer la valeur z en chacun de ces points en utilisant une fonction z=fct(x,y) donne, en
l'occurence z= x * exp(-x^2 -y^2). Nous visualiserons alors ce semis de points, puis effecuerons une triangulation de
Delaunay pour afficher cette surface sous forme brute par des triangles. Puis nous utiliserons griddata pour interpoler une
grille rgulire dans ce semis de points, et nous visualiserons la surface correspondante.
Solution :
plot(x,y,'o');
grid('on');
axis([-2 2 -2 2]);
stem3(x,y,z,'-*');
grid('on');
30
MATLAB et Octave - 6. Graphiques, images, animations
xi= -2:0.2:2;
yi= xi'; % ce doit tre un vecteur colonne !!!
[XI,YI,ZI]= griddata(x,y,z,xi,yi,'linear');
% interpolation sur grille
surfc(XI,YI,ZI); % affich. surf. interpole et contours
31
MATLAB et Octave - 6. Graphiques, images, animations
y=-2:0.2:2;
x=-3:0.2:3;
[X,Y]=meshgrid(x,y);
Z=100*sin(X).*sin(Y) .* exp(-X.^2 + X.*Y - Y.^2);
hold('on')
plot(xprofil, yprofil, 'b.-') % trace du profil
32
MATLAB et Octave - 6. Graphiques, images, animations
6.3.2 Graphiques 2D
On appelle les types de graphiques prsents ici des graphiques 2D ("2D et demi") car, reprsentant des donnes 3D sur un
graphique 2 axes (2D), ils sont mi-chemin entre le 2D et le 3D.
x=-2:0.2:2;
y=x;
[X,Y]=meshgrid(x,y);
Z=100*sin(X).*sin(Y) .* exp(-X.^2 + X.*Y - Y.^2);
MATLAB et Octave 3
Fonction et description
Exemple Illustration
De faon interne, contour fait appel la fonction MATLAB/Octave contourc d'interpolation de courbes (calcul
de la matrice C).
Voir aussi la fonction ezcontour (easy contour) de visualisation, par courbes de niveau, d'une fonction 2
variables dfinie sous forme d'une expression fct(x,y).
Ex
33
MATLAB et Octave - 6. Graphiques, images, animations
end
Voir aussi la fonction ezcontourf (easy contour filled) de visualisation, par courbes de niveau avec remplissage,
d'une fonction 2 variables dfinie sous forme d'une expression fct(x,y).
Ex
contourf(X,Y,Z,[-10:2.5:30])
% courbes tous les 2.5
surface({X, Y,} Z ) ou
pcolor({X, Y,} Z ) (pseudo color)
Affichage en "facettes de couleur" ou avec lissage interpol :
La matrice de valeurs Z est affiche en 2D sous forme de facettes colores (mode par dfaut, sans interpolation,
correspondant interp('faceted') ).
Les couleurs indexes sont contrles par les fonctions colormap et caxis (dcrites plus loin).
On peut en outre raliser une interpolation de couleurs (lissage) avec la commande shading (galement dcrite
plus loin).
Ex 1
Ex 2
34
MATLAB et Octave - 6. Graphiques, images, animations
Ex 3
Ex
[dx,dy]= gradient(Z,0.25,0.25);
% calcul champ vecteurs
quiver(X,Y,dx,dy,1.5)
% affichage champ vecteurs
35
MATLAB et Octave - 6. Graphiques, images, animations
6.3.3 Graphiques 3D
Nous dcrivons ci-dessous les fonctions MATLAB/Octave les plus importantes permettant de reprsenter en 3D des points,
lignes, barres et surfaces.
Fonction et description
Exemple Illustration
Ex
z1=0:0.1:10*pi;
x1=z1.*cos(z1);
y1=z1.*sin(z1);
plot3(x1,y1,z1,'r',x2,y2,z2,'o')
set(gca,'xtick',[-30:10:30])
set(gca,'ytick',[-30:10:30])
set(gca,'ztick',[0:5:35])
set(gca,'Xcolor',[0.5 0.5 0.5], ...
'Ycolor',[0.5 0.5 0.5], ...
'Zcolor',[0.5 0.5 0.5])
ezplot3('t*sin(t)','t*cos(t)','t',[0,10*pi])
36
MATLAB et Octave - 6. Graphiques, images, animations
Ex
x=linspace(0,6*pi,100);
y=x.*sin(x);
z=exp(x/10)-1;
stem3(x,y,z,'mp')
xlabel('x')
ylabel('x*sin(x)')
zlabel('e^x/10 -1')
grid('on')
ce paramtre permet de spcifier la couleur de chaque maille (et visualiser ainsi des donnes 4D en
dfinissant la couleur indpendemment de l'altitude)
si COUL est une matrice 2D de mme dimension que Z, elle dfinit des "couleurs indexes", et une
transformation linaire est automatiquement applique (via les paramtres [cmin cmax] dcrits plus loin)
pour faire correspondre ces valeurs avec les indices de la table de couleurs courante
mais COUL peut aussi spcifier des "vraies couleurs" en composantes RGB ; ce sera alors une matrice 3D
dont COUL(:,:,1) dfinira la composante rouge (de 0.0 1.0), COUL(:,:,2) la composante verte, et
COUL(:,:,3) la composante bleue
si COUL n'est pas spcifi, la couleur sera "proportionelle" la hauteur Z, et le choix et l'usage de la palette
sera effectu par les fonctions colormap et caxis (dcrites plus loin)
hidden('on | off')
Affichage/masquage des lignes caches :
Les fonctions mesh , meshc , meshz , waterfall effectuant un traitement des lignes caches (hidden
lines), cette commande permet de le dsactiver si ncessaire.
Ex
x=-2:0.2:2; y=x;
[X,Y]=meshgrid(x,y);
Z=100*sin(X).*sin(Y).* ...
exp(-X.^2 + X.*Y - Y.^2);
37
MATLAB et Octave - 6. Graphiques, images, animations
Ex
h= waterfall(X,Y,Z);
% on rcupre le handle du graphique pour
% changer ci-dessous paisseur des lignes
set(h,'linewidth',2)
Voir aussi la fonction contourslice permettant de dessiner des courbes de niveau selon les plans XZ et YZ
Ex
ribbon({x,} Y {,width} )
Dessin 3D de lignes 2D en rubans :
Dessine chaque colonne de la matrice Y comme un ruban. Un vecteur x peut tre spcifi pour graduer l'axe. Le
scalaire width dfini la largeur des rubans, par dfaut 0.75 ; s'il vaut 1, les bandes se touchent.
38
MATLAB et Octave - 6. Graphiques, images, animations
Ex
ribbon(x(1:10),Z(1:10,1:10),0.7)
axis([1 10 -2 0 0 30])
ribbon(Z(1:10,1:10))
Voir aussi les fonctions ezsurf et ezsurfc qui sont le pendant de ezmesh et ezmeshc .
Ex
39
MATLAB et Octave - 6. Graphiques, images, animations
Ex
surfl(X,Y,Z);
Ces 2 fonctions, qui existaient sous Octave 3.0.1/JHandles, ont disparu sous Octave 3.2 4.0 !?
x=[2 4 9 11];
mat=[10 8 7 ; 2 3 5 ; 12 13 11 ; 4 5 3];
bar3(x,mat,0.5,'detached')
colormap(autumn)
40
MATLAB et Octave - 6. Graphiques, images, animations
Voyez aussi la fonction coneplot de trac de vecteurs dans l'espace par des cnes.
Ex
[X,Y]=meshgrid(-2:0.25:2, -1:0.2:1);
Z = X .* exp(-X.^2 - Y.^2);
[U,V,W]= surfnorm (X,Y,Z);
% normales la surface Z=fct(X,Y)
surf(X,Y,Z)
hold('on')
quiver3(X,Y,Z, U,V,W, 0.5, 'b')
colormap(hot)
shading('flat')
axis([-2 2 -1 1 -.6 .6])
Et citons encore quelques autres fonctions graphiques 3D qui pourront vous tre utiles, non dcrites dans ce support de cours :
41
MATLAB et Octave - 6. Graphiques, images, animations
Pour visualiser des donnes 4D, MATLAB/Octave propose diffrents types de graphiques 3D dits "volumtriques", le plus
couramment utilis tant slice (dcrit ci-dessous) o le 4me paramtre est reprsent par une couleur !
De faon analogue aux graphiques 3D (pour lesquels il s'agissait d'laborer pralablement une matrice 2D dfinissant la surface Z
grapher), ce qu'il faut ici fournir aux fonctions de graphiques volumtriques c'est une matrice tri-dimensionnelle dfinissant
un cube de valeurs V. Si ces donnes 4D rsultent d'une fonction v = fct(x,y,z), on dterminera cette matrice 3D V par
chantillonnement de la fonction en s'aidant de tableaux auxiliaires Xm,Ym et Zm (ici galement tri-dimensionnels)
pralablement dtermines avec la fonction meshgrid .
Fonction et description
Exemple Illustration
a) slice({X,Y,Z,} V, sx,sy,sz)
b) slice({X,Y,Z,} V, xi,yi,zi {,mthode})
Affichage 3D de donnes volumtriques sous forme de "tranche(s)" :
a) Les donnes volumtriques V (tableau tri-dimensionnel) sont reprsentes selon des plans orthogonaux
aux axes du graphique (horizontaux ou verticaux) et placs aux cotes dfinies par les scalaires ou vecteurs sx ,
sy et sz . Si l'on ne souhaite pas de tranche selon l'une ou l'autre direction, on mettra [] en lieu et place du
paramtre si correspondant cette direction.
S'agissant des paramtres X , Y et Z , qui ne servent qu' graduer les axes du graphique, on fournira soit les
tableaux 3D auxiliaires Xm,Ym,Zm (pralablement dtermins avec meshgrid pour calculer V ), soit des
vecteurs (dfinissant les valeurs d'chantillonage en x/y/z, et de longueur correspondant aux dimensions de V). Si
ces paramtres sont omis, la graduation de fera de 1 n.
b) Sous cette forme, la "tranche" de visualisation peut tre une surface quelconque (donc pas obligatoirement
plane !) dfinie par une grille rgulire xi / yi associe des altitudes zi . La fonction slice se charge
elle-mme d'interpoler (avec interp3 ) les valeurs de V sur cette surface en utilisant l'une des mthode
suivante : 'linear' (dfaut), 'nearest' ou 'cubic' . Cette surface/grille d'interpolation/visualisation
sera donc dfinie par 3 matrices 2D xi , yi et zi
Ex 1
Ex 2
clf
[xi,yi]=meshgrid([-4:0.5:4],[-4:1:4]);
% ci-dessus dfinition grille X/Y
zi = 0.5 * xi; % plan inclin sur cette grille
slice (v_xyz,v_xyz,v_xyz, V, xi,yi,zi)
zi = zi + 4; % 2e plan au dessus du prcd.
hold('on')
slice (v_xyz,v_xyz,v_xyz, V, xi,yi,zi)
zi = zi - 8; % 3e plan au dessous du prcd.
slice (v_xyz,v_xyz,v_xyz, V, xi,yi,zi)
grid('on')
axis([min max min max min max])
set(gca,'Xtick',[min:max],'Ytick',[min:max], ...
'Ztick',[min:max])
42
MATLAB et Octave - 6. Graphiques, images, animations
On peut encore mentionner les fonctions de reprsentation de donnes 4D suivantes, en renvoyant l'utilisateur l'aide en-ligne et
aux manuels pour davantage de dtails et des exemples :
43
MATLAB et Octave - 6. Graphiques, images, animations
1) Couleurs vraies
En informatique, chaque couleur est habituellement dfinie de faon additive par ses composantes RGB (red, green, blue).
MATLAB et Octave ont pris le parti de spcifier les intensits de chacune de ces 3 couleurs de base par un nombre rel compris
entre 0.0 et 1.0. Il est ainsi possible de dfinir des couleurs absolues, appeles "couleurs vraies" (true colors), par un triplet
RGB [red green blue] sous la forme d'un vecteur de 3 nombres compris entre 0.0 et 1.0.
2) Table de couleurs
chaque figure MATLAB/Octave est associe une "table de couleurs" (palette de couleurs, colormap). Il s'agit d'une matrice,
que nous dsignerons par cmap , dont chaque ligne dfinit une couleur par un triplet RGB. Le nombre de lignes de cette
matrice est donc gal au nombre de couleurs dfinies, et le nombre de colonnes est toujours 3 (valeurs, comprises entre 0.0 et
1.0, des 3 composantes RGB de la couleur dfinie).
3) Couleurs indexes
Bon nombre de fonctions graphiques 2D, 2D, 3D ( contour , surface / pcolor , mesh et surf pour ne citer que les
plus utilises...) travaillent en mode "couleurs indexes" (pseudo-couleurs) : chaque facette d'une surface, par exemple, ne se
voit pas attribuer une "vraie couleur" (triplet RGB) mais pointe, par un index, vers une couleur de la table de couleurs. Cette
technique prsente l'avantage de pouvoir changer l'ensemble des couleurs d'un graphique sans modifier le graphique lui-mme
mais en modifiant simplement de table de couleurs (palette). En fonction de la taille de la table choisie, on peut aussi augmenter
ou diminuer le nombre de nuances de couleurs du graphique.
Lorsque MATLAB/Octave cre une nouvelle figure, il met en place une table de couleur par dfaut en utilisant la fonction
jet(64) . La fonction jet(n) cre une table de n couleurs en dgrads allant du bleu fonc au brun en passant par le cyan,
vert, jaune, orange et rouge. La table de couleur par dfaut d'une nouvelle figure a par consquent 64 couleurs.
Ex : jet_cmap=jet(64); calcule et stocke la table de couleurs par dfaut sur la matrice jet_cmap ;
jet_cmap(57,:) retourne par exemple la 57me couleur de cette table qui, comme vous pouvez le vrifier, est gale
(MATLAB) ou trs proche (Octave) de [1 0 0], donc le rouge pur.
L'utilisateur peut crer lui-mme ses propres tables de couleur et les appliquer un graphique avec la fonction colormap
prsente plus bas. Il existe cependant des tables de couleur prdfinies ainsi que des fonctions de cration de tables de couleurs.
Ex : ma_cmap=[0 0 0;2 2 2;4 4 4;6 6 6;8 8 8;10 10 10]/10; gnre une table de couleurs composes de
6 niveaux de gris allant du noir-pur au blanc-pur ; on peut ensuite l'appliquer un graphique existant avec
colormap(ma_cmap)
La mise en correspondance (mapping) des 'donnes de couleur' d'un graphique (p.ex. les valeurs de la matrice Z d'un graphique
surf(..., Z) , ou les valeurs de la matrice 2D COUL d'un graphique surf(..., Z, COUL) ) avec les indices de sa table de
couleurs peut s'effectuer de faon directe (direct mapping) ou par une mise l'chelle (scaled mapping).
Scaled mapping : dans ce mode (qui est le dfaut), MATLAB fait usage d'un vecteur 2 lments [cmin cmax] dans
lequel cmin spcifie la valeur de 'donne de couleur' du graphique qui doit tre mise en correspondance avec la 1re couleur
de la table de couleur ; cmax spcifiant respectivement la valeur de 'donne de couleur' devant tre mise en correspondance
avec la dernire couleur de la table. Les valeurs de 'donne de couleur' se trouvant dans cet intervalle sont automatiquement
mises en correspondance avec les diffrentes indices de la table par une transformation linaire. MATLAB dfinit
automatiquement les valeurs cmin et cmax de faon qu'elles correspondent la plage de 'donnes de couleur' de tous les
lments du graphique, mais on peut les modifier avec la commande caxis([cmin cmax]) prsente plus bas.
Direct mapping : pour activer ce mode, il faut dsactiver le scaling en mettant la proprit 'CDataMapping' la valeur
'direct' (en passage de paramtres lors de la cration du graphique, ou aprs coup par manipulation de handle). Dans
ce mode, rarement utilis, les 'donnes de couleur' sont mise en correspondance directe (sans scaling) avec les indexes de la
matrice de couleur. Une valeur de 1 (ou infrieure 1) pointera sur la 1re couleur de la table, une valeur de 2 sur la
seconde couleur, etc... Si la table de couleur comporte n couleurs, la valeur n (ou toute valeur suprieure n) pointera sur la
44
MATLAB et Octave - 6. Graphiques, images, animations
dernire couleur.
Nous prsentons ci-dessous les principales fonctions en relation avec la manipulation de tables de couleurs.
Fonction et description
Exemple Illustration
a) colormap(cmap)
b) colormap(named_cmap)
c) cmap = colormap
Appliquer une table de couleurs, ou rcuprer la table courante d'une figure :
a) Applique la table de couleur cmap (matrice nx3 de n triplets RGB) la figure active.
b) Applique une table de couleur nomme la figure active. On dispose, sous MATLAB/Octave, des 18 tables nommes
suivantes (voir leur description plus bas) : autumn , bone , colorcube , cool , copper , flag , gray , hot ,
hsv , jet , lines , pink , prism , spring , summer , vga , white , winter
c) Rcupre, sur la matrice cmap, la table de couleur courante de la figure active
Remarque IMPORTANTE : les objets qui sont bass sur des "vraies couleurs" ou des codes de couleur linespec ne seront
pas affects par un changement de table de couleurs !
colormap('list')
Affiche la liste des fonctions named_cmap de tables de couleurs prdfinies ( autumn , bone , cool ...)
a) brighten(beta)
b) cmap = brighten(beta)
Eclaircir ou assombrir une table de couleurs :
Le paramtre beta est un scalaire qui aura pour valeur :
0.0 1.0 si l'on veut augmenter la luminosot de la table de couleur (brighter)
0.0 -1.0 si l'on veut l'assombrir (darker).
a) Modifie la table de couleur courante de la figure active (avec rpecussion immdiate au niveau de l'affichage)
b) Copie la table de couleur courante de la figure active sur cmap, et modifie cette copie sans impact sur la table de couleur
courante et sur l'affichage
Remarque IMPORTANTE : les objets qui sont bass sur des "vraies couleurs" ou des codes de couleur linespec ne seront
pas affects par cette fonction !
Fonctions de cration de tables de couleurs : Illustration des palettes gnres par ces fonctions :
hot(n) : black-red-yellow-white
cool(n) : shades of cyan and magenta
jet(n) : variant of HSV
hsv(n) : hue-saturation-value
45
MATLAB et Octave - 6. Graphiques, images, animations
prism(n) : prism
colorcube(n) : enhanced color-cube
Ex
colormap(copper(64))
shading('flat')
colorbar % => second graphique ci-contre
rgbplot(cmap)
Graphe les 3 courbes R/G/B de la table de couleurs cmap spcifie, avec l'index de couleur en abscisse (i.e. numro de ligne
de cmap ) et l'intensit en ordonne (de 0 1)
Ex
rgbplot (jet(256))
46
MATLAB et Octave - 6. Graphiques, images, animations
pcolor(X,Y,Z)
colormap(jet(64)) % colormap par dfaut
shading('interp')
axis('off')
caxis('auto') % dfaut
colorbar('SouthOutside') % => premier graphique
caxis([0 20])
colorbar('SouthOutside') % => second graphique
caxis([-30 50])
colorbar('SouthOutside') % => troisime graphique
47
MATLAB et Octave - 6. Graphiques, images, animations
Exemple Illustration
a) Sous cette forme (voir figure ci-dessous), la seule actuellement utilisable sous Octave/Gnuplot, on spcifie
l'orientation de la vue 3D par l'azimut az (compt dans le plan XY depuis l'axe Y ngatif, dans le sens inverse des
aiguilles) et l'lvation verticale el (compte verticalement depuis l'horizon XY, positivement vers le haut et
ngativement vers le bas), tous deux en degrs.
b) L'orientation de la vue 3D est ici spcifie par un vecteur de coordonnes [xo yo zo] pointant vers l'observateur
c) view(2) signifie vue 2D, c'est dire vue de dessus (selon l'axe -Z), donc quivalent view(0, 90)
view(3) signifie vue 3D par dfaut, donc quivalent view(-37.5, 30)
d) Dfinit l'orientation partir de la matrice 4x4 de transformation T calcule par la fonction viewmtx
e) Rcupre les paramtres relatifs l'orientation courante de la vue
Ex : view(0,0) ralise une projection selon le plan XZ, et view(90,0) ralise une projection selon le plan
YZ
48
MATLAB et Octave - 6. Graphiques, images, animations
Les proprits de rflectance des surfaces par rapport la lumire peuvent tre dfinie par la fonction
material('shiny' | 'dull' | 'metal' | [ka kd ks n sc]')
surf(X,Y,Z)
axis([-2 2 -2 2 -10 30])
49
MATLAB et Octave - 6. Graphiques, images, animations
La prsentation de ce domaine dpassant le cadre de ce cours, nous nous contentons d'numrer ici les fonctions les plus
importantes :
Rappelons encore ici la possibilit de rcuprer une figure sous forme raster par copie d'cran, avec les outils du systme
d'exploitation (p.ex. la touche alt-PrintScreen qui copie l'image de la fentre courante dans le presse-papier).
b. La figure courante (ou spcifie par handle) est imprime sur l'imprimante par dfaut (voir printopt ) ou
l'imprimante spcifie.
Une alternative pour imprimer la figure consiste utiliser le menu de fentre de figure : File > Print
Vectoris
svg : fichier SVG (Scalable Vector Graphics)
pdf : fichier Acrobat PDF
meta ou emf : sous Windows: copie la figure dans le presse-papier en format vectoris avec preview
(Microsoft Enhanced Metafile) ; sous Octave: gnre fichier
ill : fichier au format Illustrator 88
hpgl : fichier au format HP-GL
Sous Octave, il existe encore diffrents formats lis TeX/LaTeX (voir help print )
Raster
png : fichier PNG (Potable Network Graphics)
50
MATLAB et Octave - 6. Graphiques, images, animations
jpeg ou jpegnn ou jpg : fichier JPEG, avec niveau de qualit nn= 0 (la moins bonne) 100 (la
meilleure)
tiff : fichier TIFF
gif : fichier GIF
saveas(no_figure,'fichier' {,'format'} )
saveas(handle,'fichier' {,'format'} )
Sauvegarde la figure no_figure (ou l'objet de graphique identifi par handle ) sur le fichier spcifi et dans le
format indiqu.
les diffrents formats possibles correspondent grosso modo aux valeurs indiques ci-dessus pour le paramtre device
de la commande print
si l'on omet le format, il est dduit de l'extension du nom du fichier
si l'on omet l'extension dans le nom du fichier, elle sera automatiquement reprise du format spcifi
51
MATLAB et Octave - 6. Graphiques, images, animations
La technique ci-dessous est analogue, mais n'est implmente que sous MATLAB :
saveas(handle,'fichier','fig') (remarque: c'est l'option 'fig' qui n'est pas implmente dans )
Sauvegarde l'objet graphique spcifi par handle dans le fichier indiqu.
Pour sauvegarder la figure entire, indiquer gcf la place de handle . Sans indiquer d'extension au fichier ,
l'extension .fig sera ajoute.
open('fichier')
Recharge et affiche dans une figure l'objet prcdemment sauvegard dans un fichier .
52
MATLAB et Octave - 6. Graphiques, images, animations
Ces objets sont organiss selon une hrarchie qui s'tablit gnralement ainsi (voir l'attribut type de ces handles) :
Cette hirarchie d'objets transparat lorsque l'on examine comment les handles sont relis entre eux :
l'attribut parent d'un handle fournit le handle de l'objet de niveau suprieur (objet parent)
l'attribut children d'un handle fournit le(s) handle(s) du(des) objet(s) enfant(s)
On est donc en prsence d'une "arborescence" d'objets et donc de handles (qui pourraient tre assimils aux branches d'un arbre)
et d'attributs ou proprits (qui seraient les feuilles au bout de ces branches). Chaque attribut porte un nom explicite qui est une
chane de caractre non case-sensitive.
ATTENTION : sous MATLAB, depuis la version R2015 les handles ne sont plus des nombres (double prcision) mais des
objets !
Fonction et description
Exemple Illustration
A) Rcuprer un handle :
handle_objet = fonction_graphique(...)
Trace l'objet spcifi par la fonction_graphique, et retourne le handle_objet correspondant.
a) get(handle)
b) handle
c) var = get(handle, 'PropertyName')
d) structure = get(handle)
a) Affiche l'cran les valeurs courantes de tous les attributs (proprits) de l'objet spcifi par handle.
b) Depuis MATLAB R2015, cela affiche directement les principaux attributs de l'objet spcifi par handle.
c) Rcupre sur var la valeur (PropertyValue) courante correspondant l'attribut PropertyName spcifi.
d) Rcupre sur une structure les valeurs courantes des diffrents attributs (proprits) de l'objet spcifi par son
handle.
a) Le nom PropertyName des attributs n'est, avec cette notation, pas case-sensitive. Il est toujours spcifi en tant
53
MATLAB et Octave - 6. Graphiques, images, animations
Les valeurs PropertyValue des attributs peuvent tre de diffrents types (nombre, chane, tableau...), selon le type
d'attribut.
hold('on');
h2= plot(x2,y2,'ob'); % symboles, rcup. handle
get(h2) % affiche les attributs du semis points
h2 % affiche attributs principaux
get(h1,'Parent') % ou h1.Parent
get(h2,'Parent') % ou h2.Parent
gca % on voit que h1 et h2 ont le mme 'parent'
% qui est le systme d'axes !
get(gca,'Parent')
gcf % 'parent' du systme d'axe => figure !
set(h2,'Marker','*','MarkerSize',10);
% ou h2.Marker ='*'
% h2.MarkerSize =10
for k=1:frames
for n=1:3 % numro de l'toile
dims(n)= dmax(n)* (sin(2*pi*k*osc(n)/frames)+1); Remarque: cette animation a t capture avec le logiciel
end libre CamStudio,
set(h,'sizedata',dims); puis convertie avi->gif-anim (pour affichage dans
pause(duree_max/frames) % temporiser animation navigateur web)
end
Dfinir les proprits d'un objet directement lors du dessin (sans passer par son handle) :
54
MATLAB et Octave - 6. Graphiques, images, animations
55
MATLAB et Octave - 6. Graphiques, images, animations
On souhaite parfois aussi sauvegarder une animation sur un fichier indpendant de MATLAB/Octave ("movie" stand-alone dans un
format vido standard), par exemple pour l'intgrer dans une prsentation (OpenOffice.org/LibreOffice Impress, MS
PowerPoint...).
A titre d'exemple, voyez vous-mme la diffrence en affichant la courbe 3D suivante, successivement avec plot3 puis
comet3 :
z= -10*pi:pi/250:10*pi; x= (cos(2*z).^2).*sin(z); y= (sin(2*z).^2).*cos(z);
Fonction et description
Exemple Illustration
angle=linspace(0,nb_tours*2*pi,nb_points);
z=linspace(0,10,nb_points);
x=z.*cos(angle);
y=z.*sin(angle);
grid('on')
1. le script gnre, de faon itrative, autant d'images (graphiques) que ncessaire pour constituer une animation fluide
2. chaque itration, le graphique courant (figure) est "captur" en tant que "frame" (pixmap) via la fonction getframe ,
56
MATLAB et Octave - 6. Graphiques, images, animations
Fonction et description
Exemple Illustration
a) mov_mat(k) = getframe
b) mov_mat(k) = getframe(handle {,rect} )
"Capture" de l'image de la figure courante sous forme de "frame" :
Capture, sous forme de "movie-frame", de l'image de la figure courante, et enregistrement comme k-me lment
de la matrice-movie mov_mat. Tous les frames saisis doivent avoir la mme dimension (largeur x hauteur), raison
pour laquelle il ne pas modifier la taille de la fentre graphique au cours de l'laboration de l'animation ! Dans la
forme b), on spcifie le handle de la figure et l'on peut dfinir, par le vecteur rect de forme [gauche bas largeur
hauteur], une portion de l'image (units en pixels).
Il est important de noter que cette capture s'effectue au niveau raster ("pixmap"), et que la taille-mmoire
occupe par le frame (et la matrice-frame) sera proportionelle la surface (carr des dimensions) de la fentre de
figure. La dimension originale de la fentre graphique dans laquelle s'labore l'animation a donc beaucoup
d'importance sur la quantit de mmoire-vive ncessaire pour l'laboration du movie, de mme que sur la qualit
d'affichage ultrieure de l'animation (=> importance de trouver un bon compromis !).
movie(mov_mat {, n {, fps } }
Visualisation de movie depuis MATLAB :
Joue l'animation pralablement labore dans la matrice-movie mov_mat. L'animation sera joue n fois (par
dfaut 1x), la cadence de fps frames par seconde (par dfaut 12 frames/sec). Il est possible de spcifier avec un
vecteur n le numro des frames jouer.
Remarques :
Comme alternative ces fonctions d'exportation de movie, on pourrait sauvegarder sur disque chaque frame
sous forme de fichier-image avec les 2 instructions [img]=frame2im(mov_mat(k)); (voir description de
cette fonction ci-dessous) et imwrite(img, ['image-' num2str(n+100) '.jpg'], 'jpg'); , puis
assembler les diffrents fichiers-image image-numro.jpg ainsi produits en une animation (MPEG, QuickTime,
GIF-anim, AVI...) avec l'un des nombreux utilitaires existant (commerciaux, tel que Animation Shop 3, ou
gratuits...).
Il est bien clair qu'une animation MATLAB peut aussi tre sauvegarde, au niveau de sa "matrice-movie"
mov_mat, sous forme d'un fichier de workspace (commande save mat-file mov_mat ), puis tre
recharge dans une session MATLAB ultrieure (avec load mat-file ) et directement joue (avec
movie(mov_mat) ) ; mais cette faon de procder n'est pas efficace car la place mmoire/disque utilise par la
variable mov_mat est trs importante (pas de compression) ; mieux vaut donc utiliser les formats vido
classiques.
57
MATLAB et Octave - 6. Graphiques, images, animations
On prsente ci-dessous 3 implmentations possibles, respectivement sous MATLAB, Octave Linux et Octave Windows.
% Paramtres du graphique
nb_frames=50; % nb frames animation
x=0:0.2:2*pi; y=x; % plage de valeurs en X et Y
[Xm,Ym]=meshgrid(x,y); % matrices grille X/Y
% Paramtres du graphique
nb_frames=50; % nb frames animation
x=0:0.2:2*pi; y=x; % plage de valeurs en X et Y
[Xm,Ym]=meshgrid(x,y); % matrices grille X/Y
58
MATLAB et Octave - 6. Graphiques, images, animations
disp('La video est assemblee, le dossier ''frames'' peut etre detruit !')
La fonction getframe n'existant pas (encore) sous Octave 4.0, comme artifice on passe par une criture temporaire des
frames sur fichiers-disque. Le paramtre '-rdpi' (de la commande print de sauvegarde des frames) nous permet ici de
diminuer la rsolution (donc la taille) de la vido.
% Paramtres du graphique
nb_frames=50; % nb frames animation
x=0:0.2:2*pi; y=x; % plage de valeurs en X et Y
[Xm,Ym]=meshgrid(x,y); % matrices grille X/Y
La fonction rotate (prsente plus haut), qui permet de faire tourner un objet graphique dsign par son handle, peut
galement tre utile dans le cadre d'animations.
Fonction et description
Exemple Illustration
refreshdata({handle})
Cette fonction value les proprits 'XDataSource' , 'YDataSource' et 'ZDataSource' de la figure
courante ou de l'objet spcifi par handle, et met jour la figure si les donnes correspondantes ont chang
59
MATLAB et Octave - 6. Graphiques, images, animations
60
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
7.1 Gnralits
Les "M-files" sont des fichiers au format texte (donc "lisibles") contenant des instructions MATLAB/Octave et portant
l'extension *.m. On a vu la commande diary (au chapitre "Workspace") permettant d'enregistrer un "journal de
session" qui, mis part l'output des commandes, pourrait tre considr comme un M-file. Mais la manire la plus efficace
de crer des M-files (c'est--dire "programmer" en langage MATLAB/Octave) consiste bien entendu utiliser un diteur de
texte ou de programmation.
On distingue fondamentalement deux types de M-files : les scripts (ou programmes) et les fonctions. Les scripts
travaillent dans le workspace, et toutes les variables cres/modifies lors de l'excution d'un script sont donc visibles dans
le workspace et accessibles ensuite interactivement ou par d'autres scripts. Les fonctions, quant elles, n'interagissent
avec le workspace ou avec le script appelant essentiellement au moyen des "paramtres" d'entre/sortie, les autres
variables manipules restant internes (locales) aux fonctions.
MATLAB/Octave est un langage interprt (comme les langages Perl, Python, Ruby, PHP, les shell Unix...), c'est--dire
que les M-files (scripts ou fonctions) sont directement excutables, donc n'ont pas besoin d'tre pralablement compils
avant d'tre utiliss (comme c'est le cas des langage classiques C/C++, Java, Fortran...). A l'excution, des fonctionnalits
interactives de debugging et de profiling permettent d'identifier les bugs et optimiser le code.
MATLAB et Octave tant de vritables progiciels, le langage MATLAB/Octave est de "haut niveau" et offre toutes les
facilits classiques permettant de dvelopper rapidement des applications interactives volues. Nous dcrivons dans les
chapitres qui suivent les principales possibilits de ce langage dans les domaines suivants :
interaction avec l'utilisateur (affichage dans la console, saisie au clavier, affichage de warnings/erreurs...)
structures de contrle (boucles, tests...)
laboration de scripts et fonctions
commandes d'entres-sorties (gestion de fichiers, formatage...)
dveloppement d'interfaces utilisateur graphiques (GUI)
7.2 diteurs
Les M-files tant des fichiers-texte, il est possible de les crer et les diter avec n'importe quel diteur de
texte/programmation de votre choix. Idalement, celui-ci devrait notamment offrir des fonctionnalits d'indentation
automatique, de coloration syntaxique...
Sous MATLAB et sous Octave GUI, c'est l'diteur intgr ces IDE's qui est bien entendu utilis. Si vous utilisez
Octave-CLI (Octave en ligne de commande dans une fentre terminal), ce sera l'diteur dfini par la fonction
EDITOR (voir plus bas).
Depuis les interfaces graphiques MATLAB et Octave GUI, on peut bien entendu aussi faire :
ouvrir un fichier existant : File > Open , bouton Open File , ou double-clic sur l'icne d'un M-file dans l'explorateur
de fichiers intgr ( "Current folder" ou "File Browser")
crer un nouveau fichier : New > Script | Function , File > New > New Script | New Function ou bouton New Script
1
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Pour indenter droite / dsindenter gauche un ensemble de ligne, slectionnez-les et faites tab / maj-tab (ou
Indent > Increase | Decrease )
Pour commenter/dcommenter un ensemble de lignes de code (c'est--dire ajouter/enlever devant celles-ci le
caractre % ), slectionnez-les et faites ctrl-R / ctrl-T (ou Comment > Comment | Uncomment )
Concernant l'usage des boutons et raccourcis de debugging, voir le chapitre "Debugging"
2
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Sous les 3 systmes d'exploitation, l'diteur utilise l'encodage UTF-8. Cela ne pose pas de problme sous GNU/Linux
et macOS o l'on peut donc utiliser des caractres spciaux (accentus...).
Sous Windows cependant, c'est la console Command Window qui ne supporte pas les caractres spciaux. Donc
limitez-vous actuellement sur ce systme aux caractres ASCII 7bit (non accentus...).
Pour indenter droite / dsindenter gauche un ensemble de ligne, slectionnez-les et faites tab / maj-tab (ou
Edit > Format > Indent | Unindent )
Pour commenter/dcommenter un ensemble de lignes de code (c'est--dire ajouter/enlever devant celles-ci le
caractre % ), slectionnez-les et faites ctrl-R / ctrl-maj-R (ou Edit > Format > Comment | Uncomment )
Il est possible de placer des bookmarks dans la marge gauche avec F7 (ou Edit > Navigation > Toggle Bookmark ),
puis de se dplacer de bookmarks en bookmarks avec F2 (ou Edit > Navigation > Next Bookmark ) et maj-F2 (ou
Edit > Navigation > Previous Bookmark )
Concernant l'autocompltion : sous Edit > Preferences onglet "Editor", vous voyez que l'autocompltion est par
dfaut active pour les fonctions, builtins et keywords. Vous pouvez encore activer "Match words in document" pour
l'autocompltion des noms de variables ! Si l'autocompltion vous drange, vous pouvez dsactiver l'option "Show
completion list automatically" et en faire usage la demande avec ctrl-espace (ou Edit > Commands > Show
Completion List ). La slection dans la liste s'effectue avec curseur-haut ou bas , puis la compltion avec enter ou
tab
Lorsque le curseur se trouve juste gauche ou droite d'un crochet/parenthse/accolade ouvrant ou fermant,
vous pouvez vous dplacer vers le caractre correspondant (fermant ou ouvrant) avec ctrl-M (ou Edit > Navigation >
Move to Matching Brace ), ou slectionner tout ce qui se trouve entre deux avec ctrl-maj-M (ou Edit > Navigation >
Select to Matching Brace ).
Concernant les blocs d'instructions correspondant aux structures de contrle, vous pouvez cliquer sur les symboles
- et + dans la marge gauche pour replier/dplier ces blocs.
Concernant l'usage des boutons et raccourcis de debugging, voir le chapitre "Debugging"
La personnalisation de l'diteur s'effectue avec Edit > Preferences dans les onglets "Editor" et "Editor Styles"
sous Windows : les distributions GNU Octave MinGW et MXE intgrent l'diteur Notepad++ (auparavant c'tait
Scintilla SciTE), mais d'autres bons diteurs de programmation font aussi l'affaire, tels que : Atom, ConTEXT,
cPad...
sous Linux : on peut utiliser les diteurs de base Gedit sous GNOME et Kate sous KDE, ainsi que Geany, Atom...
sous macOS : nous vous recommandons Atom (libre), sinon TextWrangler (freeware)...
On spcifie quel diteur doit tre invoqu lorsque l'on travaille avec Octave-CLI (i.e. lorsque l'on passe la commande
edit ) avec la fonction built-in EDITOR('path/editeur') que l'on intgre gnralement dans son prologue
.octaverc
Ex : Le morceau de script multi-plateforme ci-dessous teste sur quelle plateforme on se trouve et redfinit
ici "Gedit" comme diteur par dfaut dans le cas o l'on est sous Linux :
if ~isempty(findstr(computer,'linux'))
EDITOR('gedit') % dfinition de l'diteur par dfaut
edit('mode','async') % passer la commande "edit" de faon dtache
else
% on n'est pas sous Linux, ne rien faire de particulier
end
3
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
pour ce faire, sous Linux/Ubuntu, installez le paquet "gedit-plugins" (en passant la commande : sudo apt-get
install gedit-plugins )
vous activerez ci-dessous les plugins utiles, depuis Gedit, via Edit > Preferences , puis dans l'onglet " Plugins "
certains de ces plugins peuvent ensuite tre configurs via le bouton Configure Plugin
sous Gedit, via View > Highlight Mode > Scientific > Octave (ou via le menu droulant de langage dans la barre de
statut de Gedit)
activation de la mise en vidence des parenthses, crochets et acollades : via Edit > Preferences , puis dans l'onglet
"View" avtiver "Highlight matching brackets"
Affichage des numros de lignes : via Edit > Preferences , puis dans l'onglet "View" activer "Display line numbers"
Fermeture automatique des parenthses, crochets, acollades, apostrophes ... : en activant simplement le plugin
"Bracket Completion"
Affichage des caractres spciaux tab , espace ... : en activant (et configurant) le plugin "Draw Spaces"
4
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
if espace
tab
else
tab
end
dfinissez avec Tools > Manage Snippets , dans la catgorie "Octave", avec le bouton + (Create new snippet), un
snippet nomm if avec les attributs :
tab trigger : if
dans le champ Edit : le code insrer figurant ci-dessus
shortcut key (facultatif) : associez-y un raccourci clavier
Et ralisez ainsi d'autres snippets, par exemples pour les structures : for...end , while...end ,
do...until , switch...case ...
5
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Ex : les commandes M=[1 2;3 5] ; disp('La matrice M vaut :') , disp(M) produisent l'affichage
du texte "La matrice M vaut :" sur une ligne, puis celui des valeurs de la matrice M sur les lignes suivantes
struct = warning
Passe sans paramtre, cette fonction indique de quelle faon sont traits les diffrents types de messages
d'avertissements (warnings). Les diffrents tats possibles sont :
on = affichage du message d'avertissement, puis continuation de l'excution
off = pas d'affichage de message d'avertissement et continuation de l'excution
error = condition traite comme une erreur, donc affichage du message d'avertissement puis interruption !
warning('on|off|error', 'id' )
Changement de la faon de traiter les avertissements du type id spcifi. Voir ci-dessus la signification des
conditions on , off et error . On arrive ainsi dsactiver (off) certains types d'avertissements, les ractiver
(on), ou mme les faire traiter comme des erreurs (error) !
6
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
warning('query', 'id' )
Rcupre le statut courant de traitement des warnings de type id
{string=} lastwarn
Affiche (ou rcupre sur la variable string) le dernier message d'avertissement (warning)
Ex :
X=123; S='abc'; warning('Demo:test','X= %u et chaine S= %s', X, S)
affiche l'avertissement : 'warning: X= 123 et chane S= abc'
puis si l'on fait warning('off','Demo:test')
et que l'on excute nouveau le warning ci-dessus, il n'affiche plus rien
puis si l'on fait warning('error','Demo:test')
et que l'on excute nouveau le warning ci-dessus, cela affiche cette fois-ci une erreur : 'error: X vaut: 123 et
la chane S: abc'
error('message')
error('format', variable(s)...)
Affiche le message indiqu sous la forme "error: message", puis interrompt l'excution du script ou de la fonction
dans le(la)quel(le) cette instruction a t place, ainsi que l'excution du script ou de la fonction appelante. Comme
pour warning , le message peut tre spcifi sous la forme d'un format , ce qui permet alors d'incorporer
une(des) variable(s) dans le message.
Sous Octave, si l'on veut viter qu' la suite du message d'erreur soit affich un "traceback" de tous les appels
de fonction ayant conduit cette erreur, il suffit de terminer la chane message par le caractre "newline", c'est-
-dire dfinir error("message... \n") . Mais comme on le voit, la chane doit alors tre dfinie entre
guillemets et non pas entre apostrophes, ce qui pose problme MATLAB. Une faon de contourner ce problme
pour faire du code portable pour Octave et MATLAB est de dfinir error(sprintf('message... \n'))
Remarque gnrale : Lorsque l'on programme une fonction, si l'on doit prvoir des cas d'interruption pour cause
d'erreur, il est important d'utiliser error(...) et non pas disp('message'); return , afin que les scripts
utilisant cette fonction puissent tester les situations d'erreur (notamment avec la structure de contrle
try...catch...end ).
{string=} lasterr
Affiche (ou rcupre sur la variable string) le dernier message d'erreur
beep
met un beep sonore
a) En l'absence du paramtre 's' , l'information entre par l'utilisateur est "interprte" (value) par
MATLAB/Octave, et c'est la valeur rsultante qui est affecte la variable spcifie. L'utilisateur peut donc, dans ce
cas, saisir une donne de n'importe quel type et dimension (nombre, vecteur, matrice...) voire toute expression
valide !
On peut, aprs cela, ventuellement dtecter si l'utilisateur n'a rien introduit (au cas o il aurait uniquement frapp
enter ) avec : isempty(variable) , ou length(variable)==0
b) Si l'on spcifie le second paramtre 's' (signifiant string), le texte entr par l'utilisateur est affect tel quel
(sans valuation) la variable chane indique. C'est donc cette forme-l que l'on utilise pour saisir interactivement
du texte.
Dans les 2 cas, on place gnralement, la fin de cette commande, un ; pour que MATLAB/Octave "travaille
silencieusement", c'est--dire ne quittance pas l'cran la valeur qu'il a affecte la variable.
Ex :
la commande v1=input('Entrer v1 (scalaire, vecteur, matrice, expression, etc...) : ')
; affiche "Entrer v1 (scalaire, vecteur, matrice, expression, etc...) : " puis permet de saisir interactivement la
7
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
a) pause
b) pause(secondes) ou sleep(secondes)
a) Lorsque le script rencontre cette instruction sans paramtre, il effectue une pause, c'est--dire attend que
l'utilisateur frappe n'importe quelle touche au clavier pour continuer son excution.
b) Si une dure secondes est spcifie, le script reprend automatiquement son excution aprs cette dure.
Sous MATLAB, on peut passer la commande pause off pour dsactiver les ventuelles pauses qui seraient
effectues par un script (puis pause on pour rtablir le mcanisme des pauses).
7.4.1 Debugging
Lorsqu'il s'agit de dbuguer un script ou une fonction qui pose problme, la premire ide qui vient l'esprit est de
parsemer le code d'instructions d'affichages intermdiaires. Plutt que de faire des disp , on peut alors
avantageusement utiliser la fonction warning prsente plus haut, celle-ci permettant en une seule instruction d'afficher
du texte et des variables ainsi que de dsactiver/ractiver aisment l'affichage de ces warnings. Mais il existe des
fonctionnalits de debugging spcifiques prsentes ci-aprs.
keyboard
keyboard('prompt ')
Place l'intrieur d'un M-file, cette commande invoque le mode de debugging "keyboard" de MATLAB/Octave :
l'excution du script est suspendue, et un prompt spcifique s'affiche ( K>> , respectivement debug> ou le
prompt spcifi). L'utilisateur peut alors travailler normalement en mode interactif dans MATLAB/Octave (visualiser
ou changer des variables, passer des commandes...). Puis il a le choix de :
continuer l'excution du script en frappant en toutes lettres la commande return
ou avorter la suite du script en frappant la commande dbquit sous MATLAB ou Octave
Ce mode "keyboard" permet ainsi d'analyser manuellement certaines variables en cours de droulement d'un script.
Les boutons dcrits ci-dessous se cachent dans l'onglet EDITOR du bandeau MATLAB, et dans palette d'outils de l'diteur
intgr de Octave GUI.
clic dans la marge gauche de l'diteur, F12 , Breakpoint > Set/Clear , Toggle Breakpoint : place/supprime un
breakpoint sur la ligne courante, symbolis par un disque rouge (identique dbstop / dbclear )
8
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Next Breakpoint et Previous Breakpoint : dplace le curseur d'dition au beakpoint suivant/prcdent du fichier
Breakpoints > Clear all , Remove All Breakpoints : supprime tous les breakpoints qui ont t dfinis
Save (File) and Run ou F5 : dbute l'excution du script et suspend l'excution au premier breakpoint rencontr, la
console affichant alors le prompt K>> ou debug>
dans la marge gauche une flche (verte sous MATLAB, jaune sous Octave) pointe sur la prochaine instruction
qui sera excute
Step ou F10 : excute la ligne courante et se suspend au dbut de la ligne suivante (identique dbstep ) ; si la
ligne courante est un appel de fonction, excute le reste du code de la fonction d'une traite
Step In ou F11 : si la ligne courante est un appel de fonction, excute aussi les instructions de celle-ci en mode
step-by-step (identique dbstep in )
Step Out ou maj-F11 : lorsque l'on est en mode step-by-step dans une fonction, poursuit l'excution de celle-ci
jusqu' la sortie de la fonction (identique dbstep out )
Continue ou F5 : poursuit l'excution jusqu'au breakpoint suivant (identique return )
Quit Debugging , Exit Debug Mode ou maj-F5 : interrompt dfinitivement l'excution (identique dbquit )
Fonctions de debugging
Les fonctions ci-dessous sont implicitement appeles lorsque l'on fait du debugging en mode graphique (chapitre
prcdent), mais vous pouvez aussi les utiliser depuis la console MATLAB/Octave.
dbstop in script|fonction at no
dbstop('script|fonction', no {, no, no...} ) ou dbstop('script|fonction',
vecteur_de_nos)
Dfini (ajoute), lors de l'excution ultrieure du script ou de la fonction indique, des breakpoints au dbut des
lignes de no spcifi
L'avantage, par rapport l'instruction keyboard dcrite prcdemment, est qu'ici on ne "pollue" pas notre code,
les breakpoints tant dfinis interactivement avant l'excution
l'excution s'arrte automatiquement au premier beakpoint spcifi, et la console affiche le prompt K>> ou
debug>
dbstep {n} : excution de la (des n) ligne(s) suivante(s) du script/fonction
dbstep in : si la ligne courante est un appel de fonction, passe l'excution de celle-ci en mode step-by-step
dbstep out : si l'on est en mode step-by-step dans une fonction, poursuit l'excution de celle-ci jusqu' la sortie
de la fonction
return (commande passe en toutes lettres) : continuation de l'excution jusqu'au breakpoint suivant
dbcont : achve l'excution en ignorant les breakpoints qui suivent
enter : la commande de debugging prcdemment passe est rpte ; sous MATLAB, faire curseur-haut enter
dbwhere : affichage du numro (et contenu) de la ligne courante du script/fonction
dbquit : avorte l'excution du script/fonction
S'agissant d'excution de scripts/fonctions imbriqus, on peut encore utiliser les commandes de debugging dbup ,
dbdown , dbstack ...
7.4.2 Optimisation
9
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Il existe de nombreuses techniques pour optimiser un code MATLAB/Octave en terme d'utilisation des ressources
processeur et mmoire. Nous donnons ci-aprs quelques conseils de base. Notez cependant qu'il faut parfois faire la
balance entre en optimisation et lisibilit du code.
Redimensionner dynamiquement un tableau dans une boucle peut tre trs coteux en temps CPU. Il est plus
efficace de pr-allouer l'espace du tableau avant d'entrer dans la boucle, quitte librer ensuite l'espace non utilis.
Considrons par exemple la boucle ci-dessous :
t0=cputime; for k=1:10000000, mat(k)=k; end; fprintf('%6.2f secondes\n', cputime-t0)
Le fait de pr-allouer l'espace de mat , en excutant par exemple mat=zeros(1,10000000); ou
mat(10000000)=1; avant ce code, acclrera celui-ci d'un facteur 40x sous MATLAB 8.3 et 5x sous Octave 3.8
S'agissant de matrices particulires (symtriques, diagonales...), il existe des fonctions MATLAB/Octave spcifiques qui
sont plus efficaces que les fonctions standards. Pensez aussi au stockage sparse de matrices creuses (voir ci-aprs).
Si vous manipulez des matrices comportant beaucoup d'lments nuls (vous pouvez visualiser cela avec
spy(matrice) ), pensez les stocker sous forme sparse (conversion avec sparse(matrice) , et conversion
inverse avec full(sparse) ). Elles occuperont moins d'espace mmoire, et les oprations de calcul s'en trouveront
acclres (rduction du nombre d'oprations, celles portant sur les zros n'tant pas effectues).
7.4.3 Profiling
Sous le terme de "profiling" on entend l'analyse des performances d'un programme (script, fonctions) afin d'identifier
les parties de code qui pourraient tre optimises dans le but d'amliorer les performances globales du programme. Les
outils de profiling permettent ainsi de comptabiliser de faon fine (au niveau script, fonctions et mme instructions) le
temps consomm lors de l'excution du programme, puis de prsenter les rsultats de cette analyse sous forme de
tableaux et d'explorer ces donnes.
Pour dterminer le temps CPU utilis dans certaines parties de vos scripts ou fonctions, une alternative aux outils de
profiling ci-dessous serait d'ajouter manuellement dans votre code des fonctions de "timing" (chronomtrage du temps
consomm) dcrites au chapitre "Dates et temps", sous-chapitre "Fonctions de timing et de pause".
profile on ou profile('on')
profile resume ou profile('resume')
Dmarre le profiling, c'est--dire la comptabilisation du temps consomm :
avec on : efface les donnes de profiling prcdemment collectes
avec resume : reprend le profiling qui a t prcdemment suspendu avec profile off , sans effacer
donnes collectes
stats_struct = profile('status')
Retourne la structure stats_struct dans laquelle le champ ProfilerStatus indique si le profiling est
couramment activ ( on ) ou stopp ( off )
prof_struct = profile('info')
10
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
profile clear
Efface toutes les donnes de profiling collectes
profshow(prof_struct {, N })
Affiche sous forme de tableau, dans l'ordre descendant du temps consomm, les donnes de profiling prof_struct.
On peut spcifier le nombre N de fonctions/instructions affiches. Si N n'est pas spcifi, ce sera par dfaut 20.
profexplore(prof_struct)
Explore interactivement, dans la fentre de commande Octave, les donnes hirarchiques de profiling prof_struct
help : aide en-ligne sur les commandes disponibles
opt : descend d'un niveau dans l'option opt spcifie
up {nb_niv} : remonte d'un niveau, ou de nb_niv niveaux ; si l'on est au premier niveau, retourne au prompt
Octave
exit : interrompt cette exploration interactive
11
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Vous constatez que, pour les besoins de l'exemple, ces codes comportent du code vectoris (usage de fonctions
vectorises, indexation logique...) et du code non vectoris (usage de boucles for/end). Nous avons dlimit ces deux
catgories de codes par des structures if/else/end s'appuyant sur une variable globale nomme CODE_VECTORISE .
Ralisons maintenant le profiling de ce code. En premier lieu, il faut rendre globale au niveau workspace et du script la
variable CODE_VECTORISE (ceci est dj fait dans les fonctions), avec l'instruction :
global CODE_VECTORISE % il est important de faire cette dclaration avant d'affecter une valeur cette variable
!
Les dures d'excution indiques ci-dessous se rapportent une machine Intel Pentium Core 2 Duo E6850 @ 3 GHz avec
MATLAB R2012 et GNU Octave 3.6.2 MinGW.
7. Sous MATLAB :
profile viewer % ouverture de l'explorateur de profiling
Constatations :
- le script s'est excut en 9 sec sous Linux/Ubuntu, et tonnamment en 1 sec sous Windows !
- le profiler de cette version MATLAB sous Linux/Ubuntu donne des timing errons, et l'exploitation des
hyper-liens est impossible (retourne des erreurs) !
8. Sous Octave :
prof_struct=profile('info'); % rcupration des donnes de profiling
profshow(prof_struct) % affichage tabulaire des 20 plus importants donnes (en temps) de profiling
profexplore(prof_struct) % exploration interactive des donnes de profiling ; "descendre" ensuite avec
1 dans "demo_profiling", puis dans les fonctions "matrice_alea" et "extrait_matrice" ...
Constatations :
- le script s'est excut en 14 sec sous Linux, et en 23 sec sous Windows
- sous Windows p.ex. 12 sec sont consommes par la fonction "matrice_alea" (dont 4.5 sec par la fonction
"rand"), 9 sec par la fonction "extrait_matrice"
- on constate notamment que la fonction "rand" est appele 500'000x
- on voit donc ce qu'il y a lieu d'optimiser...
Essayez de relancer ce script sans profiling. Vous constaterez qu'il s'excute un peu plus rapidement, ce qui montre que le
profiling lui-mme consomme du temps CPU, et donc qu'il ne faut l'activer que si l'objectif est bien de collecter des
donnes de performance !
Poursuivons maintenant avec l'examen du code vectoris (remplacement des boucles par des fonctions vectorises et
l'indexation logique) :
5. Sous MATLAB :
profile viewer % ouverture de l'explorateur de profiling
Constatations :
- le script s'est excut en 0.1 sec sous Linux/Ubuntu et sous Windows !
- on a donc gagn d'un facteur de plus de 100x par rapport la version non vectorise !
12
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
6. Sous Octave :
prof_struct=profile('info'); % rcupration des donnes de profiling
profshow(prof_struct) % affichage tabulaire des 20 plus importants donnes (en temps) de profiling
profexplore(prof_struct) % exploration interactive des donnes de profiling...
Constatations :
- le script s'est excut en 0.1 sec sous Windows, et 0.05 sec sous Linux/Ubuntu !
- on a donc gagn d'un facteur de plus de 200x par rapport la version non vectorise !
13
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Comme MATLAB/Octave permet de travailler en "format libre" (les caractres espace et tab ne sont pas significatifs), on
recommande aux programmeurs MATLAB/Octave de bien "indenter" leur code, lorsqu'ils utilisent des structures de
contrle, afin de faciliter la lisibilit et la maintenance du programme.
Octave propose aussi des variations aux syntaxes prsentes plus bas, notamment : endfor , endwhile ,
endif , endswitch , end_try_catch , ainsi que d'autres structures telles que:
unwind_protect body... unwind_protect_cleanup cleanup... end_unwind_protect
Nous vous recommandons de vous en passer pour que votre code reste portable !
Structure Description
Boucle for...end Considrons d'abord le cas gnral o tableau est une matrice 2D (de
nombres, de caractres, ou cellulaire... peu importe). Dans ce cas,
for var = tableau l'instruction for parcourt les diffrentes colonnes de la matrice (c'est-
instructions... -dire matrice(:,i) ) qu'il affecte la variable var qui sera ici un vecteur
end
colonne. chaque "itration" de la boucle, la colonne suivante de matrice
est donc affecte var, et le bloc d'instructions est excut.
Ex :
Boucle while...end Si tous les lments de l'objet rsultant de l'expression_logique (qui n'est
("tant que" la condition n'est pas fausse) donc pas ncessairement scalaire mais peut tre un tableau de dimension
quelconque) sont Vrais (c'est--dire diffrents de "0"), l'ensemble
while expression_logique d'instructions spcifies est excut, puis l'on reboucle sur le test. Si un ou
instructions... plusieurs lments sont Faux (c'est--dire gaux "0"), on saute aux
end instructions situes aprs le end .
On modifie en gnral, dans la boucle, des variables constituant
l'expression_logique, sinon la boucle s'excutera sans fin (et on ne peut
dans ce cas en sortir qu'avec un ctrl-C !)
Ex :
14
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Test if...{{elseif...}else...}end Si tous les lments rsultant de l'expression_logique_1 (qui n'est donc pas
("si, sinon si, sinon") ncessairement un scalaire mais peut tre un tableau) sont Vrais (c'est-
-dire diffrents de "0"), le bloc instructions_1 est excut, puis on saute
if expression_logique_1 directement au end .
instructions_1... Sinon (si un ou plusieurs lments de expression_logique_1 sont Faux, c'est-
{ elseif expression_logique_i -dire gaux "0"), MATLAB/Octave examine les ventuelles clauses
instructions_i... } elseif (de d'autres expression_logique_i, avec excution le cas chant
{ else
du bloc instructions_i correspondant, puis saute end ).
autres_instructions... }
Si aucune expression teste n'a t satisfaite, on saute l'ventuelle
end
instruction else pour excuter le bloc autres_instructions.
Noter que les blocs elseif ainsi que le bloc else sont donc facultatifs.
Ex :
Construction switch...case... Cette construction ralise ce qui suit : si la variable spcifie est gale la
{otherwise...}end valeur val1, seul le bloc de instructions_a spcifi est excut ; si elle est
gale la valeur val2 ou val3, seul le bloc de instructions_b spcifi est
switch variable excut. Et ainsi de suite... Si elle n'est gale rien de tout a, c'est le bloc
case val1 des autres_instructions spcifies qui est excut.
instructions_a... Important : notez bien que si, dans une clause case , vous dfinissez
case {val2, val3 ...} plusieurs valeurs val possibles, il faut que celles-ci soient dfinies sous la
instructions_b...
forme de tableau cellulaire, c'est--dire entre caractres { } .
otherwise
Contrairement au "switch" du langage C, il n'est pas ncessaire de dfinir
autres_instructions...
des break la fin de chaque bloc
end
On peut avoir autant de blocs case que l'on veut, et la partie
otherwise est facultative.
En lieu et place de variable et de val1, val2... on peut bien entendu aussi
mettre des expressions.
Ex :
Tester d'une rponse rep contenant : Non, non, No, no, N, n, Oui,
oui, O, o, Yes, yes, Y, y :
switch lower(rep(1))
case 'n'
disp('non')
case { 'o' 'y' }
disp('oui')
otherwise
disp('reponse incorrecte')
end
try Les instructions comprises entre try et catch (bloc instructions_1) sont
instructions_1... excutes jusqu' ce qu'une erreur se produise, auquel cas MATLAB/Octave
catch passe automatiquement l'excution des instructions comprises entre
15
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Sortie anticipe d'une boucle A l'intrieur d'une boucle for , while ou do , cette instruction
permet, par exemple suite un test, de sortir prmaturment de la boucle
break
et de poursuivre l'excution des instructions situes aprs la boucle. Si 2
boucles sont imbriques l'une dans l'autre, un break plac dans la boucle
interne sort de celle-ci et continue l'excution dans la boucle externe.
A ne pas confondre avec return (voir plus bas) qui sort d'une fonction,
respectivement interrompt un script !
for k=1:100
k2=k^2;
fprintf('carr de %3d = %5d \n',k,k2)
if k2 > 200 break , end % sortir boucle lorsque k^2 > 200
end
fprintf('\nsorti de la boucle k = %d\n',k)
k=1;
while true % priori boucle sans fin !
fprintf('carr de %3d = %5d \n', k, k^2)
if k >= 10 break , else k=k+1; end
% ici on sort lorsque k > 10
end
Sauter le reste des instructions d'une A l'intrieur d'une boucle ( for ou while ), cette instruction permet donc,
boucle et continuer d'itrer par exemple suite un test, de sauter le reste des instructions de la boucle
et passer l'itration suivante de la mme boucle.
continue
Ex :
for k=start:1:stop
if rem(k,fact) ~= 0
continue
end
fprintf('%u, ', k)
end
disp('fin')
Le code ci-dessus affiche: "Nb entre 1 et 100 divisibles par 8 : 8, 16, 24, 32,
40, 48, 56, 64, 72, 80, 88, 96, fin"
double(var) Cette instruction permet de convertir en double prcision la variable var qui,
dans certaines constructions for , while , if , peut n'tre qu'en simple
prcision
Les structures de contrle sont donc des lments de langage extrmement utiles. Mais dans MATLAB/Octave, il faut
"penser instructions matricielles" (on dit aussi parfois "vectoriser" son algorithme) avant d'utiliser toutes les sauces ces
structures de contrle qui, du fait que MATLAB est un langage interprt, sont beaucoup moins rapides que les oprateurs
et fonctions matriciels de base !
16
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
return
Termine l'excution de la fonction ou du script. Un script ou une fonction peut renfermer plusieurs return
(sorties contrles par des structures de contrle...). Une autre faon de sortir proprement en cas d'erreur est
d'utiliser la fonction error (voir plus haut).
On ne sortira jamais avec exit ou quit qui non seulement terminerait le script ou la fonction mais fermerait
aussi la session MATLAB/Octave !
var= nargin
A l'intrieur d'une fonction, retourne le nombre d'arguments d'entre passs lors de l'appel cette fonction. Permet
par exemple de donner des valeurs par dfaut aux paramtres d'entre manquant.
Utile sous Octave pour tester si le nombre de paramtres passs par l'utilisateur la fonction est bien celui attendu
par la fonction (ce test n'tant pas ncessaire sous MATLAB ou le non respect de cette condition est
automatiquement dtect).
Voir aussi la fonction nargchk qui permet aussi l'implmentation simple d'un message d'erreur.
Ex : voir ci-aprs
varargin
A l'intrieur d'une fonction, tableau cellulaire permettant de rcuprer un nombre d'arguments quelconque pass
la fonction
function []=test_vararg(varargin)
fprintf('Nombre d''arguments passes a la fonction : %d \n',nargin)
for no_argin=1:nargin
fprintf('- argument %d:\n', no_argin)
disp( varargin{no_argin} )
end
string= inputname(k)
A l'intrieur d'une fonction, retourne le nom de variable du k-me argument pass la fonction
var= nargout
A l'intrieur d'une fonction, retourne le nombre de variables de sortie auxquelles la fonction est affecte lors de
l'appel. Permet par exemple d'viter de calculer les paramtres de sortie manquants....
Voir aussi la fonction nargoutchk qui permet aussi l'implmentation simple d'un message d'erreur.
string= mfilename
A l'intrieur d'une fonction ou d'un script, retourne le nom du M-file de cette fonction ou script, sans son extension
.m
Ex d'instruction dans une fonction : warning(['La fonction ' mfilename ' attend au moins un
argument'])
17
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
global variable(s)
Dfinit la(les) variable(s) spcifie(s) comme globale(s). Cela peut tre utile lorsque l'on veut partager des
donnes entre le workspace et certaines fonctions sans devoir passer ces donnes en paramtre lors de l'appel
ces fonctions. Il est alors ncessaire de dclarer ces variables globales, avant de les utiliser, la fois dans le
workspace et l'intrieur des fonctions.
Une bonne habitude serait d'identifier clairement les variables globales de fonctions, par exemple en leur donnant
un nom en caractres majuscules.
Ex : la fonction fct1.m ci-dessous mmorise (et affiche) le nombre de fois qu'elle a t appele :
function []=fct1()
global COMPTEUR
COMPTEUR=COMPTEUR+1;
fprintf('fonction appelee %04u fois \n',COMPTEUR)
return
Pour tester cela, il faut passer les instructions suivantes dans la fentre de commande MATLAB/Octave :
persistent variable(s)
Utilisable dans les fonctions seulement, cette dclaration dfinit la(les) variable(s) spcifie(s) comme statique(s),
c'est--dire conservant de faon interne leurs dernires valeurs entre chaque appel la fonction. Ces variables ne
sont cependant pas visibles en-dehors de la fonction (par opposition aux variables globales).
Ex : la fonction fct2.m ci-dessous mmorise (et affiche) le nombre de fois qu'elle a t appele. Contrairement
l'exemple de la fonction fct1.m ci-dessus, la variable compteur n'a pas tre dclare dans la session
principale (ou dans le script depuis lequel on appelle cette fonction), et le compteur doit ici tre initialis dans la
fonction.
function []=fct2()
persistent compteur
% au premier appel, aprs cette dclaration persistent compteur existe et vaut []
if isempty(compteur)
compteur=0 ;
end
compteur=compteur+1 ;
fprintf('fonction appelee %04u fois \n',compteur)
return
Pour tester cela, il suffit de passer les instructions suivantes dans la fentre de commande MATLAB/Octave :
eval('expression1', {'expression2'})
value et excute l'expression1 MATLAB/Octave spcifie. En cas d'chec, value l'expression2.
Ex : le petit script suivant permet de grapher n'importe quelle fonction y=f(x) dfinie interactivement par
l'utilisateur :
class(objet)
Retourne la "classe" de objet (double, struct, cell, char).
typeinfo(objet)
Sous Octave seulement, retourne le "type" de objet (scalar, range, matrix, struct, cell, list, bool, sq_string, char
matrix, file...).
18
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Par opposition aux "fonctions" (voir chapitre suivant), les scripts sont invoqus par l'utilisateur sans passer d'arguments,
car ils oprent directement dans le workspace principal. Un script peut donc lire et modifier des variables
pralablement dfinies (que ce soit interactivement ou via un autre script), ainsi que crer de nouvelles variables qui seront
accessibles dans le workspace (et d'autres scripts) une fois le script excut.
Il est important de noter qu'il n'est pas possible de dfinir de fonctions l'intrieur d'un script (mme si l'on ne
souhaite utiliser celles-ci que par le script).
Il est possible (et vivement conseill) de documenter le fonctionnement du script vis--vis du systme d'aide en ligne
help de MATLAB/Octave. Il suffit, pour cela, de dfinir, au tout dbut du script, des lignes de commentaire (lignes
dbutant par le caractre % ). La commande help M-file affichera alors automatiquement le 1er bloc de lignes de
commentaire contigus du M-file. On veillera ce que la toute premire ligne de commentaire (appele "H1-line") indique
le nom du script (en majuscules) et prcise brivement ce que fait le script, tant donn que c'est cette ligne qui est
affiche lorsque l'on fait une recherche de type lookfor mot-cl .
Pour excuter un script, on peut utiliser l'une des mthodes suivantes, selon que l'on soit dans l'diteur intgr, dans
la console MATALAB/Octave ou depuis un autre script :
En phase de debugging, on peut activer l'affichage des commandes excutes par le script en passant la commande
echo on avant de lancer le script, puis dsactiver ce "traage" avec echo off une fois le script termin.
Exemple de script: Le petit programme ci-dessous ralise la somme et le produit de 2 nombres, vecteurs ou matrices (de
mme dimension) demands interactivement. Notez bien la 1re ligne de commentaire (H1-line) et les 2 lignes qui suivent
fournissant le texte pour l'aide en-ligne. On excute ce programme en frappant somprod (puis rpondre aux questions
interactives...), ou l'on obtient de l'aide sur ce script en frappant help somprod .
if ~ isequal(size(V1),size(V2))
error('les 2 arguments n''ont pas la meme dimension')
end
%{
1re faon d'afficher les rsultats (la plus propre au niveau affichage,
mais ne convenant que si V1 et V2 sont des scalaires) :
fprintf('Somme = %6.1f Produit = %6.1f \n', V1+V2, V1.*V2)
19
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Avec MATLAB :
En premier lieu, il est important que le script.m s'achve sur une instruction quit , sinon la fentre MATLAB
(minimise dans la barre de tches sous Windows) ne se refermera pas
Passer la commande (sous Windows depuis une fentre "invite de commande", sous Linux depuis une fentre shell) :
matlab -nodesktop -nosplash -nodisplay -r script { -logfile fichier_resultat }
o :
sous Windows, il faudra faire prcder la commande matlab du path (chemin d'accs l'excutable
MATLAB, p.ex. C:\Program Files (x86)\MATLAB85\bin\ sous Windows 7)
la place de -logfile fichier_resultat on peut aussi utiliser > fichier_resultat
le fichier de sortie fichier_resultat sera cr (en mode crasement s'il prexiste)
Sachez finalement qu'il est possible d'utiliser interactivement MATLAB en mode commande dans une fentre terminal
(shell) et sans interface graphique (intressant si vous utilisez MATLAB distance sur un serveur Linux) ; il faut pour
cela dmarrer MATLAB avec la commande : matlab -nodesktop -nosplash
Avec Octave :
Contrairement MATLAB, il n'est ici pas ncessaire que le script.m s'achve par une instruction quit
Vous avez ensuite les possibilits suivantes :
Depuis une fentre de commande (fentre "invite de commande" sous Windows, shell sous Linux), frapper :
octave --silent --no-window-system script.m { > fichier_resultat }
avec > fichier_resultat , les rsultats du script sont redirigs dans le fichier_resultat spcifi et non pas
affichs dans la fentre de commande
--silent (ou -q ) : n'affiche pas les messages de dmarrage de Octave
--no-window-system (ou -W ) : dsactive le systme de fentrage (i.e. X11 sous Linux) ; les graphiques
apparaissent alors dans la fentre de commande (simuls par des caractres), mais il reste possible d'utiliser la
commande saveas pour les sauvegarder sous forme de fichiers-image
en ajoutant encore l'option --norc (ou -f ) ou --no-init-file ), on dsactiverait l'excution des
prologues (utilisateurs .octaverc , et systme)
vous pourriez donc aussi faire dbuter votre script par la ligne #!/usr/bin/octave -qWf
data = randn(100,3)
fig = figure;
plotmatrix(data, 'g+');
saveas(fig, 'job_graph.png', 'png')
quit
A l'intrieur de votre script, vous pouvez rcuprer sur un vecteur cellulaire avec la fonction argv() les diffrents
20
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
En outre avec Octave, si vous ne dsirez excuter en "batch" que quelques commandes sans faire de script, vous
pouvez procder ainsi :
Depuis une fentre de commande ou un shell, frapper: octave -qf --eval "commandes..." { >
fichier_resultat.txt }
Ex : on test ici l'existence de la fonction built-in OCTAVE_VERSION (n'existant que sous Octave) :
if ~ exist('OCTAVE_VERSION') % MATLAB
% ici instruction(s) pour MATLAB
else % Octave
% ici instruction(s) quivalente(s) pour Octave
end
21
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
On invoque donc une fonction en l'appelant par son nom et en lui passant, entre parenthses, des paramtres
d'entre (valeurs, noms de variables, expressions) ;
certaines fonctions peuvent ne pas avoir d'argument, par exemple : beep()
La fonction retourne en gnral une(des) valeur(s) de sortie que l'on rcupre alors sur la(les) variable(s) laquelle
(auxquelles) la fonction est affecte lors de l'appel
Le mcanisme de passage des paramtres la fonction se fait "par valeur" (c'est--dire copie) et non pas "par
rfrence". La fonction ne peut donc pas modifier les variables d'entre au niveau du script appelant ou du workspace
principal.
Les variables cres l'intrieur de la fonction sont dites "locales" car elles sont, par dfaut, inaccessibles en dehors
de la fonction (que ce soit dans le workspace principal ou dans d'autres fonctions ou scripts). Chaque fonction travaille donc
dans son propre workspace local.
Si l'on tient cependant ce que certaines variables de la fonction soient visibles et accessibles l'extrieur de celle-ci,
on peut les rendre "globales" en les dfinissant comme telles dans la fonction, avant qu'elles ne soient utilises, par
une dclaration global variable(s) (voir plus haut). Il faudra aussi faire une telle dclaration dans le
workspace principal (et avant d'utiliser la fonction !) si l'on veut pouvoir accder ces variables dans le workspace
principal ou ultrieurement dans d'autres scripts !
Une autre possibilit consiste dclarer certaines variables comme "statiques" avec la dclaration persistent
(voir aussi plus haut) au cas o l'on dsire, chaque appel la fonction, retrouver les variables internes dans l'tat
o elles ont t laisses lors de l'appel prcdent. Cela ne devrait pas tre utilis pour les fonctions qui seront utilises
de faon rcursive !
Contrairement aux scripts dans lesquels on n'a pas le droit de dfinir de fonctions internes, il est possible, dans un
M-file de fonction, de dfinir plusieurs fonctions la suite les unes des autres. Cependant seule la premire fonction du
M-file, appele fonction principale (main function), sera accessible de l'extrieur. Les autres, appeles fonctions locales
(ou subfunctions), ne pourront tre appeles que par la fonction principale ou les autres fonctions locales du M-file.
Il est finalement possible de dfinir des fonctions l'intrieur du corps d'une fonction. Ces fonctions imbriques (nested
function) ne pourront cependant tre invoques que depuis la fonction dans laquelle elles sont dfinies.
Toute fonction dbute par une ligne de dclaration de fonction qui dfinit son nom_fonction et ses arguments
args_entree et args_sortie (spars par des virgules), selon la syntaxe :
Octave affiche un warning si le nom de la fonction principale (tel que dfini dans la 1re dclaration de fonction)
est diffrent du nom du M-file. Sous MATLAB, le fait que les 2 noms soient identiques n'est pas obligatoire mais fait partie
des rgles de bonne pratique.
Se succdent donc, dans le code d'une fonction (et dans cet ordre) :
L'instruction end peut tre omise, sauf lorsque l'on dfinit plusieurs fonctions dans un mme M-file. Les templates de
fonctions Octave se terminent par endfunction , mais nous vous suggrons d'liminer cette instruction afin que vos
fonctions soient compatibles la fois pour MATLAB et Octave.
22
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Exemple de fonction: On prsente, ci-dessous, deux faons de raliser une petite fonction retournant le produit et la
somme de 2 nombres, vecteurs ou matrices. Dans les deux cas, le M-file doit tre nomm fsomprod.m (c'est--dire
identique au nom de la fonction). On peut accder l'aide de la fonction avec help fsomprod , et on affiche la premire
ligne d'aide en effectuant par exemple une recherche lookfor produit . Dans ces 2 exemples, mis part les arrts en
cas d'erreurs (instructions error ), la sortie s'effectue la fin du code mais aurait pu intervenir ailleurs (instructions
return ) !
somme=a+b;
produit=a.*b; % produit lment par lment !
return % sortie de la fonction (instruction ici pas
% ncessaire vu qu'on a atteint fin fonction)
end % pas ncessaire si le fichier ne contient que cette fct
7.8.2 P-Code
Lorsque du code MATLAB est excut, il est automatiquement interprt et traduit ("parsing") dans un langage de
plus bas niveau qui s'appelle le P-Code (pseudo-code). Sous MATLAB seulement, s'agissant d'une fonction souvent
utilise, on peut viter que cette "passe de traduction" soit effectue lors de chaque appel en sauvegardant le P-Code
sur un fichier avec la commande pcode nom_fonction . Un fichier de nom nom_fonction.p est alors dpos
dans le rpertoire courant (ou dans le dossier o se trouve le M-file si l'on ajoute la commande pcode le paramtre
-inplace ), et chaque appel la fonction pourra tre directement excute sur la base du P-Code de ce fichier sans
traduction pralable, ce qui peut apporter des gains de performance.
Le mcanisme de conversion d'une fonction ou d'un script en P-Code offre galement la possibilit de distribuer ceux-ci
d'autres personnes sous forme binaire en conservant la matrise du code source.
23
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
le caractre s dbutant le nom de certaines fonctions signifie "string", c'est--dire que l'on manipule des chanes
le caractre f dbutant le nom de certaines fonctions signifie "file", c'est--dire que l'on manipule des fichiers
le caractre f terminant le nom de certaines fonctions signifie "format"
criture Lecture
Sur fichier autres fonctions : fwrite , xlswrite ... autres fonctions : fread , xlsread ...
binaire
dcrire la manire selon laquelle il faut interprter ce que l'on lit (s'agit-il d'un nombre, d'une chane de caractre...)
dlfinir sous quelle forme il faut crire les donnes (pour un nombre: combien de chiffres avant/aprs la virgule ; pour
une chane: type de justification...)
Les formats MATLAB/Octave utilisent un sous-ensemble des conventions et spcifications de formats du langage C.
Les formats sont des chanes de caractres se composant de "spcifications de conversion" dont la syntaxe est
dcrite dans le tableau ci-dessous.
24
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
ATTENTION : dans un format de lecture, on ne prfixera en principe pas les "spcifications de conversion" de
nombres ( u d i o x X f e E g G ) par des valeurs n (taille du champ) et m (nombre de dcimales),
car le comportement de MATLAB et de Octave peut alors conduire des rsultats diffrents (dcoupage avec MATLAB, et
aucun effet sous Octave).
Ex : sscanf('560001','%4f') retourne : sous MATLAB le vecteur [5600 ; 1] , et sous Octave la valeur 560001
Spcifications Description
espace En lecture: les caractres espace dans un format n'ont aucune signification (i.e. sont ignors)
En criture: les caractres espace sont crits dans la chane rsultante
%nu En lecture:
Ex : sscanf('100 -5','%u') => 100 et 4.295e+09 (!)
En criture: si n est spcifi, le nombre sera justifi droite dans un champ de n car. au
min.
Ex : sprintf('%5u ', 100, -5) => ' 100 -5.000000e+000' et ' 100 -5'
%nd En lecture:
%ni Ex : sscanf('100 -5','%d') => 100 et -5
En criture: si n est spcifi, le nombre sera justifi droite dans un champ de n car. au
min.
Ex : sprintf('%d %03d ', 100, -5) => '100 -05'
%no En lecture:
Ex : sscanf('100 -5','%o') => 64 et 4.295e+09 (!)
En criture: si n est spcifi, le nombre sera justifi droite dans un champ de n car. au
min.
Ex : sprintf('%04o ', 64, -5) => '0100 -5.000000e+000' et '0100 -005'
%nf En lecture:
% n.m f Ex : sscanf('5.6e3 xy -5','%f xy %f') => [5600 ; -5]
En criture: si n est spcifi, le nombre sera justifi droite dans un champ de n car. au
min., et affich avec m chiffres aprs la virgule.
Ex : sprintf('%f %0.2f ', 56e002, -78e-13, -5) => '5600.000000 -0.00
-5.000000'
25
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
%nc En lecture:
Ex : sscanf('ab1 2cd3 4ef', '%2c %*3c') => 'abcdef'
En criture:
Ex : sprintf(' %c: (ASCII: %3d)\n', 'aabbcc') => cela affiche :
a: (ASCII: 97)
b: (ASCII: 98)
c: (ASCII: 99)
%ns En lecture: les chanes sont dlimites par un ou plusieurs caractres espace
Ex : sscanf('123 abcd', '%2s %3s') => '123abcd'
En criture: si n est spcifi, la chane sera justifie droite dans un champ de n car. au
min.
Ex : sprintf('%s|%5s|%-5s|', 'blahblah...', 'abc', 'XYZ')
=> 'blahblah...| abc|XYZ |'
Caractres Pour faire usage de certains caractres spciaux, il est ncessaire de les encoder de la faon
spciaux suivante :
\n pour un saut la ligne suivante ( new line )
\t pour un tab horizontal
%% pour le caractre "%"
\\ pour le caractre "\"
Tout autre caractre (ne faisant pas partie d'une spcification %... ) sera utilis de la faon
Tout autre suivante :
caractre
En lecture: le caractre "match" sera saut. Exception: les caractres espace d'un format de
lecture sont ignors
Ex : sscanf('12 xy 34.5 ab 67', '%f xy %f ab %f') => [12.0 ; 34.5 ; 67.0]
En criture: le caractre sera crit tel quel dans la chane de sortie
Ex : article='stylos' ; fprintf('Total: %d %s \n', 4, article) =>
'Total: 4 stylos'
De plus, les "spcifications de conversion" peuvent tre modifies (prfixes) de la faon suivante :
Spcifications Description
%- n ... En criture: l'lment sera justifi gauche (et non droite) dans un champ de n car. au
min.
%0 n ... En criture: l'lment sera complt gauche par des '0' (chiffres zros, et non caractres
espace ) dans un champ de n car. au min.
Ex : sscanf('12 blabla 34.5 67.8', '%d %*s %*f %f') => [12 ; 67.8]
Lecture/dcodage de chane
La fonction sscanf ("string scan formated") permet, l'aide d'un format de lecture, de dcoder le contenu d'une
chane de caractre et d'en rcuprer les donnes sur un vecteur ou une matrice. La lecture s'effectue en "format
libre" en ce sens que sont considrs, comme sparateurs d'lments dans la chane, un ou plusieurs espace ou tab .
26
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Si la chane renferme davantage d'lments qu'il n'y a de "spcifications de conversion" dans le format, le format sera
"rutilis" autant de fois que ncessaire pour lire toute la chane. Si, dans le format, on mlange des spcifications de
conversion numriques et de caractres, il en rsulte une variable de sortie (vecteur ou matrice) entirement
numrique dans laquelle les caractres des chanes d'entre sont stocks, raison d'un caractre par lment de
vecteur/matrice, sous forme de leur code ASCII.
Ex :
vec=sscanf('abc 1 2 3 4 5 6', '%*s %f %f') => vec=[1;2;4;5]
Notez que, en raison de la "rutilisation" du format, les nombres 3 et 6 sont ici sauts par le %*s !
vec=sscanf('1001 1002 abc', '%f %f %s') => vec=[1001;1002;87;98;99]
Mlange de spcifications de conversion numriques et de caractres => la variable 'vec' est de type nombre, et
la chane 'abc' y est stocke par le code ASCII de chacun de ses caractres
Ex :
vec=sscanf('1 2 3 4 5 6', '%f', 4) => vec=[1;2;3;4]
[mat,ct]=sscanf('1 2 3 4 5 6', '%f', [3,2]) => mat=[1 4 ; 2 5 ; 3 6], ct=6
[mat,ct]=sscanf('1 2 3 4 5 6', '%f', [2,3]) => mat=[1 3 5 ; 2 4 6], ct=6
Si une chane ne contient que des nombres, on peut aussi aisment rcuprer ceux-ci l'aide de la fonction str2num
prsente au chapitre sur les "Chanes de caractres".
Il existe encore la fonction de dcodage de chane strread qui est extrmement puissante ! Nous vous laissons la
dcouvrir via l'aide ou la documentation.
Voyez aussi textscan qui est capable de lire des chanes mais aussi des fichiers !
Ex :
nb=4 ; prix=10 ; disp(sprintf('Nombre d''articles: %04u Montant: %0.2f Frs', nb,
nb*prix))
ou, plus simplement: fprintf('Nombre d''articles: %04u Montant: %0.2f Frs \n', nb,
nb*prix)
=> affiche: Nombre d'articles: 0004 Montant: 40.00 Frs
La fonction mat2str ("matrix to string") dcrite ci-dessous (et voir chapitre "chanes de caractres") est intressante
27
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
pour sauvegarder de faon compacte sur fichier des matrices sous forme texte (en combinaison avec fprintf ) que l'on
pourra relire sous MATLAB/Octave (lecture-fichier avec fscanf , puis affectation a une variable avec eval ).
Ex :
str_mat = mat2str(eye(3,3)) produit la chane "[1 0 0;0 1 0;0 0 1]"
et pour affecter ensuite les valeurs d'une telle chane une matrice x, on ferait eval(['x=' str_mat])
Voir aussi les fonctions plus primitives int2str (conversion nombre entier->chane) et num2str (conversion nombre
rel->chane).
Ex : Dans l'exemple ci-dessous, la premire instruction "avale" le fichier essai.txt sur le vecteur ligne de type
chane fichier_entier (vecteur ligne, car on transpose le rsultat de fileread ). La seconde dcoupe
ensuite cette chane selon les sauts de ligne ( \n ) de faon charger le tableau cellulaire tabcel_lignes
raison d'une ligne du fichier par cellule.
Fonction textread
[vec1, vec2, vec3 ...] = textread(file_name, format {,n})
Fonction simple et efficace de lecture d'un fichier-texte nomm file_name dont l'ensemble des donnes
rpond un format homogne. Les donnes peuvent tre dlimites par un ou plusieurs espace , tab , voire
mme saut(s) de ligne newline . La lecture s'effectue ainsi en "format libre" (comme avec sscanf et
fscanf ).
Le vecteur-colonne vec1 recevra la 1re "colonne" du fichier, le vecteur vec2 recevra la 2e colonne, vec3 la 3e, et
ainsi de suite... La lecture s'effectue jusqu' la fin du fichier, moins que l'on spcifie le nombre n de fois que le
format doit tre rutilis.
28
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Le nombre de variables vec1 vec2 vec3... et leurs types respectifs dcoulent directement du format
Si vec-i rceptionne des chanes de caractres, il sera de type "tableau cellulaire", en fait vecteur-colonne
cellulaire (sous Octave jusqu' la version 2.1.x c'tait un objet de type "liste")
Les "spcifications de conversion" de format %u , %d , %f et %s peuvent tre utilises avec textread sous
MATLAB et Octave.
Sous Octave seulement on peut en outre utiliser les spcifications %o et %x .
Sous MATLAB seulement on peut encore utiliser :
%[...] : lit la plus longue chane contenant les caractrens numrs entre [ ]
%[^...] : lit la plus longue chane non vide contenant les caractrens non numrs entre [ ]
Ex :
Soit le fichier-texte de donnes ventes.txt suivant :
for no=1:1:length(No_client)
fprintf(format, Nom{no}, No_client(no), Nb_articles(no), ...
Article{no}, Prix_unit(no), Montant(no) ) ;
end
disp(' ')
fprintf(' TOTAL %8.2f Frs \n', ...
sum(Montant) )
Attention : bien noter, ci-dessus, les accolades pour dsigner lments de Nom{} et de Article{} . Ce sont
des "tableaux cellulaires" dont on pourrait aussi rcuprer les lments, sous forme de chane, avec :
char(Nom(no)) , char(Article(no)) .
L'excution de ce script: lit le fichier, calcule les montants, et affiche ce qui suit :
Si file_name ne dfinit qu'un nom de fichier, celui-ci est recherch dans le rpertoire courant. Si l'on veut ouvrir
un fichier se trouvant dans un autre rpertoire, il faut bien entendu faire prcder le nom du fichier de son chemin
d'accs (path) relatif ou absolu. S'agissant du sparateur de rpertoire, bien que celui-ci soit communment \
sous Windows, nous vous conseillons de toujours utiliser / (accept par MATBAL/Octave sous Windows) pour que
29
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
vos scripts/fonctions soient portables, c'est--dire utilisables dans les 3 mondes Windows, macOS et GNU/Linux.
Le mode d'accs au fichier sera dfini par l'une des chanes suivantes :
'rt' ou 'rb' ou 'r' : lecture seule (read)
'wt' ou 'wb' ou 'w' : criture (write), avec cration du fichier si ncessaire, ou crasement s'il existe
'at' ou 'ab' ou 'a' : ajout la fin du fichier (append), avec cration du fichier si ncessaire
'rt+' ou 'rb+' ou 'r+' : lecture et criture, sans cration
'wt+' ou 'wb+' ou 'w+' : lecture et criture avec crasement du contenu
'at+' ou 'ab+' ou 'a+' : lecture et ajout la fin du fichier, avec cration du fichier si ncessaire
Le fait de spcifier t ou b ou aucun de ces deux caractres dans le mode a la signification suivante :
t : ouverture en mode "texte"
b ou rien : ouverture en mode "binaire" (mode par dfaut)
Sous Windows ou macOS, il est important d'utiliser le mode d'ouverture "texte" si l'on veut que les fins de
ligne soient correctement interprtes !
En cas d'chec (fichier inexistant en lecture, protg en criture, etc...), file_id reoit la valeur "-1". On peut aussi
rcuprer un message d'erreur sous forme de texte explicite sur message_err
Identifiants prdfinis (toujours disponibles, correspondant des canaux n'ayant pas besoin d'tre "ouverts") :
1 ou stdout : correspond la sortie standard (standard output, c'est--dire fentre console
MATLAB/Octave), pouvant donc tre utilis pour l'affichage l'cran
2 ou stderr : correspond au canal erreur standard (standard error, par dfaut aussi la fentre console),
pouvant aussi tre utilis par le programmeur pour l'affichage d'erreurs
0 ou stdin : correspond l'entre standard (standard input, c'est--dire saisie au clavier depuis console
MATLAB/Octave).
Pour offrir l'utilisateur la possibilit de dsigner le nom et emplacement du fichier ouvrir/crer l'aide d'une
fentre de dialogue classique (interface utilisateur graphique), on se rfrera aux fonctions uigetfile (lecture
de fichier), uiputfile (criture de fichier) et zenity_file_selection prsentes au chapitre
"Interfaces-utilisateur graphiques". Pour slectionner un rpertoire, on utilisera la fonction uigetdir .
freport()
Affiche la liste de tous les fichiers ouverts, avec file_id, mode et file_name.
On voit que les canaux stdin , stdout et stderr sont toujours pr-ouverts
{status=} fclose(file_id)
fclose('all')
Referme le fichier ayant l'identifiant file_id (respectivement tous les fichiers ouverts). Le status retourn est
"0" en cas de succs, et "-1" en cas d'chec.
A la fin de l'excution d'un script ayant ouvert des fichiers, tous ceux-ci sont automatiquement referms, mme en
l'absence de fclose .
Ex :
Soit le fichier-texte suivant :
10001 Dupond
Livres 12 23.50
10002 Durand
Classeurs 15 3.95
30
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Nom{no,1} = fscanf(file_id,'%s',1) ;
Article{no,1} = fscanf(file_id,'%s',1) ;
Nb_articles(no) = fscanf(file_id,'%u',1) ;
Prix_unit(no) = fscanf(file_id,'%f',1) ;
no = no + 1 ;
end
status = fclose(file_id) ;
line = fgetl(file_id)
Lecture, ligne par ligne ("file get line"), du fichier-texte spcifi par l'identifiant file_id . A chaque appel de
cette fonction on rcupre, sur la variable line de type chane, la ligne suivante du fichier (sans le caractre de fin
de ligne).
{status=} feof(file_id)
Test si l'on a atteint la fin du fichier spcifi par l'identifiant file_id : retourne "1" si c'est le cas, "0" si non.
Utile pour implmenter une boucle de lecture d'un fichier.
frewind(file_id)
Se (re)positionne au dbut du fichier spcifi par l'identifiant file_id .
Pour un positionnement prcis l'intrieur d'un fichier, voyez les fonctions :
fseek(file_id, offset, origin) : positionnement offset octets aprs origin
position = ftell(file_id) : retourne la position courante dans le fichier
{status=} fflush(file_id)
Pour garantir de bonnes performances, Octave utilise un mcanisme de mmoire tampon (buffer) pour les
oprations d'criture. Les critures ainsi en attente sont priodiquement dverses sur le canal de sortie, au plus
tard lorsque l'on fait un fclose . Avec la fonction fflush , on force le vidage (flush) du buffer sur le canal de
sortie.
Dans des scripts interactifs ou affichant des rsultats en temps rel dans la fentre console, il peut tre utile dans
certaines situations de flusher la sortie standard avec fflush(stdout) . Voyez aussi la fonction
page_output_immediately pour carrment dsactiver le buffering.
Fonction textscan
Cette fonction est capable la fois de lire un fichier ou de dcoder une chane.
31
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
et l'on rcupre alors dans vec_cel{1} le vecteur de nombre des No, dans vec_cel{2} le vecteur cellulaire
des Clients, dans vec_cel{3} le vecteur cellulaire des Articles, etc...
xlsread(...) et xlswrite(...)
Fonctions de lecture/criture de classeurs Excel (binaire). Voyez l'aide pour davantage d'information.
odsread(...) et odswrite(...)
Fonctions de lecture/criture de classeurs OpenOffice/LibreOffice (binaire). Voyez l'aide pour davantage
d'information.
32
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Ex : le code ci-dessous fait dsigner par l'utilisateur un fichier, puis affiche son contenu
(pour les fonctions fopen , feof , fgetl , fprintf et fclose , voir le chapitre Entres-sorties...)
33
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Nous les prsentons sous forme d'exemples, et les illustrations proviennent de Octave sous Windows 7.
S'agissant de Octave, ces fonctions apparaissent avec la version 3.8 et s'appuient sur le package Java qui est dsormais
intgr Octave Core.
Fentre d'information :
Le premier paramtre msg peut tre une chane simple (qui sous
Octave peut contenir \n pour gnrer un saut la ligne) ou un
vecteur cellulaire de chanes (chaque lment tant alors affich dans la
fentre sur une nouvelle ligne).
Le 3e paramtre peut tre 'warn' , 'help' ou 'error' (=>
affichage d'une icne dans la fentre), ou tre ignor ou valoir
'none' (=> pas d'icne).
Fentre d'avertissement :
Fentre d'aide :
Fentre d'erreur :
34
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Fentre de question :
valeurs={'pommes','poires','cerises','kiwis','oranges'};
35
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Paramtres de sortie :
sel_ind est un vecteur ligne contenant les indices des lments de
valeurs que l'on a slectionns
ok retourne 1 si on a cliqu Ok , et 0 si on a cliqu Cancel
choix = menu('Titre','element1','element2',...)
Implmente un menu retournant dans choix le numro d'ordre de l' lment slectionn :
MATLAB : ce menu apparat
sous forme d'une fentre dans
laquelle chaque lement fait l'objet
d'un bouton (voir figure de gauche
ci-contre). Il suffit de cliquer sur
un bouton pour refermer la fentre
et continuer l'excution du
programme.
36
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
Ex
barre = waitbar(0,'Patientez...');
for k=1:50
pause(0.1)
% pour les besoins de l'exemple, on
% fait ici une pause en lieu et
% place d'autres instructions...
waitbar(k/50)
end
close(barre)
Pour dvelopper de vritables interfaces graphiques sous MATLAB ou Octave, on ralise gnralement cela dans des
fentres de figures. Notez que ces possibilits apparaissent progressivement sous Octave depuis la version 3.8 et ne sont
disponibles qu'avec les backends graphiques Qt et FLTK.
Nous numrons ci-aprs les fonctions principales disponibles la fois sous MATLAB et Octave en vous renvoyant l'aide
pour plus de dtails :
uimenu : cration d'un menu (titre, articles de menu avec raccourcis et fonctions callback associs...) dans la barre
de menus d'une figure
uicontextmenu : dfinition de menus contextuels (i.e. apparaissant par un clic-droite sur un objet de la figure)
uitoolbar : cration d'une barre d'outils au haut de la figure, sous la barre de menus
uipushtool : dfinition de push-buttons dans la barre d'outils
uitoggletool : dfinition de toggle-buttons dans la barre d'outils
Pour plus de dtails (installation, possibilits, utilisation...) : Acher les dtails ...
37
MATLAB et Octave - 7. Programmation : interaction, structures de contrle, scripts, fonctions, entres-sorties
38
Octave Quick Reference Octave Version 3.0.0 Killing and Yanking shiftdim (arr, s) rotate the array dimensions.
C-k kill to the end of the line circshift (arr, s) rotate the array elements.
Starting Octave C-y yank the most recently killed text
octave start interactive Octave session M-d kill to the end of the current word Sparse Matrices
octave file run Octave on commands in file M-DEL kill the word behind the cursor sparse (...) create a sparse matrix.
octave --eval code Evaluate code using Octave M-y rotate the kill ring and yank the new top speye (n) create sparse identity matrix.
octave --help describe command line options sprand (n, m, d) sparse rand matrix of density d.
Command Completion and History spdiags (...) sparse generalization of diag.
Stopping Octave TAB complete a command or variable name nnz (s) No. non-zero elements in sparse matrix.
quit or exit exit Octave M-? list possible completions
INTERRUPT (e.g. C-c) terminate current command and RET enter the current line Ranges
return to top-level prompt C-p move up through the history list base : limit
C-n move down through the history list base : incr : limit
Getting Help M-< move to the first line in the history Specify a range of values beginning with base with no
help list all commands and built-in variables M-> move to the last line in the history elements greater than limit. If it is omitted, the default
help command briefly describe command C-r search backward in the history list value of incr is 1. Negative increments are permitted.
doc use Info to browse Octave manual C-s search forward in the history list
doc command search for command in Octave manual history [-q] [N ] list N previous history lines, omitting Strings and Common Escape Sequences
lookfor str search for command based on str history numbers if -q A string constant consists of a sequence of characters enclosed
history -w [file] write history to file (~/.octave hist if no in either double-quote or single-quote marks. Strings in double-
Motion in Info file argument) quotes allow the use of the escape sequences below.
SPC or C-v scroll forward one screenful history -r [file] read history from file (~/.octave hist if \\ a literal backslash
DEL or M-v scroll backward one screenful no file argument) \" a literal double-quote character
C-l redraw the display edit history lines edit and then run previous commands \ a literal single-quote character
from the history list \n newline, ASCII code 10
Node Selection in Info run history lines run previous commands from the history \t horizontal tab, ASCII code 9
n select the next node list
p select the previous node [beg ] [end ] Specify the first and last history Index Expressions
u select the up node commands to edit or run. var (idx) select elements of a vector
t select the top node If beg is greater than end, reverse the list of commands var (idx1, idx2) select elements of a matrix
d select the directory node before editing. If end is omitted, select commands from scalar select row (column) corresponding to
< select the first node in the current file beg to the end of the history list. If both arguments are scalar
> select the last node in the current file omitted, edit the previous item in the history list. vector select rows (columns) corresponding to the
g reads the name of a node and selects it elements of vector
C-x k kills the current node Shell Commands range select rows (columns) corresponding to the
cd dir change working directory to dir elements of range
Searching in Info pwd print working directory : select all rows (columns)
s search for a string ls [options] print directory listing
C-s search forward incrementally getenv (string) return value of named environment
Global and Persistent Variables
C-r search backward incrementally variable global var1 ... Declare variables global.
i search index & go to corresponding node system (cmd) execute arbitrary shell command string global var1 = val Declare variable global. Set initial value.
, go to next match from last i command persistent var1 Declare a variable as static to a function.
Matrices persistent var1 = Declare a variable as static to a function
Command-Line Cursor Motion Square brackets delimit literal matrices. Commas separate val and set its initial value.
C-b move back one character elements on the same row. Semicolons separate rows. Commas Global variables may be accessed inside the body of a function
C-f move forward one character may be replaced by spaces, and semicolons may be replaced by without having to be passed in the function parameter list
C-a move to the start of the line one or more newlines. Elements of a matrix may be arbitrary provided they are declared global when used.
C-e move to the end of the line expressions, assuming all the dimensions agree.
M-f move forward a word
Selected Built-in Functions
[ x, y, ... ] enter a row vector EDITOR editor to use with edit history
M-b move backward a word
[ x; y; ... ] enter a column vector
C-l clear screen, reprinting current line at top Inf, NaN IEEE infinity, NaN
[ w, x; y, z ] enter a 22 matrix NA Missing value
Inserting or Changing Text PAGER program to use to paginate output
Multi-dimensional Arrays ans last result not explicitly assigned
M-TAB insert a tab character Multi-dimensional arrays may be created with the cat or eps machine precision
DEL delete character to the left of the cursor
C-d delete character under the cursor
reshape commands from two-dimensional sub-matrices. pi
C-v add the next character verbatim squeeze (arr) remove singleton dimensions of the array. 1i 1
C-t transpose characters at the point ndims (arr) number of dimensions in the array. realmax maximum representable value
M-t transpose words at the point permute (arr, p) permute the dimensions of an array. realmin minimum representable value
ipermute (arr, p) array inverse permutation.
[] surround optional arguments ... show one or more arguments Copyright 1996, 1997, 2007 John W. Eaton Permissions on back
Assignment Expressions Paths and Packages Function Handles
var = expr assign expression to variable path display the current Octave function path. @func Define a function handle to func.
var (idx) = expr assign expression to indexed variable pathdef display the default path. @(var1, ...) expr Define an anonymous function handle.
var (idx) = [] delete the indexed elements. addpath(dir) add a directory to the path. str2func (str) Create a function handle from a string.
var {idx} = expr assign elements of a cell array. EXEC PATH manipulate the Octave executable path. functions (handle) Return information about a function
pkg list display installed packages. handle.
pkg load pack Load an installed package. func2str (handle) Return a string representation of a
Arithmetic and Increment Operators function handle.
x + y addition handle (arg1, ...) Evaluate a function handle.
x - y subtraction Cells and Structures feval (func, arg1, Evaluate a function handle or string,
x * y matrix multiplication var.field = ... set a field of a structure.
...) passing remaining args to func
x .* y element by element multiplication var{idx} = ... set an element of a cell array. Anonymous function handles take a copy of the variables in the
x / y right division, conceptually equivalent to cellfun(f, c) apply a function to elements of cell array. current workspace.
(inverse (y) * x) fieldnames(s) returns the fields of a structure.
x ./ y element by element right division
x \ y left division, conceptually equivalent to Statements Miscellaneous Functions
inverse (x) * y eval (str) evaluate str as a command
for identifier = expr stmt-list endfor
x .\ y element by element left division
error (message) print message and return to top level
Execute stmt-list once for each column of expr. The variable
x ^ y power operator
warning (message) print a warning message
identifier is set to the value of the current column during
x .^ y element by element power operator
clear pattern clear variables matching pattern
each iteration.
- x negation
exist (str) check existence of variable or function
+ x unary plus (a no-op) while (condition) stmt-list endwhile who, whos list current variables
x complex conjugate transpose
whos var details of the variable var
Execute stmt-list while condition is true.
x . transpose
++ x (-- x) increment (decrement), return new value break exit innermost loop
Basic Matrix Manipulations
x ++ (x --) increment (decrement), return old value continue go to beginning of innermost loop rows (a) return number of rows of a
return return to calling function columns (a) return number of columns of a
all (a) check if all elements of a nonzero
Comparison and Boolean Operators any (a) check if any elements of a nonzero
These operators work on an element-by-element basis. Both if (condition) if-body [else else-body] endif
arguments are always evaluated. Execute if-body if condition is true, otherwise execute else-
find (a) return indices of nonzero elements
body.
x < y true if x is less than y sort (a) order elements in each column of a
x <= y true if x is less than or equal to y if (condition) if-body [elseif (condition) elseif-body] endif sum (a) sum elements in columns of a
x == y true if x is equal to y Execute if-body if condition is true, otherwise execute the prod (a) product of elements in columns of a
x >= y true if x is greater than or equal to y elseif-body corresponding to the first elseif condition that min (args) find minimum values
x > y true if x is greater than y is true, otherwise execute else-body. max (args) find maximum values
x != y true if x is not equal to y Any number of elseif clauses may appear in an if rem (x, y) find remainder of x/y
x & y true if both x and y are true statement. reshape (a, m, n) reformat a to be m by n
x | y true if at least one of x or y is true diag (v, k) create diagonal matrices
! bool true if bool is false unwind protect body unwind protect cleanup cleanup end linspace (b, l, n) create vector of linearly-spaced elements
Execute body. Execute cleanup no matter how control exits logspace (b, l, n) create vector of log-spaced elements
Short-circuit Boolean Operators body. eye (n, m) create n by m identity matrix
try body catch cleanup end ones (n, m) create n by m matrix of ones
Operators evaluate left-to-right. Operands are only evaluated if
Execute body. Execute cleanup if body fails. zeros (n, m) create n by m matrix of zeros
necessary, stopping once overall truth value can be determined.
Operands are converted to scalars using the all function. rand (n, m) create n by m matrix of random values
Strings
x && y true if both x and y are true
x || y true if at least one of x or y is true
strcmp (s, t) compare strings Linear Algebra
strcat (s, t, ...) concatenate strings chol (a) Cholesky factorization
regexp (str, pat) strings matching regular expression det (a) compute the determinant of a matrix
Operator Precedence regexprep (str, pat, rep) Match and replace sub-strings eig (a) eigenvalues and eigenvectors
Table of Octave operators, in order of increasing precedence. expm (a) compute the exponential of a matrix
; , statement separators Defining Functions hess (a) compute Hessenberg decomposition
= assignment, groups left to right inverse (a) invert a square matrix
function [ret-list] function-name [ (arg-list) ] norm (a, p) compute the p-norm of a matrix
|| && logical or and and
| & element-wise or and and function-body pinv (a) compute pseudoinverse of a
< <= == >= > != relational operators endfunction qr (a) compute the QR factorization of a matrix
: colon rank (a) matrix rank
ret-list may be a single identifier or a comma-separated list of sprank (a) structural matrix rank
+ - addition and subtraction
identifiers delimited by square-brackets. schur (a) Schur decomposition of a matrix
* / \ .* ./ .\ multiplication and division
. transpose arg-list is a comma-separated list of identifiers and may be svd (a) singular value decomposition
+ - ++ -- ! unary minus, increment, logical not empty. syl (a, b, c) solve the Sylvester equation
^ .^ exponentiation
Equations, ODEs, DAEs, Quadrature Polynomials
*fsolve solve nonlinear algebraic equations compan (p) companion matrix
*lsode integrate nonlinear ODEs conv (a, b) convolution
*dassl integrate nonlinear DAEs deconv (a, b) deconvolve two vectors
*quad integrate nonlinear functions poly (a) create polynomial from a matrix
perror (nm, code) for functions that return numeric codes, polyderiv (p) derivative of polynomial
print error message for named function polyreduce (p) integral of polynomial
and given error code polyval (p, x) value of polynomial at x
* See the on-line or printed manual for the complete list of polyvalm (p, x) value of polynomial at x
arguments for these functions. roots (p) polynomial roots
residue (a, b) partial fraction expansion of ratio a/b
Signal Processing
fft (a) Fast Fourier Transform using FFTW Statistics
ifft (a) inverse FFT using FFTW corrcoef (x, y) correlation coefficient
freqz (args) FIR filter frequency response cov (x, y) covariance
filter (a, b, x) filter by transfer function mean (a) mean value
conv (a, b) convolve two vectors median (a) median value
hamming (n) return Hamming window coefficients std (a) standard deviation
hanning (n) return Hanning window coefficients var (a) variance