SlideShare una empresa de Scribd logo
1 de 67
Descargar para leer sin conexión
`
Introduction a Octave
Rodolphe Charrier

UFRST
´
Universite du Havre
M1 Math-Info MATIS

Rodolphe Charrier

`
Introduction a Octave
Apercu et environnement I
¸
GNU Octave est le logiciel libre offrant actuellement la
´
meilleure compatibilite avec le logiciel commercial de calcul
´
numerique Matlab.
Version 3.2 sous linux Ubuntu (existe aussi sur Mac et
Windows).
Octave est :
´ ´
un langage interprete converti en P-code (pseudo code
Matlab),
´
utilisable en ligne de commande ou par execution de
´
scripts stockes dans des ”M-files” (extension ”.m”),
´
´
´
dote de fonctionnalites de haut niveau - developpement
”rapide”.
Rodolphe Charrier

`
Introduction a Octave
Apercu et environnement II
¸
´
Octave est un langage de programmation associe une riche
´
collection d’algorithmes numeriques :
`
´
algebre lineaire et matriciel
ˆ
polynomes et fonctions rationnelles
interpolation et approximation
´
´
optimisation lineaire, quadratique et non lineaire
EDO / EDP
ˆ
Controle classique et robuste
Traitement du signal
Statistiques
Graphisme 2D/3D
...

Rodolphe Charrier

`
Introduction a Octave
Apercu et environnement III
¸

´
Octave est fourni ici avec l’IDE QtOctave qui permet l’edition de
´
´
ˆ
scripts, leur execution et debuggage, les requetes en ligne de
´ ´
commande, l’aide en ligne, des menus de fonctions dediees,
etc . . .
Le lancement de QtOctave depuis le menu programme
d’Ubuntu lance automatiquement Octave dans une console et
´
´ ´
un editeur integre.

Rodolphe Charrier

`
Introduction a Octave
Apercu et environnement IV
¸

Rodolphe Charrier

`
Introduction a Octave
Obtenir de l’aide I

Dans la console d’Octave :
doc fonction ou help fonction lance une aide sur
´ ´
la fonction specifiee,
la commande lookfor mot-cl´ recherche l’occurrence
e
´
`
du mot-cle dans toutes les premieres lignes des textes
d’aide
l’option lookfor -all mot-cl´ cherche dans tout le
e
texte de l’aide.
`
`
Une des manieres les plus completes d’obtenir de l’aide est
d’ouvrir le menu Help/Octave Help de QtOctave. Une
ˆ
´ ´
fenetre dediee s’ouvre alors.

Rodolphe Charrier

`
Introduction a Octave
Obtenir de l’aide II

Dans cette aide, on trouve aussi des exemples de codes et des
´
demonstrations.
Enfin une aide dynamique est aussi disponible dans le menu
Help de QtOctave.
Rodolphe Charrier

`
Introduction a Octave
Obtenir de l’aide III

ˆ
´
Elle ouvre une fenetre complementaire qui fournit des
´
`
informations interessantes a la saisie dans l’une quelconque
ˆ
des fenetres ouvertes.

Rodolphe Charrier

`
Introduction a Octave
´
Modes d’utilisation - console, editeur, batch
processing I
ˆ
Octave s’utilise dans une fenetre console, au travers d’une
boucle du type
´
´
lecture-evaluation-resultat
Taper les lignes de commandes suivantes successivement.
Que constatez-vous?
>>> s="Hello World!";
>>> disp(s);
>>> s
`
Les fleches ↑ et ↓ permettent une navigation dans l’historique
des commandes.
`
´
La touche <TAB> lance un systeme de completion facilitant la
saisie.
Rodolphe Charrier

`
Introduction a Octave
´
Modes d’utilisation - console, editeur, batch
processing II

Rodolphe Charrier

`
Introduction a Octave
´
Modes d’utilisation - console, editeur, batch
processing III
´
Execution de fichiers de scripts / commandes
´
´ ´ `
´
A partir de l’editeur integre a QtOctave ou d’un editeur externe,
on peut construire un fichier de commandes avec l’extension
”.m”.
´
´
On pourra executer ce script par l’une des methodes
suivantes :
ˆ
´
depuis le menu Run/Run de la fenetre d’edition de
QtOctave,
par la commande Octave source("nomDuScript.m")
dans le dossier du script,
en tapant directement le nom du script (sans extension)
depuis le dossier du script dans la console de commande.
Rodolphe Charrier

`
Introduction a Octave
´
Modes d’utilisation - console, editeur, batch
processing IV
Mode batch
On peut lancer Octave en mode batch :
´
pour disposer d’un environnement simplifie (sans
ˆ
fenetrage),
pour lancer en externe des fichiers de scripts
Commande de base :
octave --silent monScript.m >Resultats.txt
lance le script sur Octave (sans afficher les messages
`
´
d’ouverture Octave), quitte automatiquement apres execution
´
` ´
´
et recupere eventuellement le resultat dans le fichier
Resultats.txt.
Rodolphe Charrier

`
Introduction a Octave
´
Modes d’utilisation - console, editeur, batch
processing V

´
´
On peut egalement rendre executable un script en rajoutant en
ˆ
`
en-tete la ligne suivante donnant le chemin d’acces absolu au
binaire Octave :
#!usr/bin/octave --silent
´
puis l’executer dans un terminal de commande avec la
´
sequence suivante :
$ chmod u+x script.m
$./script.m > Resultats.txt

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations I

Tout est matrice dans Octave!
´
´
Malgre cette remarque, nous allons commencer par decrire des
´
types de donnees simples (des matrices 1x1) avant de passer
´ ´
aux aspects plus generaux de traitement de matrices.

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations II
´
Reels
´
´
´
Les reels sont codes sur 64 bits (double precision) avec 16
chiffres significatifs au maximum dans l’intervalle :
[10−308 , 10+308 ]
`
la fonction de conversion single() permet de ramener a
´
une simple precision,
´
´
! ! : certains operateurs arithmetiques rendent des
´
´
entiers lorsqu’ils sont en presence d’entiers et de reels.
⇒Utiliser la fonction double( )pour convertir les entiers
´
en reels.

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations III

Entiers
Les entiers sont obtenus via des fonctions de conversion vers
un encodage en 8, 16, 32 ou 64 bits :
´
int8, int16, int32, int64 pour les entiers signes
uint8, uint16, int32, uint64 pour les entiers non
´
signes.

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations IV
Nombres complexes
´
i, imaginaire pur dont le carre vaut -1,
´
´
´
partie reelle (reel) + i partie imaginaire (reel),
´
des fonctions specifiques manipulent les nombres
complexes :
>>> z1=5+6i
z1 = 5 + 6i
>>> real(z1)
ans = 5
>>> imag(z1)
ans = 6
>>> conj(z1)
ans = 5 - 6i
Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations V
Noms de variables
Un nom de variable sous Octave commence par une lettre puis
par au choix :
des lettres de l’alphabet en minuscules ou majuscules,
´
avec differenciation de ces deux types (”case sensitive”)
`
des nombres de 0 a 9
`
un caractere
`
´ `
`
Le nombre de caracteres utilisables est limite a 63 caracteres
sur Matlab/Octave.
´´
´
´
Les variables une fois creees resident en memoire dans le
”Workspace” d’Octave.

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations VI
´
Manipulation de variables numeriques
´
´
´
L’operateur d’affectation est represente par un seul signe =
´
´
´
(== designe l’operateur booleen de comparaison).
>>> x=1
x= 1
>>> x=x*2
x= 2
Tester l’usage du point-virgule ;.
´
´
Exemples d’operateurs arithmetiques :
´
´ ´
´
xˆ2 ou x ∗ ∗2 designe l’elevation au carre
x/y = xy −1
xy = x −1 y
Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations VII
Commentaires et lignes de continuation
`
Un commentaire commence par le caractere %,
´
Un bloc entier est encadre par %{ et %} ,
´
Une ligne se terminant par ... sera prolongee par la ligne
suivante.
Exemples :
>>> %
>>> x
>>> +
>>> +
x= 6

c’est un commentaire
= 1 ...
2 ...
3

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations VIII
´
´ ´
Fonctions mathematiques elementaires

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations IX
La plupart de ces fonctions prennent un argument et en
´
`
retourne un autre. Elles sont ”vectorisees”, c’est-a-dire qu’elles
manipulent des matrices.
Exemple : Tester les commandes ci-dessous
>>>
>>>
>>>
>>>
>>>

x = cos(2)
y = sin (2)
xˆ2 + yˆ2
ans*2
z=sin([x y])

´
La variable ans stocke l’evaluation de l’expression courante et
´
est reutilisable.

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations X
´
´ ´
Variables mathematiques predefinies
´
Dans Matlab/Octave, plusieurs variables mathematiques sont
´ efinies :
´
pred

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations XI
´
Booleens
´
Les booleens sont des variables qui peuvent prendre deux
valeurs, false ou 0, et true ou 1 (ou dans certains cas de
´
conditions logiques toute valeur differente de 0) .
´
´
0perateurs booleens :

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations XII

fonctions logiques :

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations XIII
`
Chaˆnes de caracteres
ı
´
´
Elles sont delimitees sous Matlab/Octave par des apostrophes :
>>> x = ’coucou’
x = coucou
`
Une chaˆne de caracteres est un vecteur ligne ce qui explique
ı
´
que la concatenation se fasse par la mise entre crochets [ ] :
>>> [’bonjour ’ ’tout le monde’]
ans = bonjour tout le monde

Rodolphe Charrier

`
Introduction a Octave
´
´
Elements de base - types de donnees, variables,
´
operations XIV
´
La fonction de concatenation
strcat(chaine1,chaine2,...) supprime les espaces
blancs.
Cf. doc Octave pour les fonctions de manipulation.
´
´
`
Une specificite d’Octave par rapport a Matlab est d’accepter
´
´
´
´
egalement les chaˆnes declarees entre guillemets integrant des
ı
`
´
caracteres speciaux :
t pour la tabulation
`
n pour le passage a la ligne.
´
Ainsi executer la commande :
>>> disp("Ce texte n s’affiche sur 2 lignes avec une ttabulation")

Rodolphe Charrier

`
Introduction a Octave
Matrices et vecteurs I

Construction d’une matrice :
´
´
delimitee par des crochets ouvrant [ et fermant ],
´ ´
ˆ
´
´
elements d’une meme ligne sont separes par des blancs
ou des virgules,
´
points virgules ; pour separer les lignes.

Rodolphe Charrier

`
Introduction a Octave
Matrices et vecteurs II
Exemples
´
Executer les commandes successives suivantes dans la
console Octave :
>>> A = [ 1 1 1; 2 4 8; 3 9 27]
%renvoie la taille de la matrice :
>>>size(A)
>>> y = [1 + i, - 3 * i, -1]
%vecteur transpos´ de y :
e
>>>y’
% matrice transpos´e de A :
e
>>> A’
%renvoie d’un ´l´ment de A :
e e
>>> A(2,2)
%renvoie la deuxi`me ligne de A :
e
>>> A(2,:)
% renvoie les deuxi`me et troisi`me lignes de A :
e
e
>>>A(2:3,:)

Rodolphe Charrier

`
Introduction a Octave
Matrices et vecteurs III

´ ´
Generation automatique
% G´n´ration d’un vecteur ligne g´n´r´ par s´rie lin´aire.
e e
e e e
e
e
% L’incr´ment est en position milieu pour chaque vecteur ligne
e
% t peut ˆtre un nombre d´cimal
e
e
>>>x=1:1:3
>>>u=1:0.5:3
% g´n´ration d’une matrice ` l’aide de 3 vecteurs lignes :
e e
a
>>>B=[1:1:3 ; 1:3:9 ; 9:-1:7]
%vecteur ligne g´n´r´ par la fonction linspace :
e e e
>>>v=linspace(-1,3,5)

Rodolphe Charrier

`
Introduction a Octave
Matrices et vecteurs IV

´
Construction de matrices specifiques
Tester les fonctions de construction de matrices suivantes et
´
´
retrouver leur specificite :
´ ´
(On reprendra la matrice A et les variables precedentes)
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>

I = eye(4,4)
Y = diag(y)
a = diag(A)
J = zeros(3,4)
K = ones(3,4)
B=triu(A)
C= tril(A)
R = rand (3,4)

Rodolphe Charrier

`
Introduction a Octave
Visualiser un graphe simple I
On va construire le graphe de la fonction
y = e−x sin(4x) pour x ∈ [0, 2π]
´
On commence alors par creer un maillage de l’intervalle [0, 2π]
avec la fonction linspace :
-->x=linspace(0,2*pi,101);
x est alors un vecteur de 101 valeurs pour donner 100
intervalles.
On calcule ensuite les valeurs de la fonction pour chaque
composante du vecteur x :
>>>y=exp(-x).*sin(4*x);
Rodolphe Charrier

`
Introduction a Octave
Visualiser un graphe simple II

´
´
´
La notation pointee de l’operateur arithmetique permet de
´
´ ´
´ ´
traiter l’operation element par element sur les matrices.
´
Le trace du graphique se fait alors par l’instruction plot :
>>>plot(x,y)
>>>title(’y=exp(-x)*sin(4x)’) % le titre du trac´
e
L’instruction permet de tracer une courbe passant par les points
´
´
dont les coordonnees sont donnees dans les vecteurs x pour
´
´
les abscisses, et y pour les ordonnees. Les points sont relies
par des segments de droites.

Rodolphe Charrier

`
Introduction a Octave
Visualiser un graphe simple III

Rodolphe Charrier

`
Introduction a Octave
´
´
Ecrire et executer un script I
´
L’ecriture de scripts Octave/Matlab (”M-files”) peut se faire dans
´
ˆ
´
´
l’editeur de QtOctave et peut etre execute depuis cet
´
environnement dans le menu Run de l’editeur.
Voici un petit exemple que l’on nommera ”script1.m” :
% mon premier script Octave
a = input(’ Rentrer la valeur de a : ’);
b = input(’ Rentrer la valeur de b : ’);
n = input(’ Nb d’intervalles n : ’);
% calcul des abscisses
x = linspace(a,b,n+1);
% calcul des ordonn´es
e
y = exp(-x).*sin(4*x);
% repr´sentation graphique
e
plot(x,y);
xlabel(’x’); % label sur les abscisses
ylabel(’y’); % label sur les ordonn´es
e
title(’y=exp(-x)*sin(4x)’);

Rodolphe Charrier

`
Introduction a Octave
´
Entrees-sorties-fichiers I

´
Principales fonctions (tire de http://enacit1.epfl.ch/
cours_matlab/mfiles.html#entrees_sorties) :

Rodolphe Charrier

`
Introduction a Octave
´
Entrees-sorties-fichiers II

Saisie clavier
Une saisie au clavier utilise la commande input.
Tester les saisies ci-dessous

>>> n=input(’entrer la dimension n’)
>>> A=input(’entrer une matrice’)
>>> nomfichier=input(’Donner le nom du fichier’,’s’)
´
Analyse automatique du type entre.
`
Lorsque c’est une chaˆne de caracteres, on rajoute ’s’ en
ı
`
parametre.

Rodolphe Charrier

`
Introduction a Octave
´
Entrees-sorties-fichiers III
Affichage sur la sortie standard
La commande disp n’affiche qu’une seule variable/chaˆne de
ı
` `
caractere a la fois.
>>> A=[1, 2; 3, 4]
>>> disp(A)
´ ´
L’instruction ”fprintf” qui est en fait celle qui est heritee du
langage C (ici en absence d’identifiant de fichier, c’est la sortie
´
standard qui est utilisee).
Ex :
>>> a=64; b=sin(a);
>>> fprintf(’le sinus de %2.f n est %f ’,a,b)
le sinus de 64
est 0.920026
Noter le format des nombres.
Rodolphe Charrier

`
Introduction a Octave
´
Entrees-sorties-fichiers IV
´
Manipulation de donnees matricielles dans des fichiers
´
dlmread met les donnees lues dans une matrice (avec
´
´
eventuellement un delimiteur).
´
´
Ecrire quelques donnees en lignes et colonne dans un
´
fichier donnees.txt puis executer le script suivant :
>>> M=dlmread(’donnees.txt’);
>>> disp(M);
>>> M2=dlmread(’donnees.txt’," ",[0,0,4,4])

`
La derniere instruction renvoie la sous-matrice des valeurs
´ ´
´ ´
comprises entre l’element (0,0) et l’element (4,4), le
´
separateur un espace blanc.
´
´
dlmwrite ecrit les donnees d’une matrice dans un
fichier :
>>> dlmwrite(’donnees.txt’, M, "-append");

´
Le dernier argument (”-append”) signale une ecriture en fin
de fichier.
Rodolphe Charrier

`
Introduction a Octave
´
Entrees-sorties-fichiers V
´
Lecture formatee dans un fichier
Soit le fichier texte ’data.txt’ suivant :
101 Martin Cahier 2 3.50
102 Charrier Crayon 5 2.95

´
Procedure de lecture sur un fichier : boucle qui termine avec le
signal de fin de fichier rendu par la fonction feof.
% fopen : le mode d’ouverture est indiqu´ par le second argument
e
% ’r’ lecture; ’w’ ´criture; ’a’ ajout en fin)
e
data_id = fopen(’data.txt’, ’r’) ;
no = 1 ;
while not(feof(data_id))
% lecture des ´l´ments 1 ` 1 (dernier argument de fscanf)
e e
a
No_client(no)
= fscanf(data_id,’%u’,1) ;
Nom{no,1}
= fscanf(data_id,’%s’,1) ;
Article{no,1}
= fscanf(data_id,’%s’,1) ;
Nb_articles(no) = fscanf(data_id,’%u’,1) ;
Prix_unit(no)
= fscanf(data_id,’%f’,1) ;
no = no + 1 ;
end
status = fclose(data_id) ;
Rodolphe Charrier

`
Introduction a Octave
´
Entrees-sorties-fichiers VI

`
´
Rem : les chaˆnes de caracteres sont stockees dans des
ı
tableaux cellulaires (cf. doc).
Principaux types de format :
´
%u et %d designent respectivement un entier positif
´
(naturel) et un entier relatif (positif ou negatif)
´
%f designe les flottants
´
`
%s designe les chaˆnes de caracteres
ı

Rodolphe Charrier

`
Introduction a Octave
´
Entrees-sorties-fichiers VII

´
´
Ecriture formatee dans un fichier
´
´ ´
´
On ecrit dans un fichier precedemment ouvert en ecriture via
fprintf.
´
Tester le script suivant (si vous ne precisez aucun file id, on
´
ecrit sur la sortie standard) :
>>> a=0:0.1:1;
>>> b=sin(a);
>>> fprintf(file_id, ’%1.2f %1.4f n’,[a;b]);

´
´
Les formats peuvent integrer des specifications d’affichage (ici
`
nombre avant et apres la virgule pour les flottants)

Rodolphe Charrier

`
Introduction a Octave
La programmation en Scilab I
If - instructions conditionnelles
´
Ecrire et executer le script suivant et modifier les valeurs de n
pour tester :
n=2;
if (n==1)
disp(’un’);
elseif (n==2)
disp(’deux’);
else
disp(’autre’);
endif

On peut enchaˆner plusieurs tests avec elseif.
ı
´
´
La condition logique de selection ne necessite pas de
`
´
parentheses. Il peut s’agir d’une matrice sur laquelle on verifie
´ ´
´
que tous les elements ne sont pas faux (differents de 0).

Rodolphe Charrier

`
Introduction a Octave
La programmation en Scilab II

Switch - alternatives
switch n
case{1}
disp(’un’);
case{2}
disp(’deux’);
otherwise
disp(’autre’);
endswitch

´
´
Seule l’instruction qui suit directement le case est executee si
la comparaison est vraie.
´
otherwise est facultatif et sera effectue si tous les tests
´ ´
´
´
precedents ont echoues.

Rodolphe Charrier

`
Introduction a Octave
La programmation en Scilab III

Boucle for
´
´ ´ ´
On utilise un index qui decrit un ensemble de valeurs, genere
´
souvent avec l’operateur deux-points ”:” .
´
ˆ
´ ´
L’iterateur de la boucle for peut etre plus generalement une
´
matrice, pour laquelle chaque iteration renvoie un vecteur
colonne. Tester le script ci-dessous :
for i=1:2:5
disp(i)
endfor
% sur une matrice
for n=[1 5 2;4 4 4]
n
endfor

Rodolphe Charrier

`
Introduction a Octave
La programmation en Scilab IV

Remarque
Quand cela est possible, on remplacera la boucle for par une
´
`
´
operation matricielle, c’est a dire ”vectorisee” pour un gain en
performance.

Rodolphe Charrier

`
Introduction a Octave
La programmation en Scilab V
Boucle While
´ `
´
Une boucle ”while” repete une sequence d’instructions de
`
´ `
´
maniere conditionnee a la verification d’une expression
´
booleenne.
Tester le script ci-dessous qui calcule la somme des 10
premiers entiers :
s=0; i=1;
while (i<=10)
s=s+i
i=i+1
endwhile

Tester cette autre facon de faire :
¸
>>>sum(1:10)
´
Comparez en augmentant le nombre utilise.

Rodolphe Charrier

`
Introduction a Octave
La programmation en Scilab VI
Break-Continue
´
break permet de sortir definitivement d’une boucle.
´
continue permet de sortir de l’iteration courante d’une
boucle.
´
Comparer l’execution des deux scripts qui suivent.
Break :
s=0; i=1;
while (true)
if (i>10)
break
endif
s=s+i
i=i+1
endwhile

Rodolphe Charrier

`
Introduction a Octave
La programmation en Scilab VII

Continue :
s=0; i=0;
while (i<=10)
if (modulo(i,2)==0)
i=i+1
continue
endif
s=s+i
i=i+1
endwhile

Rodolphe Charrier

`
Introduction a Octave
Les fonctions I
´
´
La demarche essentielle qui permet d’elaborer des
´ sur la decomposition
´
programmes en Scilab, est basee
fonctionnelle.
´ ´
De nombreuses fonctions predefinies sont disponibles
dans Octave.
ˆ
Un meme script peut comporter plusieurs fonctions qui
peuvent s’appeler uniquement au sein du script.
Remarque
`
´
Pour appeler une fonction a l’exterieur du script ou elle est
`
´
ˆ
´
´
`
definie, celle-ci devra etre declaree en premiere ligne du script
´
ˆ
et porter imperativement le meme nom que le fichier du script.

Rodolphe Charrier

`
Introduction a Octave
Les fonctions II
´
Declaration - appel d’une fonction
´
Syntaxe de declaration d’une fonction :
function [arg_sortie, ...]=ma_fonction(arg_entree, ...)

´
`
Les arguments sont passes par valeur a la fonction et non par
´ ´
reference.
´
L’appel ulterieur de la fonction se fait par la syntaxe suivante :
% si un seul argument de sortie
var_out=ma_fonction(var_in1, var_in2,...);
% si plusieurs arguments de sortie
[var_out1, var_out2...]=ma_fonction(var_in1, var_in2,...);

´
´
´
Les variables declarees dans la fonction ont une portee locale
`
´
a la fonction. Pour les rendre visibles de l’exterieur de la
´
´ ´ ´
´
fonction, il faudra les declarer precedee du mot-cle global.

Rodolphe Charrier

`
Introduction a Octave
Les fonctions III

Exemple
´ ´
´
Fonction predefinie : decomposition LU d’une matrice
´
(executer les lignes d’instructions suivantes puis utiliser ”help”
pour comprendre ce qu’elles font)
>>>A=rand(3,3);
>>>[L,U]=lu(A)
>>>[L,U,P]=lu(A)

Rodolphe Charrier

`
Introduction a Octave
Les fonctions IV
´
Ecriture de fonctions
1
2

´
´
Declarer la fonction (nom arguments d’entree / sortie),
utiliser des commentaires pour renseigner l’aide en ligne :
`
´
`
premiere ligne de commentaire immediatement apres la
´
´
declaration, la ”H1-line” (utilisee par les commandes d’aide
help ou lookfor)
autres commentaires. . .

3

´
declaration des variables globales ou statiques s’il y en a
´
´
(les variables statiques sont immuables et declarees par le
´
mot-cle persistent),

4

´
ecriture du code proprement dit de la fonction et
´
commentaires associes,

5

`
`
penser a affecter des valeurs a chaque argument de sortie,

6

´
´
fin de fonction signalee par le mot-cle endfunction.
Rodolphe Charrier

`
Introduction a Octave
Les fonctions V
Exemple
´
`
Ecriture d’une fonction renvoyant un vecteur (a tester) :
function [somme,produit]=fsomprod(a,b)
%FSOMPROD somme et produit de 2 nombres, vecteurs ou matrices
%
Usage: [S,P]=FSOMPROD(V1,V2)
%
Retourne matrice S contenant la somme de V1 et V2,
%
et matrice P contenant le produit de V1 et V2
´l´ment par ´l´ment
%
e e
e e
%
if (nargin˜=2) % donne le nombre d’arguments d’entr´e
e
% message d’erreur si on a pas 2 arguments
error(’cette fonction attend 2 arguments’);
endif
if (˜ isequal(size(a),size(b)))
error(’les 2 arg. n’ont pas la mˆme dimension’);
e
endif
somme=a+b;
produit=a.*b; % produit ´l´ment par ´l´ment !
e e
e e
endfunction
% sortie de la fonction

Rodolphe Charrier

`
Introduction a Octave
Les fonctions VI

´
Fonctions recursives
´
Ecrire la fonction ci-dessous dans un fichier ”facto.m” et faire
´
ˆ
des tests d’execution sous Octave en se placant dans le meme
¸
dossier que le script.
function p=facto(n)
if n<=1
p=1;
else
p=n*facto(n-1);
endif
endfunction

Rodolphe Charrier

`
Introduction a Octave
Utiliser une fonction comme argument d’une autre
fonction I
Pointeurs sur des fonctions
ˆ
Une fonction est elle-meme une variable du type ”function”.
@ suivi du nom de la fonction donne un pointeur sur la
fonction.
´
Usage : comme entree d’une autre fonction
´
´
`
ex : quad (integration) ou lsode (resolution de systeme
dynamique)
´
L’exemple suivant montre l’integration d’un sin sur [0, π] :
>>>f1 = @sin;
>>>quad (f1, 0, pi)
ans = 2
>>> feval(f1,pi/4)
ans = 0.70711
>>> f1(pi/4)
ans = 0.70711
Rodolphe Charrier

`
Introduction a Octave
Utiliser une fonction comme argument d’une autre
fonction II

Fonctions anonymes
´ ´
Syntaxe de generation d’une fonction anonyme :
@(liste d’arguments) expression
´
´
Executer ces quelques exemples tires de la doc Octave :
>>>
>>>
>>>
>>>
>>>

´
f = @(x) x.ˆ2; % permet egalement de d´finir f
e
quad(f,0,10)
quad (@(x) sin (x), 0, pi) % en fonction anonyme
a = 1; b = 2; % les param`tres sont valu´s
e
e
quad (@(x) betainc (x, a, b), 0, 0.4)

Rodolphe Charrier

`
Introduction a Octave
Utiliser une fonction comme argument d’une autre
fonction III
Construction dynamique de fonctions
´
`
Definition d’une fonction ”in-line” par une chaine de caracteres :
>>> f = inline("xˆ2 + 2");
>>>f(2)
ans = 6

`
´
Conversion de chaˆne de caracteres en expression evaluable
ı
´
ou en instructions executables : fonction eval
fonction = input(’Quelle est la fonction y=fct(x) ` tracer ?’,’s’);
a
min_max = input(’Indiquez [xmin xmax] : ’);
x = linspace(min_max(1),min_max(2),100);
eval(fonction,’error(’’fonction incorrecte’’)’);
plot(x,y);

La fonction feval, comme fplot (cf. diapo suivante), prend
´
un pointeur de fonction en entree.
Rodolphe Charrier

`
Introduction a Octave
Graphisme I
http:
//enacit1.epfl.ch/cours_matlab/graphiques.html
`
´
Complements (a tester)
fplot prend un pointeur de fonction ou une fonction
´
”in-line” en entree :
function [y]=sigmoid(x)
y=1./(1 + exp(-20 .* (x - 0.25)));
endfunction
%
fplot(@sigmoid, [0, 1], ’r’);

´ ´
ˆ
ezplot trace une fonction parametree en 3D par le meme
`
parametre :
>>>ezplot3(’t*sin(t)’,’t*cos(t)’,’t’,[0,10*pi]);

Rodolphe Charrier

`
Introduction a Octave
´
`
´
Modelisation et systemes differentiels I

´
´
Matlab/Octave permet de resoudre numeriquement des
´
´
equations differentielles par approximation.
´
`
Soit une equation avec une condition initiale (probleme de
Cauchy) :

 du(t)
= f (t, u(t))
 dt
u(t0 ) =
u0
ou u : R → Rn , u0 ∈ Rn et f : R × Rn → Rn .
`

Rodolphe Charrier

`
Introduction a Octave

(1)
´
`
´
Modelisation et systemes differentiels II

La fonction lsode est la fonction Octave qui va permettre de
´
`
´
calculer une solution numerique, c’est a dire de l’integrer sur un
´
intervalle demarrant en t0 , en partant du vecteur colonne u0 .
´
Pour cela, il faut commencer par definir la fonction f du
`
´
´
probleme de Cauchy decrit ci-dessus (1). On la definit comme
une fonction Octave classique :
function [f] = SecondMembreEDO(u,t)
// on d´crit ici les composantes de f
e
endfunction

Rodolphe Charrier

`
Introduction a Octave
´
`
´
Modelisation et systemes differentiels III

Remarque
ˆ
`
´
Meme si la fonction f est autonome (c’est a dire independante
ˆ
de t), il faudra quand meme mettre t comme second argument
´
`
de f (ou toute autre variable definissant le parametre
´
d’evolution).

Rodolphe Charrier

`
Introduction a Octave
´
`
´
Modelisation et systemes differentiels IV
Exemple
`
´
On considere l’equation de Van der Pol :
y = c(1 − y 2 )y − y
`
que l’on reformule classiquement comme un systeme de deux
´
´
equations differentielles du premier ordre, en posant
u1 (t) = y (t)
u2 (t) = y (t)
`
´
Soit le systeme equivalent
d
dt

u1 (t)
u2 (t)

=

u2 (t)
2
c(1 − u1 (t))u2 (t) − u1 (t)

Rodolphe Charrier

`
Introduction a Octave
´
`
´
Modelisation et systemes differentiels V
´
Ce que l’on decrit par la fonction Octave suivante, en fixant
c = 0.4 :
function [f] = vanDerPol(u,t)
f(1)=u(2)
f(2)=0.4*(1-u(1)ˆ2)*u(2) - u(1)
endfunction

´
´
´
´
Pour resoudre numeriquement l’equation, il faut donc definir
`
une distribution uniforme de valeurs de t sur un intervalle, a
partir de t0 , et une condition initiale pour les variables u. On
appelle ensuite la fonction lsode ainsi :
t = linspace(t0,T,m);
[U] = lsode("vanDerPol",u0, t);

´
`
On recupere alors une matrice U telle que U(i, j) est la solution
´
approchee de ui (t(j)).

Rodolphe Charrier

`
Introduction a Octave
´
`
´
Modelisation et systemes differentiels VI
printf("R´solution d’une ´quation de Van der Pol.n");
e
e
% d´claration de la fonction en second membre
e
function [f] = vanderpol(u,t)
f(1)=u(2);
f(2)=0.4*(1-u(1)ˆ2)*u(2)-u(1);
endfunction
% trac´ des lignes de champ
e
clf;
[x, y] = meshgrid (-5:0.5:5);
h = quiver (x, y, y, 0.4*(1-x.ˆ2).*y-x,0.5);
set (h, "maxheadsize", 0.1);
hold on;
% calcul de la solution avec la condition initiale :
m=500;
T=30;
t=linspace(0,T,m);
u0 = [-2.5; 2.5];
% marquage de la condition initiale
plot(u0(1),u0(2),’b*’);

Rodolphe Charrier

`
Introduction a Octave
´
`
´
Modelisation et systemes differentiels VII

%affichage de la solution
[u] =lsode("vanderpol",u0,t);
plot(u(:,1),u(:,2),’r’);
%titre, l´gendes, etc...
e
title(’Equation de Van Der Pol : plan de phase (y(t), dy(t)/dt)’);
xlabel(’y(t)’); ylabel(’dy(t)/dt’);
hold off;
figure;
plot(t,u);
legend(’y(t)’,’dy(t)/dt’);

Rodolphe Charrier

`
Introduction a Octave
´
`
´
Modelisation et systemes differentiels VIII

´
´
Figure: Trace du champ de vecteur et de la solution de l’equation de
Van der Pol

Rodolphe Charrier

`
Introduction a Octave

Más contenido relacionado

La actualidad más candente

Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Mamadou Oury Ba
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieLoic Yon
 
mis
mismis
misISIG
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage CAbdoulaye Dieng
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en JavaAziz Darouichi
 
Vbisigk
VbisigkVbisigk
VbisigkISIG
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Visual studio
Visual studioVisual studio
Visual studioISIG
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Ruau Mickael
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?Ruau Mickael
 

La actualidad más candente (20)

Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
mis
mismis
mis
 
Memo java
Memo javaMemo java
Memo java
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en Java
 
Tp 1 introduction à matlab
Tp 1 introduction à matlabTp 1 introduction à matlab
Tp 1 introduction à matlab
 
Vbisigk
VbisigkVbisigk
Vbisigk
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Visual studio
Visual studioVisual studio
Visual studio
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Ch11
Ch11Ch11
Ch11
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?
 

Destacado (20)

Saisine du conseil des prud’hommes
Saisine du conseil des prud’hommesSaisine du conseil des prud’hommes
Saisine du conseil des prud’hommes
 
Guirado
GuiradoGuirado
Guirado
 
Magasin Dhommes1
Magasin Dhommes1Magasin Dhommes1
Magasin Dhommes1
 
50 Moments Unique
50 Moments Unique50 Moments Unique
50 Moments Unique
 
Audience Sites Web Avril
Audience Sites Web AvrilAudience Sites Web Avril
Audience Sites Web Avril
 
India
IndiaIndia
India
 
Web 2.0 Diplomado
Web 2.0 DiplomadoWeb 2.0 Diplomado
Web 2.0 Diplomado
 
Yoan
YoanYoan
Yoan
 
La Blonde
La BlondeLa Blonde
La Blonde
 
Echecscolaire
EchecscolaireEchecscolaire
Echecscolaire
 
Formation : que sont devenus les bénéficiaires en 2013 ?
Formation : que sont devenus les bénéficiaires en 2013 ?Formation : que sont devenus les bénéficiaires en 2013 ?
Formation : que sont devenus les bénéficiaires en 2013 ?
 
Integración de Pymes
Integración de PymesIntegración de Pymes
Integración de Pymes
 
Faltas de acentuación
Faltas de acentuaciónFaltas de acentuación
Faltas de acentuación
 
Politique Européenne des déchets - aperçu sur les enjeux liés à la gestion de...
Politique Européenne des déchets - aperçu sur les enjeux liés à la gestion de...Politique Européenne des déchets - aperçu sur les enjeux liés à la gestion de...
Politique Européenne des déchets - aperçu sur les enjeux liés à la gestion de...
 
Robertson Cegep Autonomie V2 9juin09
Robertson Cegep Autonomie V2 9juin09Robertson Cegep Autonomie V2 9juin09
Robertson Cegep Autonomie V2 9juin09
 
Gamme abri-jardin-pvc
Gamme abri-jardin-pvcGamme abri-jardin-pvc
Gamme abri-jardin-pvc
 
Reunion Web
Reunion WebReunion Web
Reunion Web
 
Rapport d'activité
Rapport d'activitéRapport d'activité
Rapport d'activité
 
Liderazgo
LiderazgoLiderazgo
Liderazgo
 
Veille economie numerique 190511
Veille economie numerique 190511Veille economie numerique 190511
Veille economie numerique 190511
 

Similar a Slides octave1

IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxRuau Mickael
 
Owf 2013 rii panorama leroy
Owf 2013 rii panorama leroyOwf 2013 rii panorama leroy
Owf 2013 rii panorama leroyPatrick MOREAU
 
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxRuau Mickael
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Ruau Mickael
 
Explication du micro
Explication du microExplication du micro
Explication du microlouminho
 
Mat lab1
Mat lab1Mat lab1
Mat lab1fouadDD
 
js---Partie1----.pdf
js---Partie1----.pdfjs---Partie1----.pdf
js---Partie1----.pdfMiRA452885
 
Cours 1 bases de matlab 2eme annees
Cours 1   bases de matlab 2eme anneesCours 1   bases de matlab 2eme annees
Cours 1 bases de matlab 2eme anneesTarik Taleb Bendiab
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3PGambette
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 
Scilab pour les vrais débutants
Scilab pour les vrais débutantsScilab pour les vrais débutants
Scilab pour les vrais débutantsScilab
 

Similar a Slides octave1 (20)

Tp1 matlab
Tp1 matlab Tp1 matlab
Tp1 matlab
 
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
 
Owf 2013 rii panorama leroy
Owf 2013 rii panorama leroyOwf 2013 rii panorama leroy
Owf 2013 rii panorama leroy
 
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
 
Explication du micro
Explication du microExplication du micro
Explication du micro
 
Cours de Matlab
Cours de MatlabCours de Matlab
Cours de Matlab
 
Mat lab1
Mat lab1Mat lab1
Mat lab1
 
js---Partie1----.pdf
js---Partie1----.pdfjs---Partie1----.pdf
js---Partie1----.pdf
 
Cours tp2
Cours tp2Cours tp2
Cours tp2
 
Scilab command
Scilab commandScilab command
Scilab command
 
Lustre
LustreLustre
Lustre
 
Langage vhdl
Langage vhdlLangage vhdl
Langage vhdl
 
µP
µPµP
µP
 
Tp 1 introduction à matlab
Tp 1 introduction à matlabTp 1 introduction à matlab
Tp 1 introduction à matlab
 
Cours 1 bases de matlab 2eme annees
Cours 1   bases de matlab 2eme anneesCours 1   bases de matlab 2eme annees
Cours 1 bases de matlab 2eme annees
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
Scilab pour les vrais débutants
Scilab pour les vrais débutantsScilab pour les vrais débutants
Scilab pour les vrais débutants
 
Initiation r
Initiation rInitiation r
Initiation r
 

Último

gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 

Último (10)

gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 

Slides octave1

  • 1. ` Introduction a Octave Rodolphe Charrier UFRST ´ Universite du Havre M1 Math-Info MATIS Rodolphe Charrier ` Introduction a Octave
  • 2. Apercu et environnement I ¸ GNU Octave est le logiciel libre offrant actuellement la ´ meilleure compatibilite avec le logiciel commercial de calcul ´ numerique Matlab. Version 3.2 sous linux Ubuntu (existe aussi sur Mac et Windows). Octave est : ´ ´ un langage interprete converti en P-code (pseudo code Matlab), ´ utilisable en ligne de commande ou par execution de ´ scripts stockes dans des ”M-files” (extension ”.m”), ´ ´ ´ dote de fonctionnalites de haut niveau - developpement ”rapide”. Rodolphe Charrier ` Introduction a Octave
  • 3. Apercu et environnement II ¸ ´ Octave est un langage de programmation associe une riche ´ collection d’algorithmes numeriques : ` ´ algebre lineaire et matriciel ˆ polynomes et fonctions rationnelles interpolation et approximation ´ ´ optimisation lineaire, quadratique et non lineaire EDO / EDP ˆ Controle classique et robuste Traitement du signal Statistiques Graphisme 2D/3D ... Rodolphe Charrier ` Introduction a Octave
  • 4. Apercu et environnement III ¸ ´ Octave est fourni ici avec l’IDE QtOctave qui permet l’edition de ´ ´ ˆ scripts, leur execution et debuggage, les requetes en ligne de ´ ´ commande, l’aide en ligne, des menus de fonctions dediees, etc . . . Le lancement de QtOctave depuis le menu programme d’Ubuntu lance automatiquement Octave dans une console et ´ ´ ´ un editeur integre. Rodolphe Charrier ` Introduction a Octave
  • 5. Apercu et environnement IV ¸ Rodolphe Charrier ` Introduction a Octave
  • 6. Obtenir de l’aide I Dans la console d’Octave : doc fonction ou help fonction lance une aide sur ´ ´ la fonction specifiee, la commande lookfor mot-cl´ recherche l’occurrence e ´ ` du mot-cle dans toutes les premieres lignes des textes d’aide l’option lookfor -all mot-cl´ cherche dans tout le e texte de l’aide. ` ` Une des manieres les plus completes d’obtenir de l’aide est d’ouvrir le menu Help/Octave Help de QtOctave. Une ˆ ´ ´ fenetre dediee s’ouvre alors. Rodolphe Charrier ` Introduction a Octave
  • 7. Obtenir de l’aide II Dans cette aide, on trouve aussi des exemples de codes et des ´ demonstrations. Enfin une aide dynamique est aussi disponible dans le menu Help de QtOctave. Rodolphe Charrier ` Introduction a Octave
  • 8. Obtenir de l’aide III ˆ ´ Elle ouvre une fenetre complementaire qui fournit des ´ ` informations interessantes a la saisie dans l’une quelconque ˆ des fenetres ouvertes. Rodolphe Charrier ` Introduction a Octave
  • 9. ´ Modes d’utilisation - console, editeur, batch processing I ˆ Octave s’utilise dans une fenetre console, au travers d’une boucle du type ´ ´ lecture-evaluation-resultat Taper les lignes de commandes suivantes successivement. Que constatez-vous? >>> s="Hello World!"; >>> disp(s); >>> s ` Les fleches ↑ et ↓ permettent une navigation dans l’historique des commandes. ` ´ La touche <TAB> lance un systeme de completion facilitant la saisie. Rodolphe Charrier ` Introduction a Octave
  • 10. ´ Modes d’utilisation - console, editeur, batch processing II Rodolphe Charrier ` Introduction a Octave
  • 11. ´ Modes d’utilisation - console, editeur, batch processing III ´ Execution de fichiers de scripts / commandes ´ ´ ´ ` ´ A partir de l’editeur integre a QtOctave ou d’un editeur externe, on peut construire un fichier de commandes avec l’extension ”.m”. ´ ´ On pourra executer ce script par l’une des methodes suivantes : ˆ ´ depuis le menu Run/Run de la fenetre d’edition de QtOctave, par la commande Octave source("nomDuScript.m") dans le dossier du script, en tapant directement le nom du script (sans extension) depuis le dossier du script dans la console de commande. Rodolphe Charrier ` Introduction a Octave
  • 12. ´ Modes d’utilisation - console, editeur, batch processing IV Mode batch On peut lancer Octave en mode batch : ´ pour disposer d’un environnement simplifie (sans ˆ fenetrage), pour lancer en externe des fichiers de scripts Commande de base : octave --silent monScript.m >Resultats.txt lance le script sur Octave (sans afficher les messages ` ´ d’ouverture Octave), quitte automatiquement apres execution ´ ` ´ ´ et recupere eventuellement le resultat dans le fichier Resultats.txt. Rodolphe Charrier ` Introduction a Octave
  • 13. ´ Modes d’utilisation - console, editeur, batch processing V ´ ´ On peut egalement rendre executable un script en rajoutant en ˆ ` en-tete la ligne suivante donnant le chemin d’acces absolu au binaire Octave : #!usr/bin/octave --silent ´ puis l’executer dans un terminal de commande avec la ´ sequence suivante : $ chmod u+x script.m $./script.m > Resultats.txt Rodolphe Charrier ` Introduction a Octave
  • 14. ´ ´ Elements de base - types de donnees, variables, ´ operations I Tout est matrice dans Octave! ´ ´ Malgre cette remarque, nous allons commencer par decrire des ´ types de donnees simples (des matrices 1x1) avant de passer ´ ´ aux aspects plus generaux de traitement de matrices. Rodolphe Charrier ` Introduction a Octave
  • 15. ´ ´ Elements de base - types de donnees, variables, ´ operations II ´ Reels ´ ´ ´ Les reels sont codes sur 64 bits (double precision) avec 16 chiffres significatifs au maximum dans l’intervalle : [10−308 , 10+308 ] ` la fonction de conversion single() permet de ramener a ´ une simple precision, ´ ´ ! ! : certains operateurs arithmetiques rendent des ´ ´ entiers lorsqu’ils sont en presence d’entiers et de reels. ⇒Utiliser la fonction double( )pour convertir les entiers ´ en reels. Rodolphe Charrier ` Introduction a Octave
  • 16. ´ ´ Elements de base - types de donnees, variables, ´ operations III Entiers Les entiers sont obtenus via des fonctions de conversion vers un encodage en 8, 16, 32 ou 64 bits : ´ int8, int16, int32, int64 pour les entiers signes uint8, uint16, int32, uint64 pour les entiers non ´ signes. Rodolphe Charrier ` Introduction a Octave
  • 17. ´ ´ Elements de base - types de donnees, variables, ´ operations IV Nombres complexes ´ i, imaginaire pur dont le carre vaut -1, ´ ´ ´ partie reelle (reel) + i partie imaginaire (reel), ´ des fonctions specifiques manipulent les nombres complexes : >>> z1=5+6i z1 = 5 + 6i >>> real(z1) ans = 5 >>> imag(z1) ans = 6 >>> conj(z1) ans = 5 - 6i Rodolphe Charrier ` Introduction a Octave
  • 18. ´ ´ Elements de base - types de donnees, variables, ´ operations V Noms de variables Un nom de variable sous Octave commence par une lettre puis par au choix : des lettres de l’alphabet en minuscules ou majuscules, ´ avec differenciation de ces deux types (”case sensitive”) ` des nombres de 0 a 9 ` un caractere ` ´ ` ` Le nombre de caracteres utilisables est limite a 63 caracteres sur Matlab/Octave. ´´ ´ ´ Les variables une fois creees resident en memoire dans le ”Workspace” d’Octave. Rodolphe Charrier ` Introduction a Octave
  • 19. ´ ´ Elements de base - types de donnees, variables, ´ operations VI ´ Manipulation de variables numeriques ´ ´ ´ L’operateur d’affectation est represente par un seul signe = ´ ´ ´ (== designe l’operateur booleen de comparaison). >>> x=1 x= 1 >>> x=x*2 x= 2 Tester l’usage du point-virgule ;. ´ ´ Exemples d’operateurs arithmetiques : ´ ´ ´ ´ xˆ2 ou x ∗ ∗2 designe l’elevation au carre x/y = xy −1 xy = x −1 y Rodolphe Charrier ` Introduction a Octave
  • 20. ´ ´ Elements de base - types de donnees, variables, ´ operations VII Commentaires et lignes de continuation ` Un commentaire commence par le caractere %, ´ Un bloc entier est encadre par %{ et %} , ´ Une ligne se terminant par ... sera prolongee par la ligne suivante. Exemples : >>> % >>> x >>> + >>> + x= 6 c’est un commentaire = 1 ... 2 ... 3 Rodolphe Charrier ` Introduction a Octave
  • 21. ´ ´ Elements de base - types de donnees, variables, ´ operations VIII ´ ´ ´ Fonctions mathematiques elementaires Rodolphe Charrier ` Introduction a Octave
  • 22. ´ ´ Elements de base - types de donnees, variables, ´ operations IX La plupart de ces fonctions prennent un argument et en ´ ` retourne un autre. Elles sont ”vectorisees”, c’est-a-dire qu’elles manipulent des matrices. Exemple : Tester les commandes ci-dessous >>> >>> >>> >>> >>> x = cos(2) y = sin (2) xˆ2 + yˆ2 ans*2 z=sin([x y]) ´ La variable ans stocke l’evaluation de l’expression courante et ´ est reutilisable. Rodolphe Charrier ` Introduction a Octave
  • 23. ´ ´ Elements de base - types de donnees, variables, ´ operations X ´ ´ ´ Variables mathematiques predefinies ´ Dans Matlab/Octave, plusieurs variables mathematiques sont ´ efinies : ´ pred Rodolphe Charrier ` Introduction a Octave
  • 24. ´ ´ Elements de base - types de donnees, variables, ´ operations XI ´ Booleens ´ Les booleens sont des variables qui peuvent prendre deux valeurs, false ou 0, et true ou 1 (ou dans certains cas de ´ conditions logiques toute valeur differente de 0) . ´ ´ 0perateurs booleens : Rodolphe Charrier ` Introduction a Octave
  • 25. ´ ´ Elements de base - types de donnees, variables, ´ operations XII fonctions logiques : Rodolphe Charrier ` Introduction a Octave
  • 26. ´ ´ Elements de base - types de donnees, variables, ´ operations XIII ` Chaˆnes de caracteres ı ´ ´ Elles sont delimitees sous Matlab/Octave par des apostrophes : >>> x = ’coucou’ x = coucou ` Une chaˆne de caracteres est un vecteur ligne ce qui explique ı ´ que la concatenation se fasse par la mise entre crochets [ ] : >>> [’bonjour ’ ’tout le monde’] ans = bonjour tout le monde Rodolphe Charrier ` Introduction a Octave
  • 27. ´ ´ Elements de base - types de donnees, variables, ´ operations XIV ´ La fonction de concatenation strcat(chaine1,chaine2,...) supprime les espaces blancs. Cf. doc Octave pour les fonctions de manipulation. ´ ´ ` Une specificite d’Octave par rapport a Matlab est d’accepter ´ ´ ´ ´ egalement les chaˆnes declarees entre guillemets integrant des ı ` ´ caracteres speciaux : t pour la tabulation ` n pour le passage a la ligne. ´ Ainsi executer la commande : >>> disp("Ce texte n s’affiche sur 2 lignes avec une ttabulation") Rodolphe Charrier ` Introduction a Octave
  • 28. Matrices et vecteurs I Construction d’une matrice : ´ ´ delimitee par des crochets ouvrant [ et fermant ], ´ ´ ˆ ´ ´ elements d’une meme ligne sont separes par des blancs ou des virgules, ´ points virgules ; pour separer les lignes. Rodolphe Charrier ` Introduction a Octave
  • 29. Matrices et vecteurs II Exemples ´ Executer les commandes successives suivantes dans la console Octave : >>> A = [ 1 1 1; 2 4 8; 3 9 27] %renvoie la taille de la matrice : >>>size(A) >>> y = [1 + i, - 3 * i, -1] %vecteur transpos´ de y : e >>>y’ % matrice transpos´e de A : e >>> A’ %renvoie d’un ´l´ment de A : e e >>> A(2,2) %renvoie la deuxi`me ligne de A : e >>> A(2,:) % renvoie les deuxi`me et troisi`me lignes de A : e e >>>A(2:3,:) Rodolphe Charrier ` Introduction a Octave
  • 30. Matrices et vecteurs III ´ ´ Generation automatique % G´n´ration d’un vecteur ligne g´n´r´ par s´rie lin´aire. e e e e e e e % L’incr´ment est en position milieu pour chaque vecteur ligne e % t peut ˆtre un nombre d´cimal e e >>>x=1:1:3 >>>u=1:0.5:3 % g´n´ration d’une matrice ` l’aide de 3 vecteurs lignes : e e a >>>B=[1:1:3 ; 1:3:9 ; 9:-1:7] %vecteur ligne g´n´r´ par la fonction linspace : e e e >>>v=linspace(-1,3,5) Rodolphe Charrier ` Introduction a Octave
  • 31. Matrices et vecteurs IV ´ Construction de matrices specifiques Tester les fonctions de construction de matrices suivantes et ´ ´ retrouver leur specificite : ´ ´ (On reprendra la matrice A et les variables precedentes) >>> >>> >>> >>> >>> >>> >>> >>> I = eye(4,4) Y = diag(y) a = diag(A) J = zeros(3,4) K = ones(3,4) B=triu(A) C= tril(A) R = rand (3,4) Rodolphe Charrier ` Introduction a Octave
  • 32. Visualiser un graphe simple I On va construire le graphe de la fonction y = e−x sin(4x) pour x ∈ [0, 2π] ´ On commence alors par creer un maillage de l’intervalle [0, 2π] avec la fonction linspace : -->x=linspace(0,2*pi,101); x est alors un vecteur de 101 valeurs pour donner 100 intervalles. On calcule ensuite les valeurs de la fonction pour chaque composante du vecteur x : >>>y=exp(-x).*sin(4*x); Rodolphe Charrier ` Introduction a Octave
  • 33. Visualiser un graphe simple II ´ ´ ´ La notation pointee de l’operateur arithmetique permet de ´ ´ ´ ´ ´ traiter l’operation element par element sur les matrices. ´ Le trace du graphique se fait alors par l’instruction plot : >>>plot(x,y) >>>title(’y=exp(-x)*sin(4x)’) % le titre du trac´ e L’instruction permet de tracer une courbe passant par les points ´ ´ dont les coordonnees sont donnees dans les vecteurs x pour ´ ´ les abscisses, et y pour les ordonnees. Les points sont relies par des segments de droites. Rodolphe Charrier ` Introduction a Octave
  • 34. Visualiser un graphe simple III Rodolphe Charrier ` Introduction a Octave
  • 35. ´ ´ Ecrire et executer un script I ´ L’ecriture de scripts Octave/Matlab (”M-files”) peut se faire dans ´ ˆ ´ ´ l’editeur de QtOctave et peut etre execute depuis cet ´ environnement dans le menu Run de l’editeur. Voici un petit exemple que l’on nommera ”script1.m” : % mon premier script Octave a = input(’ Rentrer la valeur de a : ’); b = input(’ Rentrer la valeur de b : ’); n = input(’ Nb d’intervalles n : ’); % calcul des abscisses x = linspace(a,b,n+1); % calcul des ordonn´es e y = exp(-x).*sin(4*x); % repr´sentation graphique e plot(x,y); xlabel(’x’); % label sur les abscisses ylabel(’y’); % label sur les ordonn´es e title(’y=exp(-x)*sin(4x)’); Rodolphe Charrier ` Introduction a Octave
  • 36. ´ Entrees-sorties-fichiers I ´ Principales fonctions (tire de http://enacit1.epfl.ch/ cours_matlab/mfiles.html#entrees_sorties) : Rodolphe Charrier ` Introduction a Octave
  • 37. ´ Entrees-sorties-fichiers II Saisie clavier Une saisie au clavier utilise la commande input. Tester les saisies ci-dessous >>> n=input(’entrer la dimension n’) >>> A=input(’entrer une matrice’) >>> nomfichier=input(’Donner le nom du fichier’,’s’) ´ Analyse automatique du type entre. ` Lorsque c’est une chaˆne de caracteres, on rajoute ’s’ en ı ` parametre. Rodolphe Charrier ` Introduction a Octave
  • 38. ´ Entrees-sorties-fichiers III Affichage sur la sortie standard La commande disp n’affiche qu’une seule variable/chaˆne de ı ` ` caractere a la fois. >>> A=[1, 2; 3, 4] >>> disp(A) ´ ´ L’instruction ”fprintf” qui est en fait celle qui est heritee du langage C (ici en absence d’identifiant de fichier, c’est la sortie ´ standard qui est utilisee). Ex : >>> a=64; b=sin(a); >>> fprintf(’le sinus de %2.f n est %f ’,a,b) le sinus de 64 est 0.920026 Noter le format des nombres. Rodolphe Charrier ` Introduction a Octave
  • 39. ´ Entrees-sorties-fichiers IV ´ Manipulation de donnees matricielles dans des fichiers ´ dlmread met les donnees lues dans une matrice (avec ´ ´ eventuellement un delimiteur). ´ ´ Ecrire quelques donnees en lignes et colonne dans un ´ fichier donnees.txt puis executer le script suivant : >>> M=dlmread(’donnees.txt’); >>> disp(M); >>> M2=dlmread(’donnees.txt’," ",[0,0,4,4]) ` La derniere instruction renvoie la sous-matrice des valeurs ´ ´ ´ ´ comprises entre l’element (0,0) et l’element (4,4), le ´ separateur un espace blanc. ´ ´ dlmwrite ecrit les donnees d’une matrice dans un fichier : >>> dlmwrite(’donnees.txt’, M, "-append"); ´ Le dernier argument (”-append”) signale une ecriture en fin de fichier. Rodolphe Charrier ` Introduction a Octave
  • 40. ´ Entrees-sorties-fichiers V ´ Lecture formatee dans un fichier Soit le fichier texte ’data.txt’ suivant : 101 Martin Cahier 2 3.50 102 Charrier Crayon 5 2.95 ´ Procedure de lecture sur un fichier : boucle qui termine avec le signal de fin de fichier rendu par la fonction feof. % fopen : le mode d’ouverture est indiqu´ par le second argument e % ’r’ lecture; ’w’ ´criture; ’a’ ajout en fin) e data_id = fopen(’data.txt’, ’r’) ; no = 1 ; while not(feof(data_id)) % lecture des ´l´ments 1 ` 1 (dernier argument de fscanf) e e a No_client(no) = fscanf(data_id,’%u’,1) ; Nom{no,1} = fscanf(data_id,’%s’,1) ; Article{no,1} = fscanf(data_id,’%s’,1) ; Nb_articles(no) = fscanf(data_id,’%u’,1) ; Prix_unit(no) = fscanf(data_id,’%f’,1) ; no = no + 1 ; end status = fclose(data_id) ; Rodolphe Charrier ` Introduction a Octave
  • 41. ´ Entrees-sorties-fichiers VI ` ´ Rem : les chaˆnes de caracteres sont stockees dans des ı tableaux cellulaires (cf. doc). Principaux types de format : ´ %u et %d designent respectivement un entier positif ´ (naturel) et un entier relatif (positif ou negatif) ´ %f designe les flottants ´ ` %s designe les chaˆnes de caracteres ı Rodolphe Charrier ` Introduction a Octave
  • 42. ´ Entrees-sorties-fichiers VII ´ ´ Ecriture formatee dans un fichier ´ ´ ´ ´ On ecrit dans un fichier precedemment ouvert en ecriture via fprintf. ´ Tester le script suivant (si vous ne precisez aucun file id, on ´ ecrit sur la sortie standard) : >>> a=0:0.1:1; >>> b=sin(a); >>> fprintf(file_id, ’%1.2f %1.4f n’,[a;b]); ´ ´ Les formats peuvent integrer des specifications d’affichage (ici ` nombre avant et apres la virgule pour les flottants) Rodolphe Charrier ` Introduction a Octave
  • 43. La programmation en Scilab I If - instructions conditionnelles ´ Ecrire et executer le script suivant et modifier les valeurs de n pour tester : n=2; if (n==1) disp(’un’); elseif (n==2) disp(’deux’); else disp(’autre’); endif On peut enchaˆner plusieurs tests avec elseif. ı ´ ´ La condition logique de selection ne necessite pas de ` ´ parentheses. Il peut s’agir d’une matrice sur laquelle on verifie ´ ´ ´ que tous les elements ne sont pas faux (differents de 0). Rodolphe Charrier ` Introduction a Octave
  • 44. La programmation en Scilab II Switch - alternatives switch n case{1} disp(’un’); case{2} disp(’deux’); otherwise disp(’autre’); endswitch ´ ´ Seule l’instruction qui suit directement le case est executee si la comparaison est vraie. ´ otherwise est facultatif et sera effectue si tous les tests ´ ´ ´ ´ precedents ont echoues. Rodolphe Charrier ` Introduction a Octave
  • 45. La programmation en Scilab III Boucle for ´ ´ ´ ´ On utilise un index qui decrit un ensemble de valeurs, genere ´ souvent avec l’operateur deux-points ”:” . ´ ˆ ´ ´ L’iterateur de la boucle for peut etre plus generalement une ´ matrice, pour laquelle chaque iteration renvoie un vecteur colonne. Tester le script ci-dessous : for i=1:2:5 disp(i) endfor % sur une matrice for n=[1 5 2;4 4 4] n endfor Rodolphe Charrier ` Introduction a Octave
  • 46. La programmation en Scilab IV Remarque Quand cela est possible, on remplacera la boucle for par une ´ ` ´ operation matricielle, c’est a dire ”vectorisee” pour un gain en performance. Rodolphe Charrier ` Introduction a Octave
  • 47. La programmation en Scilab V Boucle While ´ ` ´ Une boucle ”while” repete une sequence d’instructions de ` ´ ` ´ maniere conditionnee a la verification d’une expression ´ booleenne. Tester le script ci-dessous qui calcule la somme des 10 premiers entiers : s=0; i=1; while (i<=10) s=s+i i=i+1 endwhile Tester cette autre facon de faire : ¸ >>>sum(1:10) ´ Comparez en augmentant le nombre utilise. Rodolphe Charrier ` Introduction a Octave
  • 48. La programmation en Scilab VI Break-Continue ´ break permet de sortir definitivement d’une boucle. ´ continue permet de sortir de l’iteration courante d’une boucle. ´ Comparer l’execution des deux scripts qui suivent. Break : s=0; i=1; while (true) if (i>10) break endif s=s+i i=i+1 endwhile Rodolphe Charrier ` Introduction a Octave
  • 49. La programmation en Scilab VII Continue : s=0; i=0; while (i<=10) if (modulo(i,2)==0) i=i+1 continue endif s=s+i i=i+1 endwhile Rodolphe Charrier ` Introduction a Octave
  • 50. Les fonctions I ´ ´ La demarche essentielle qui permet d’elaborer des ´ sur la decomposition ´ programmes en Scilab, est basee fonctionnelle. ´ ´ De nombreuses fonctions predefinies sont disponibles dans Octave. ˆ Un meme script peut comporter plusieurs fonctions qui peuvent s’appeler uniquement au sein du script. Remarque ` ´ Pour appeler une fonction a l’exterieur du script ou elle est ` ´ ˆ ´ ´ ` definie, celle-ci devra etre declaree en premiere ligne du script ´ ˆ et porter imperativement le meme nom que le fichier du script. Rodolphe Charrier ` Introduction a Octave
  • 51. Les fonctions II ´ Declaration - appel d’une fonction ´ Syntaxe de declaration d’une fonction : function [arg_sortie, ...]=ma_fonction(arg_entree, ...) ´ ` Les arguments sont passes par valeur a la fonction et non par ´ ´ reference. ´ L’appel ulterieur de la fonction se fait par la syntaxe suivante : % si un seul argument de sortie var_out=ma_fonction(var_in1, var_in2,...); % si plusieurs arguments de sortie [var_out1, var_out2...]=ma_fonction(var_in1, var_in2,...); ´ ´ ´ Les variables declarees dans la fonction ont une portee locale ` ´ a la fonction. Pour les rendre visibles de l’exterieur de la ´ ´ ´ ´ ´ fonction, il faudra les declarer precedee du mot-cle global. Rodolphe Charrier ` Introduction a Octave
  • 52. Les fonctions III Exemple ´ ´ ´ Fonction predefinie : decomposition LU d’une matrice ´ (executer les lignes d’instructions suivantes puis utiliser ”help” pour comprendre ce qu’elles font) >>>A=rand(3,3); >>>[L,U]=lu(A) >>>[L,U,P]=lu(A) Rodolphe Charrier ` Introduction a Octave
  • 53. Les fonctions IV ´ Ecriture de fonctions 1 2 ´ ´ Declarer la fonction (nom arguments d’entree / sortie), utiliser des commentaires pour renseigner l’aide en ligne : ` ´ ` premiere ligne de commentaire immediatement apres la ´ ´ declaration, la ”H1-line” (utilisee par les commandes d’aide help ou lookfor) autres commentaires. . . 3 ´ declaration des variables globales ou statiques s’il y en a ´ ´ (les variables statiques sont immuables et declarees par le ´ mot-cle persistent), 4 ´ ecriture du code proprement dit de la fonction et ´ commentaires associes, 5 ` ` penser a affecter des valeurs a chaque argument de sortie, 6 ´ ´ fin de fonction signalee par le mot-cle endfunction. Rodolphe Charrier ` Introduction a Octave
  • 54. Les fonctions V Exemple ´ ` Ecriture d’une fonction renvoyant un vecteur (a tester) : function [somme,produit]=fsomprod(a,b) %FSOMPROD somme et produit de 2 nombres, vecteurs ou matrices % Usage: [S,P]=FSOMPROD(V1,V2) % Retourne matrice S contenant la somme de V1 et V2, % et matrice P contenant le produit de V1 et V2 ´l´ment par ´l´ment % e e e e % if (nargin˜=2) % donne le nombre d’arguments d’entr´e e % message d’erreur si on a pas 2 arguments error(’cette fonction attend 2 arguments’); endif if (˜ isequal(size(a),size(b))) error(’les 2 arg. n’ont pas la mˆme dimension’); e endif somme=a+b; produit=a.*b; % produit ´l´ment par ´l´ment ! e e e e endfunction % sortie de la fonction Rodolphe Charrier ` Introduction a Octave
  • 55. Les fonctions VI ´ Fonctions recursives ´ Ecrire la fonction ci-dessous dans un fichier ”facto.m” et faire ´ ˆ des tests d’execution sous Octave en se placant dans le meme ¸ dossier que le script. function p=facto(n) if n<=1 p=1; else p=n*facto(n-1); endif endfunction Rodolphe Charrier ` Introduction a Octave
  • 56. Utiliser une fonction comme argument d’une autre fonction I Pointeurs sur des fonctions ˆ Une fonction est elle-meme une variable du type ”function”. @ suivi du nom de la fonction donne un pointeur sur la fonction. ´ Usage : comme entree d’une autre fonction ´ ´ ` ex : quad (integration) ou lsode (resolution de systeme dynamique) ´ L’exemple suivant montre l’integration d’un sin sur [0, π] : >>>f1 = @sin; >>>quad (f1, 0, pi) ans = 2 >>> feval(f1,pi/4) ans = 0.70711 >>> f1(pi/4) ans = 0.70711 Rodolphe Charrier ` Introduction a Octave
  • 57. Utiliser une fonction comme argument d’une autre fonction II Fonctions anonymes ´ ´ Syntaxe de generation d’une fonction anonyme : @(liste d’arguments) expression ´ ´ Executer ces quelques exemples tires de la doc Octave : >>> >>> >>> >>> >>> ´ f = @(x) x.ˆ2; % permet egalement de d´finir f e quad(f,0,10) quad (@(x) sin (x), 0, pi) % en fonction anonyme a = 1; b = 2; % les param`tres sont valu´s e e quad (@(x) betainc (x, a, b), 0, 0.4) Rodolphe Charrier ` Introduction a Octave
  • 58. Utiliser une fonction comme argument d’une autre fonction III Construction dynamique de fonctions ´ ` Definition d’une fonction ”in-line” par une chaine de caracteres : >>> f = inline("xˆ2 + 2"); >>>f(2) ans = 6 ` ´ Conversion de chaˆne de caracteres en expression evaluable ı ´ ou en instructions executables : fonction eval fonction = input(’Quelle est la fonction y=fct(x) ` tracer ?’,’s’); a min_max = input(’Indiquez [xmin xmax] : ’); x = linspace(min_max(1),min_max(2),100); eval(fonction,’error(’’fonction incorrecte’’)’); plot(x,y); La fonction feval, comme fplot (cf. diapo suivante), prend ´ un pointeur de fonction en entree. Rodolphe Charrier ` Introduction a Octave
  • 59. Graphisme I http: //enacit1.epfl.ch/cours_matlab/graphiques.html ` ´ Complements (a tester) fplot prend un pointeur de fonction ou une fonction ´ ”in-line” en entree : function [y]=sigmoid(x) y=1./(1 + exp(-20 .* (x - 0.25))); endfunction % fplot(@sigmoid, [0, 1], ’r’); ´ ´ ˆ ezplot trace une fonction parametree en 3D par le meme ` parametre : >>>ezplot3(’t*sin(t)’,’t*cos(t)’,’t’,[0,10*pi]); Rodolphe Charrier ` Introduction a Octave
  • 60. ´ ` ´ Modelisation et systemes differentiels I ´ ´ Matlab/Octave permet de resoudre numeriquement des ´ ´ equations differentielles par approximation. ´ ` Soit une equation avec une condition initiale (probleme de Cauchy) :   du(t) = f (t, u(t))  dt u(t0 ) = u0 ou u : R → Rn , u0 ∈ Rn et f : R × Rn → Rn . ` Rodolphe Charrier ` Introduction a Octave (1)
  • 61. ´ ` ´ Modelisation et systemes differentiels II La fonction lsode est la fonction Octave qui va permettre de ´ ` ´ calculer une solution numerique, c’est a dire de l’integrer sur un ´ intervalle demarrant en t0 , en partant du vecteur colonne u0 . ´ Pour cela, il faut commencer par definir la fonction f du ` ´ ´ probleme de Cauchy decrit ci-dessus (1). On la definit comme une fonction Octave classique : function [f] = SecondMembreEDO(u,t) // on d´crit ici les composantes de f e endfunction Rodolphe Charrier ` Introduction a Octave
  • 62. ´ ` ´ Modelisation et systemes differentiels III Remarque ˆ ` ´ Meme si la fonction f est autonome (c’est a dire independante ˆ de t), il faudra quand meme mettre t comme second argument ´ ` de f (ou toute autre variable definissant le parametre ´ d’evolution). Rodolphe Charrier ` Introduction a Octave
  • 63. ´ ` ´ Modelisation et systemes differentiels IV Exemple ` ´ On considere l’equation de Van der Pol : y = c(1 − y 2 )y − y ` que l’on reformule classiquement comme un systeme de deux ´ ´ equations differentielles du premier ordre, en posant u1 (t) = y (t) u2 (t) = y (t) ` ´ Soit le systeme equivalent d dt u1 (t) u2 (t) = u2 (t) 2 c(1 − u1 (t))u2 (t) − u1 (t) Rodolphe Charrier ` Introduction a Octave
  • 64. ´ ` ´ Modelisation et systemes differentiels V ´ Ce que l’on decrit par la fonction Octave suivante, en fixant c = 0.4 : function [f] = vanDerPol(u,t) f(1)=u(2) f(2)=0.4*(1-u(1)ˆ2)*u(2) - u(1) endfunction ´ ´ ´ ´ Pour resoudre numeriquement l’equation, il faut donc definir ` une distribution uniforme de valeurs de t sur un intervalle, a partir de t0 , et une condition initiale pour les variables u. On appelle ensuite la fonction lsode ainsi : t = linspace(t0,T,m); [U] = lsode("vanDerPol",u0, t); ´ ` On recupere alors une matrice U telle que U(i, j) est la solution ´ approchee de ui (t(j)). Rodolphe Charrier ` Introduction a Octave
  • 65. ´ ` ´ Modelisation et systemes differentiels VI printf("R´solution d’une ´quation de Van der Pol.n"); e e % d´claration de la fonction en second membre e function [f] = vanderpol(u,t) f(1)=u(2); f(2)=0.4*(1-u(1)ˆ2)*u(2)-u(1); endfunction % trac´ des lignes de champ e clf; [x, y] = meshgrid (-5:0.5:5); h = quiver (x, y, y, 0.4*(1-x.ˆ2).*y-x,0.5); set (h, "maxheadsize", 0.1); hold on; % calcul de la solution avec la condition initiale : m=500; T=30; t=linspace(0,T,m); u0 = [-2.5; 2.5]; % marquage de la condition initiale plot(u0(1),u0(2),’b*’); Rodolphe Charrier ` Introduction a Octave
  • 66. ´ ` ´ Modelisation et systemes differentiels VII %affichage de la solution [u] =lsode("vanderpol",u0,t); plot(u(:,1),u(:,2),’r’); %titre, l´gendes, etc... e title(’Equation de Van Der Pol : plan de phase (y(t), dy(t)/dt)’); xlabel(’y(t)’); ylabel(’dy(t)/dt’); hold off; figure; plot(t,u); legend(’y(t)’,’dy(t)/dt’); Rodolphe Charrier ` Introduction a Octave
  • 67. ´ ` ´ Modelisation et systemes differentiels VIII ´ ´ Figure: Trace du champ de vecteur et de la solution de l’equation de Van der Pol Rodolphe Charrier ` Introduction a Octave