Programmation Octave/Scripts et fonctions

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Octave
L'étagère Informatique
et
Mathématiques.
Octave
Sommaire
Bibliographie
Autres cours
Modifier ce modèle

Octave permet de créer des fichier ".m" qui peuvent s'exécuter comme des fonctions par la suite. Il suffit pour cela d'entrer des lignes de commande dans un éditeur de texte puis l'enregistrer avec l'extension ".m".

Un exemple de programme récursif[modifier | modifier le wikicode]

Par exemple nous créons le fichier "factorielle.m" qui contient :

function[n] = factorielle(x)
if(x <= 1)
   n = 1;
else
   n = x*factorielle(x-1);
   x = x-1;
endif
endfunction

Ensuite nous nous plaçons dans le répertoire où nous avons créé le fichier avec la commande "cd" car Octave connait les commandes "cd" et "ls" (elles ont le même effet que si on les exécute dans un terminal). Et enfin on exécute le script en invoquant le nom de la fonction (qui est aussi le nom du fichier) :

octave>f = factorielle(2)
f = 2
octave> f = factorielle(10)
f = 3628800

Comme le script le laissait voir cette fonction calcule bien la factorielle du nombre.

Script pour résoudre un système d'équations non-linéaires[modifier | modifier le wikicode]

Voici un deuxième exemple de script sous Octave, il permet de résoudre un petit système d'équations non-linéaires à 2 variables x et y :

Il affiche aussi les courbes d'évolution des deux variables. A noter que d'une manière générale, un fichier de script d'Octave ne doit pas commencer par le mot-clé function. Les commentaires dans le script sont précédés d'un #.

printf("Résolution d'un système d'équations et affichage.\n");		
function xdot = f (x, t)
# Paramètres des équations :
r = 0.25;
k = 1.4;
a = 1.5;
b = 0.16;
c = 0.9;
d = 0.8;
# Définition du système à 2 équations :
xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
endfunction
# Conditions initiales des deux variables :
x0 = [1; 2];
# Définition du vecteur temps :
t = linspace (0, 50, 200);
# Résolution avec la routine lsode :
x = lsode ("f", x0, t);
# Affichage des deux courbes :
plot (t, x);

On l'appelle par exemple 'nonlin.m' et l'on exécute en tapant nonlin dans la ligne de commande Octave.

Boucles[modifier | modifier le wikicode]

Comme la plupart des langages de programmation le langage Octave est composé de plusieurs types de boucles.

While[modifier | modifier le wikicode]

La boucle while permet d'exécuter les instructions tant que la condition spécifiée est vraie. Par exemple :

 fib = ones (1, 10);
 i = 3;
 while (i <= 10)
    fib (i) = fib (i-1) + fib (i-2);
    i++;
 endwhile

donne les dix premiers nombres de Fibbonacci :

 octave>
 fib =
 
   1    1    2    3    5    8   13   21   34   55

For[modifier | modifier le wikicode]

La boucle for permet d’exécuter une instruction ou une suite d'instructions à partir d'une valeur initiale jusqu’à une valeur finale:

fib = ones (1, 10);
 for i = 3:10
    fib (i) = fib (i-1) + fib (i-2);
endfor

Le script précédent donne le même résultat que l'exemple de la section précédente.