Programmation Octave/Scripts et fonctions

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

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 connaît 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

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. À 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

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

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

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.