TP Scilab

1. Scilab

Vous pouvez lancer le logiciel scilab en tapant scilab dans une fenetre shell (terminal). Une fenetre s'ouvrira avec une invite de commande. C'est dans cette fenetre que se feront tous les exercices suivants.

2. Définir des variables

Les variables sont définies directement par la syntaxe : nom=valeur. Testez la en déclarant plusieurs variables, contenant des valeurs entieres ou réelles.
Tapez juste le nom d'une variable précedemment définie pour en afficher le contenu. Chaque variable ainsi définie est conservée en mémoire et peut servir à des calculs ultérieurs.
Les opérateurs classiques * + / - ^ peuvent etre employés pour réaliser des calculs.

Entrer des matrices

Les variables peuvent également contenir des vecteurs ou des matrices. La facon la plus simple d'entrer une matrice (ou un vecteur ou un scalaire, qui ne sont que des cas particuliers de matrices) dans l'environnement scilab est de taper la liste de ses éléments en respectant la syntaxe suivante :

--> A=[1 2 3; -4 0 2; 17 8 -9]

--> A=[1,2,3,-4,0,2,17,8,-9]

--> A=[1,2,3;-4,0,2;17,8,-9]

Entrer une seconde matrice B quelconque de meme taille en ajoutant un ; à la fin de votre ligne. Qu'est ce qui a changé ?

On peut également entrer des valeurs complexes dans une matrice. Les éléments complexes s'écrivent sous la forme

2+3*%i
sont séparés par une virgule et chaque ligne par un ;
Entrer la matrice suivante :

1+i -2+3*i
-1       i
matrice identité, diagonales, extraction de la diagonale, matrices de zero et de uns

Certaines fonctions sont disponibles pour générer automatiquement des matrices types. Pour obtenir la matrice identité de dimension nxm, on peut écrire : I=eye(n,m)
Testez ce qui se passe si n > m, n=m, n < m.

Pour obtenir une matrice diagonale A, dont les éléments diagonaux sont formés des éléments d'un vecteur donné a, tapez : A = diag(a). Testez la fonction pour un vecteur a que vous choisirez.

Inversement, a = diag(A) extrait de la matrice A la diagonale principale sous la forme d'un vecteur colonne placé dans a.

Vous pouvez générer rapidement une matrice remplie de zero ou de un avec les fonctions ones(n,m) et zeros(n,m). Ces deux fonctions acceptent également une matrice comme argument (tout se passe alors comme si on avait donné les dimensions de la matrice argument). Testez chacune de ces fonctions.

matrice de nombres aléatoires

La fonction rand(n,m) permet de générer des matrices remplies de nombres pseudo-aléatoires.

Entrer des vecteurs

En plus des méthodes précédentes, vous pouvez définir des vecteurs dont les valeurs sont en progression arithmétique en utilisant la fonction linspace.

--> V = linspace(0,1,11)

linspace va créer dans cet exemple un vecteur de 11 valeurs allant linéairement de 0 a 1. Une instruction analogue permet de donner directement l'incrément, la valeur de départ et la borne d'arret :

--> V = 0:0.1:1 Lorsque l'incrément est égal à 1, on peut l'omettre : V=1:10

3. Quelques commandes

Testez sur des exemples chacune des fonctionnalités suivantes et assurez vous d'en comprendre le fonctionnement.

Commande Exemple Description
' V' Transposée d'une matrice, d'un vecteur
, ; M=[V,V], N=[V;V] Concaténation de matrices
(,) M(2,3), M(1,:) Renvoie un élément d'une matrice ou une sous-matrice

Le produit (*) et l'addition (+) de matrices sont possibles de meme qu'entre une matrice et un scalaire. Appliquer une fonction (comme sqrt par exemple) à une matrice, l'applique à tous ses éléments. Pour multiplier et diviser deux matrices de meme dimension A et B élément par élément, on emploie les opérateurs .* et ./

La notation x=M\y permet de résoudre le systeme linéaire Mx=y.
Tapez les commandes nécessaire pour résoudre le système suivant :

  x + 3*y - 6*z = 5
      3*y + 6*z = 3
2*x + 5*y - 5*z = 0

Tapez la commande who. Qu'affiche-t-elle ? Tapez clear, puis who. Qu'est-ce qui vient de changer ?

4. Tracer un graphe

Essayons de visualiser la fonction y= exp(-x) * cos(3x) pour x dans l'intervalle [0,2*pi[.

Nous commencons par définir un échantillonnage de l'intervalle x :

-->x=linspace(0,2*%pi,101);

Puis :

-->y=exp(-x)*cos(3*x);

Une erreur se produit. Pourquoi ? Que faut-il changer pour la corriger ?

--> plot(x,y,"b") plot dessine la courbe dans une nouvelle fenetre. (b désigne la couleur bleue)

--> xtitle("y=exp(-x).cos(3x)","x","y")

xtitle affiche une légende pour les axes et le nom du graphe.

5. Ecrire et executer un script

Une méthode plus conviviale pour conserver, éditer et relancer une suite de commandes tapées est de créer un script. Ouvrez l'editeur qui accompagne le logiciel scilab.

Ecrire vos commandes dans la fenetre d'edition, puis sauvez votre travail sous un nom de fichier avec une extension .sce

Pour charger votre script dans scilab, choisissez l'option de menu Execute > Load into Scilab

Exercice : Tracer le graphe de la fonction sin(x)/x pour x dans l'intervalle [0,4pi] (écrire un script)

6. Quelques exercices de programmation avec Scilab

Syntaxe boucle for : for variable=vecteur, suite d'instructions, end
Syntaxe boucle while : while condition, instruction1, ..., instructionN, end
Syntaxe des tests : if condition, then suite d'instructions, end
Syntaxe d'une fonction : function [y1,y2,y3,...ym]=nomdelafonction(x1,...,xn), suite d'instructions, endfunction

- Ecrire une fonction qui calcule les résultats de l'équation du second degré

- Ecrire le code d'une fonction chapeau phi(t,a,b,c) puis tracer la. (La fonction vaut 0 pour t<=a et t>=c, et 1 en t=b.)

- Ecrire une fonction qui calcule le produit vectoriel de deux vecteurs

- Ecrire une fonction qui évalue un polynome par la règle de Horner

- Ecrire une fonction qui calcule la suite de fibonacci (chaque terme est la somme des deux termes qui le précèdent)

- Ecrire une fonction qui effectue une recherche dichotomique dans un vecteur et renvoie le numero de l'intervalle trouvé et si la recherche a été fructueuse ou non. (on utilisera la fonction length(x) pour obtenir la longueur du vecteur x)

- Ecrire une fonction qui réalise un tri par insertion (à titre d'exercice car la fonction sort existe)