Auto Corr 1 - Scilab
Auto Corr 1 - Scilab
sous Scilab :
TP auto-correctifs I
III Graphiques 9
a) Utilisations de plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
b) Un exemple : l’application logistique . . . . . . . . . . . . . . . . . . . . . . . . 9
I Prise en main de scilab 1
Ces exercices auto-correctifs ne sont pas corrigés (ni notés) par vos enseignants, mais vous
disposez d’un corrigé détaillé pour chaque exercice, qui vous permettra d’évaluer et corriger
votre travail vous même. Mais il est important d’essayer avant de regarder la solution !
a=5+6
sqrt(12) //Avez-vous compris ce que fait sqrt ?
(1+%i)^3 //Avez-vous compris ce que représente %i ?
// A quoi sert le symbole ^ ?
2
Comme vous le voyez, nous avons rajouté des signes de commentaires (//) avant de mettre
quelques questions additionnelles. Ce genre de commentaires peuvent être utilisés dans votre
script (par exemple pour mettre la réponse à la question posée !) : ils n’auront aucun effet sur
l’exécution de la commande. Essayer par exemple de taper :
sqrt(12) //la fonction sqrt est...
Exercice 2 : Cet exercice propose un premier exemple d’écriture et d’exécution d’un script.
Ouvrez l’éditeur de texte et créez un fichier que vous enregistrerez dans votre dossier sous le
nom essai1.sce contenant le texte suivant :
A=rand(4,4);
b=ones(4,1);
x=inv(A)*b;
s=A*x-b;
x,s
Rappelons que l’on peut aussi exécuter le script à partir de la fenêtre de commande par :
exec(’essai1.sce’).
1) Quelle est la signification des fonctions rand() et ones() ? Ces fonctions sont issues de la
bibliothèque Scilab.
Exercice 3 :
Ouvrir l’éditeur Scipad et recopiez ce script :
n=12;
c=1;
for i=1:n
c=c*i;
end
Sauvez le fichier sous le nom titi.sce et exécutez-le. Tapez ensuite c et Enter/Entrée pour
afficher la valeur de la variable c.
function c=toto(n)
c=1;
for i=1:n
c=c*i;
end
endfunction
Enregistrer la fonction sous le nom toto.sci. Dans la fenêtre Scilab, appeler la fonction.
3) Que se passe-t-il ? Taper maintenant toto(4) (ou toto(5)...). Que réalise la fonction que
vous venez de créer ? Quelle fonction bien connue reconnaît-on ?
4) Essayez avec toto(-5). Que remarquez-vous ? (On s’occupera de cette question dans la
section suivante).
Pour le moment, un autre exercice simple sur les fonctions :
Exercice 5 : Un test pour voir si un nombre n est un entier est de regarder si ce nombre est
égal ou non à sa partie entière int(n). On veut s’assurer que le nombre n est un entier positif.
Pour cela, vous allez modifier la fonction toto précédente, de sorte que si n est négatif ou n
n’est pas entier, la fonction toto renvoie la valeur 0, et sinon, toto renvoie la valeur calculée
de c. Modifier la fonction toto.sce puis tester celle-ci sur différentes valeurs en entrée.
Exercice 6 : On veut écrire de plusieurs manières un script qui calcule la somme des n premiers
entiers : 1 + 2 + 3 + 4 + ... + n
1) Ecrire un script qui permet le calcul de la somme à l’aide d’une boucle for.
2) Même question avec une boucle while.
3) Ecrire une fonction sommetheorique qui renvoie la formule mathématique n*(n+1)/2.
4) Cette formule coïncide-t-elle avec la somme des n premiers entiers ?
II Vecteurs et matrices (I) 5
a) Construction de vecteurs
On dispose de différentes possibilités de construire un vecteur (appelév par la suite) :
– Lorsque la taille du vecteur est connue et est petite, on peut écrire directement le vecteur,
par exemple v=[1,2] pour un vecteur ligne et v=[1;2] pour un vecteur colonne.
– Lorsque les valeurs du vecteur suivent une progression arithmétique, en écrivant par exemple
v=2:0.1:4. Dans cet exemple, 2 est le premier terme de la suite et 0.1 sa raison (par défaut,
la raison est égale à un). Le dernier paramètre (ici 4) ne fait pas toujours partie de la suite,
comme dans l’exemple v=2:0.3:4 (essayer !).
– En utilisant une boucle for. Par exemple, la boucle
for k=1:4,
v(k)=k*k;
end
for k=1:4,
v=[v,k*k];
end
u=rand(3,1);
v=ones(3,1);
Exercice 8 : Construire le vecteur ligne de taille n qui comporte les carrés des n premiers
nombres entiers. (choisir n=8 par exemple).
b) Construction de matrices
Les vecteurs étant pour Scilab des cas particuliers de matrices de taille n × 1 ou 1 × n, il est
naturel que la construction d’une matrice A s’effectue de manière similaire à celle d’un vecteur,
en l’occurrence :
– Lorsque la taille de la matrice est connue et petite, en écrivant par exemple A=[1,2,3; 3,4,5]
pour une matrice de taille 2 × 3 ;
– En initialisant A à la matrice nulle (ou à la matrice identité avec eye) puis en effectuant une
double boucle sur les indices avec des affectations du type A(i,j)=2 ;
– En initialisant A à un vecteur ligne (ou colonne) puis en concaténant dans une boucle chaque
nouvelle ligne (ou colonne) avec des affectations du type A=[A;v] (respectivement A=[A,v]).
A noter que cette méthode s’étend à la concaténation entre matrices ;
– En effectuant des opérations de somme, de multiplication et de division matricielle à partir
de matrices déjà définies :
u=rand(3,2); v=rand(3,2); 2*u-3*v, u*v’
– En effectuant des opérations composante par composante (utiliser les opérations .*, ./ ou
.^) à partir de vecteurs ou matrices déjà définis :
u.*v, u./v, u.^v
Remarque : si on veut construire le vecteur 1/v il faut utiliser la commande Id./v ou bien
v^(-1). (Sur les versions récentes, 1./v marche aussi.)
On accède à un élément de la matrice A de dimension m×n, c’est-à-dire à m lignes et n colonnes,
par A(i,j) où i est une entier compris entre 1 et m et j est un entier compris entre 1 et n.
Exercice 10 : Reconstruire le vecteur ligne de taille n qui comporte les carrés des n premiers
nombres entiers sans utiliser de boucle cette fois.
m=5; n=4;
for i=1:m
for j=1:n
A(i,j)=i-j;
end
end
A, size(A), length(A),
u=A(3,:), size(u)
v=A(:), size(v), length(v)
Exercice 12 : Construire la matrice de taille 9 × 9 dont tous les éléments sont nuls sauf les
éléments du «centre» (i, j) = {4, 5, 6}×{4, 5, 6} et les éléments du «bord », i ={1, 9}
ou j = {1, 9}, qui tous valent 1.
c) Extration de sous-matrices 7
Exercice 13 :
1) Construire sans effectuer de boucle la matrice 10 × 10 donnant les résultats de la table de
multiplication de 1 à 10.
2) Construire une matrice de taille m × n dont la composante (i, j) est égale à u(i)v(j) où
u est un vecteur de taille m et v un vecteur de taille n que vous choisirez.
u=ones(1,5);v=rand(u);
A=[u;2*u;-u], A=[A; v],
B=v’*u, C=B(2:4,3:4)
c) Extration de sous-matrices
Il est possible d’extraire facilement avec Scilab une sous matrice d’une matrice quelconque
simplement en construisant le vecteur formé par les indices de lignes et celui formé par les
indices de colonnes à sélectionner. Par exemple, l’instruction B=A(1:2:5,1:3) extraira de la
matrice A les lignes 1,3 et 5 et les colonnes 1,2 et 3 pour former une matrice 3 × 3. Ainsi une
matrice 5 × 5 formée de 1 sur ses colonnes impaires s’écrit :
A=zeros(5,5); A(:,[1,3,5])=1
et une matrice 6 × 6 formée de 2 blocs carrés de 3 × 3 ne contenant que des 1 :
A=zeros(6,6); A(1:3,1:3)=1; A(4:6,4:6)=1
III Graphiques
a) Utilisations de plot
Scilab permet d’effectuer des représentations graphiques évoluées de courbes, de surfaces, de
lignes de niveau à partir de données matricielles. Les instructions correspondantes (plot,
plot3d, contour, etc.) possèdent une syntaxe très proche (détaillée dans l’aide de plot).
On peut ajouter ou modifier un certain nombre de paramètres du graphique.
– les couleurs et ou les symboles, avec des notations du genre plot(x,y,’+r’) (pour avoir des
croix en couleur rouge) ;
– spécifier le titre du graphe et les labels des axes avec xtitle ;
– Utiliser une échelle logaritmique ;
– Tracer des histogrammes...
Exercice 16 : On veut tracer une fonction simple comme par exemple x(t) = sin(t) entre −2π
et 2π, en faisant apparaître sur les axes les noms des variables, dans ce cas, par exemple, t et x.
2) En déduire le vecteur x égale à sin(t). Vérifier que ces deux vecteurs corréspondent bien à
ce qu’on veut tracer.
3) Tracer x(t) en rouge, ligne continue plus symboles, en utilisant la fonction plot, puis nommer
les axes et donner un titre au plot par la commande xtitle.
Exercice 17 : Tracer, sur un même graphe (il suffit de les tracer une après l’autre), les deux
fonctions x(t) = sin(t)/t et y(t) = 1/t entre 0.1 et 30, en deux couleurs différentes. Utiliser l’outil
Zone de Zoom dans la fenêtre graphique pour agrandir la partie qui vous semble intéressante.
où ζ est le nombre d’insectes qui épuise toutes les ressources au point de ne pas pouvoir donner
lieu à une génération suivante... Cela donne :
zp
zp+1 = rzp (1 − ). (2)
ζ