Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Activités mathématiques avec le logiciel Scilab
Article mis en ligne le 4 décembre 2007
dernière modification le 2 août 2014

par Jean-Philippe Vanroyen

Le logiciel libre SCILAB est un logiciel de calcul numérique disposant de nombreuses fonctionnalités.
Ces fonctionnalités, en particulier un module de programmation, offrent de nombreuses possibilités pour des activités mathématiques dans des domaines variés.
Dans cet article, ce sont les suites numériques qui ont été choisies.
Ce logiciel peut jouer un rôle utile et tout à fait pertinent dans le cadre de la nouvelle épreuve pratique.

PLAN

INTRODUCTION

En 2006-2007, à la demande de l’Inspection générale, un groupe de professeurs de mathématiques de l’Académie de Lille (dont j’ai fait partie) s’est constitué afin d’étudier dans quelle mesure et comment le logiciel Scilab pouvait être utilisé dans le cadre de l’épreuve pratique du bac S. L’année passée, j’ai donc utilisé le logiciel Scilab avec mes élèves de première S.

Comme Scilab est particulièrement bien adapté pour l’étude des suites, j’ai choisi ce thème pour toutes les activités. Une douzaine d’élèves ont travaillé Scilab en salle informatique pendant cinq heures (les autres élèves étaient partis en voyage scolaire). L’effectif était donc réduit, ce qui simplifie considérablement la tâche.

Les élèves ont progressé à leur rythme, je passais de poste à poste pour les aider et pour donner les explications complémentaires et nécessaires. Il est à noter, comme c’est souvent le cas dans le cadre de ces activités Tice, que certains élèves, plus dégourdis, n’hésitaient pas à aider leur camarade à la traîne ou bloqué à une certaine question.

Nous avons commencé par une activité de découverte ( decouverte_ scilab.pdf) au cours de laquelle les élèves découvrent les commandes de base du logiciel et la programmation en ligne de commande.

Plusieurs exercices (exercices_scilab.pdf) ont suivi cette activité. Là, les élèves doivent se débrouiller pour traiter ces exercices, en revisitant si nécessaire l’activité de découverte. Il s’agit en effet de commencer à mémoriser certaines commandes. Les exercices sont des exercices classiques de la classe de première S.

Enfin, les élèves ont travaillé deux thèmes d’étude (du moins ceux qui ont eu le temps de finir) . Le premier concerne un exemple de suites chaotiques (theme_suites_chaotiques.pdf). Le second concerne la très classique suite de Syracuse ( theme_suite_syracuse.pdf).

Avant de présenter ces activités, précisons quelques aspects importants du logiciel Scilab.

sommaire

Le logiciel Scilab

Scilab (http://www.scilab.org/lycee/index_l...http://www.scilab.org/) est un logiciel de calcul numérique scientifique (et non un logiciel de calcul formel ) développé par l’INRIA. Il est gratuit et libre. On peut dire que c’est l’ équivalent libre du logiciel MATLAB.

C’est un logiciel très utilisé dans le monde de l’entreprise.

Scilab peut être utilisé au lycée, et en particulier peut trouver sa place dans le cadre de l’épreuve pratique au bac S, sous certaines conditions comme nous le verrons.

A l’adresse http://www.scilab.org/lycee/index_lycee.php, on trouve d’ailleurs quelques documents utiles, certains de prise en main, d’autres contenant des exemples pédagogiques pour le lycée. Sur le site de l’académie de Lille, à l’adresse http://www4.ac-lille.fr/ math/tice/scilab.html,
on trouve également quelques documents utiles ainsi que le rapport de l’expérimentation sur Scilab qui a eu lieu en 2007.

Excepté quand il s’agit du module de programmation, Scilab fonctionne en ligne de commande.

Scilab est une calculatrice


Comme on peut le constater ci-dessus, une ligne de commande peut contenir plusieurs instructions.

On peut stocker des résultats intermédiaires dans des variables. Les nombres réels comme le nombre pi sont précédés du caractère réservé %.

Dans l’exemple ci-dessus, on a le nombre maximal de décimales : on compte 22 décimales. Mais la précision de Scilab (comme tout logiciel de calcul numérique travaillant avec des nombres codés en machine sur 64 bits) est en réalité de 16 décimales environ.
Vous trouverez à la fin de cet article un paragraphe sur ce sujet complexe mais très important.

sommaire

Scilab travaille avec des matrices

L’exemple précédent montre la déclaration d’une variable a à l’aide de la commande a=sqrt(3) .
Mais a n’est pas vraiment un réel...
Dans l’image 1 ci-dessous, m est une matrice à 2 lignes et 3 colonnes donc de format [2,3].
Et on accède aux coefficients à l’aide de la syntaxe m(i,j) .
De même quand l’on définit la variable a par a=sqrt(3) , on définit sans le savoir une matrice de format [1,1].
On peut d’ailleurs accéder à la valeur de cette variable à l’aide de a(1)  !

Dans l’image ci-dessous, nous avons créé une matrice colonne élément par élément, comme le montre la valeur de a .
a’ permet de transposer la matrice a afin d’obtenir une matrice ligne.
L’apostrophe est en effet l’opérateur de transposition.

Ces variables matricielles s’additionnent si les formats sont identiques.
En ce qui concerne le produit, on distingue le produit matriciel du produit terme à terme :
Le produit a*b est un produit matriciel classique. De même, on a le produit d’une matrice par un scalaire. Par contre l’opérateur .* est un produit terme à terme. Ainsi le produit a.*c donne la matrice (ai *ci) . Ce dernier produit nécessite donc un format identique pour les deux facteurs.
On devine déjà que Scilab se prêtera bien à l’étude des suites, qui seront définies à l’aide de matrices lignes ou colonnes.

sommaire

Scilab permet la programmation en ligne de commande

L’exemple qui suit est éloquent :

Nous avons de cette manière programmé le calcul des 9 premiers termes d’une suite arithmétique de raison -2 et de premier terme 5.

Ce genre de « codage très rapide » permet un bon apprentissage des algorithmes de base en programmation car l’élève a la possibilité de tester immédiatement son code. Tout se passe comme s’il déboguait systématiquement chaque ligne de code écrite.

sommaire

Scilab est un grapheur

On peut demander la représentation graphique des termes d’une matrice colonne :

De même, on peut demander la représentation graphique d’une fonction

La commande x=linspace(-%pi,%pin,101) permet de créer une matice ligne (xi) de 101 valeurs régulièrement espacées entre -pi et +pi. La commande y=cos(2*x)-sin(x) crée une matrice ligne de même taille (cos(2xi)-sin(xi)) . Enfin on demande l’affichage, qui ne pose pas de problème puisque que les deux matrices lignes ont la même taille.

La représentation de surfaces 3D ne posent pas de problème.

(Ce qui une fonctionnalité intéressante car il n’est pas possible de construire des surfaces avec le tableur de Open Office )

x est un matrice ligne de 31 valeurs.

cos(x) est également une matrice ligne de 31 valeurs.

cos(x)’ est sa transposée, c’est donc une matrice colonne de 31 valeurs.

z est donc une matrice de taille [31,31]. Il ne reste plus qu’à demander l’affichage.

sommaire

Scilab dispose d’un module de programmation

La commande scipad() permet de lancer un éditeur externe permettant d’écrire les fonctions.

Une fois la fonction enregistrée et chargée dans scilab elle peut être utilisée de façon classique en l’appelant et en donnant des valeurs aux paramètres.

Scilab propose bien d’autres choses encore !

Bien entendu, Scilab dispose de très nombreuses autres routines et d’outils permettant par exemple la résolution de systèmes linéaires , le calcul de valeurs propres et vecteurs propres, la décomposition en valeurs singulières, la transformée de Fourier rapide, plusieurs méthodes de résolution d’équations différentielles, plusieurs algorithmes d’optimisation, la résolution d’équations non-linéaires, la génération de nombres aléatoires etc...

Enfin, si les calculs sont trop longs (car le langage est interprété...) il y a la possibilité d’écrire les passages gourmands en temps de calcul en langage évolué comme le C ou le fortran.

sommaire

Les activités

Avant que l’élève ne se plonge dans l’activité 1, il y a d’abord bien évidemment une présentation orale du logiciel qui ne pose d’ailleurs aucun problème particulier. Je présente quelques calculs, certains utilisant %pi, une variable et son utilisation, des commandes importantes (comme par exemple F2 permettant de vider l’écran , clear qui permet de détruire toutes les variables, et les touches fléchées qui permettent de naviguer dans les commandes déjà saisies).

sommaire

Pour commencer

La première activité ( decouverte_ scilab.pdf) permet d’abord de découvrir les commandes de base du logiciel, les variables et leur représentation matricielle. Quand on pose a=[1,2,3] , je dis que l’on a défini une suite de trois termes et non une matrice ligne.

Des lignes de commandes comme

u(1) = 5 ;for n = 1 :9,u(n+1)=u(n)-2 ;end

permettent de programmer le calcul d’un nombre quelconque de termes d’une suite arithmétique.

C’est le point délicat de l’activité. Les élèves n’ont jamais rencontré de telles boucles et il est nécessaire de l’expliquer en détail. Pour ma part, j’ai utilisé le tableau pour écrire toutes les instructions nécessaires c’est à dire pour noter

u(1)=5 ;

u(2)=u(1)-2 ;

u(3)=u(2)-2 ; etc

Ensuite il faut expliquer que la boucle permet d’obtenir toutes ces instructions en une seule commande.

La suite u étant définie, la commande s um(u) permet d’obtenir la somme des termes de la suite u .

A la fin de l’activité, chacun doit être capable de programmer une suite géométrique et de savoir par exemple calculer la somme 4,7 + 4,4 + 4,1 + .... - 12,1 en programmant au préalable une suite.

Cette activité préparatoire, suivie des trois exercices, prend entre deux et trois heures au minimum mais cela n’a qu’une valeur très indicative car cela varie beaucoup selon tel ou tel élève.

Les élèves doivent ensuite traiter sur feuille trois exercices qui utilisent largement les fonctionnalités de Scilab.

sommaire

Trois exercices

.Voici l’un des énoncés.

1) Calculer les 10 premiers termes.

2) Calculer les 100 premiers termes et construire le graphique correspondant.

3) Quel est, apparemment, le plus petit réel M qui majore les termes de la suite u.

Le démontrer.

4) Quelle semble être la limite de la suite u ?

A partir de quel indice tous les termes de la suite u appartiennent-ils à l’intervalle [2,99 ; 3]

A partir de quel indice tous les termes de la suite u appartiennent-ils à l’intervalle [2,999 ; 3]

Démontrer ce dernier résultat, en distinguant les rangs pairs et les rangs impairs.

Les commandes suivantes permettent de répondre aux questions :

for n=1:20, u(n)=(3*n+(-1)^n)/(n+2) ;end ;

clf ;plot(u) ;

find(u>2.99)

find(u>2.999)

Scilab est donc très performant pour étudier ces suites.

La représentation graphique s’obtient très aisément et des commandes très particulières comme la commande find s’avère très utile.

On peut remarquer qu’un tableur permettrait également de répondre aux questions mais la démarche est très différente.

La suite est générée par recopie de formule, manuellement en quelque sorte, tandis que dans Scilab, c’est un algorithme qui permet de calculer tous les termes de la suite. Cette différence est importante. Par exemple quand on saisit la formule suivante u(i+1)=k*u(i)*u(i)-1 pour définir la suite récurrente, on écrit réellement des mathématiques. Alors que dans un tableur, on saisirait =A$1$*B1*B1-1 puis on recopierait vers le bas. Ce qui procède d’une démarche conceptuelle très différente et sans doute complémentaire.

J’ai proposé ensuite deux thèmes d’étude : l’un sur les suites chaotiques, l’autre sur la célèbre suite de Syracuse.

sommaire

Thème d’étude : suites chaotiques

Pour la construction de cette activité, je me suis largement inpisré du livre de Ian Stewart, Dieu joue t-il aux dés  ?

On considère la suite récurrente suivante

Il s’agit d’étudier le comportement de cette suite pour différentes valeurs de u1 et pour différentes valeurs de k .

C’est un sujet d’expérimentation assez vaste , bien que plutôt du programme de terminale S.

Voici la commande en ligne calculant les premiers termes

a=0.5 ;k=1 ;k=100 ;

u(1)=a ; for i=1:n ; u(i+1)=k*u(i)*u(i)-1 ;end ;clear ;disp(u(1:n))

Il faut donc à chaque fois ressaisir ces deux lignes en changeant les valeurs des trois paramètres.

C’est donc à ce moment que j’introduis l’éditeur permettant de créer des fonctions :

function masuite(a,k,n)

u(1)=a ;

for i=1:n

u(i+1)=k*u(i)*u(i)-1

end

disp(u(1:n))

endfunction

Une fois cette fonction chargée dans Scilab, il suffit de l’appeler :

masuite(0.5,1,100) ;

L’activité permet de découvrir les comportements très divers de ce tte suite récurrente.

La figure de géométrie dynamique donne une illustration graphique très parlante de ces différents comportements.

Dans le cas où u1=0.5 et k=1, la suite converge vers une suite périodique de période 2.

Dans le cas où u1=1/2 et k=2, un est constante à partir du rang2 un=-1/2

Mais si on modifie légèrement les conditions initiales en prenant u1=0.50000001 alors on obtient une suite chaotique !

Dans le cas où u1=0.343 et k=1.73 n=80, on obtient une suite chaotique, mais si on prend n=200 alors on constate que l’ordre s’installe curieusement !

Il est vrai que bien peu de démonstrations de ce thème sont à la portée d’un élève de première S mais on peut toujours conjecturer n’est-ce pas ?

sommaire

Thème d’étude : suite de Syracuse

Le second thème d’étude porte sur la célèbre suite de Syracuse.

On considère un entier non nul. S’il est pair, on le divise par 2, sinon on le multiplie par 3 et on ajoute 1.

Par exemple, avec 9 on obtient 9–28–14–7–22–11–34–17–52–26–13–40–20–10–5–16–8–4–2–1

C’est un problème non encore résolu. La conjecture dit que quel que soit l’entier initial choisi, on aboutit toujours à 1.

Un premier intérêt d’étudier cette suite est de faire découvrir aux élèves une véritable conjecture en mathématiques !

Je n’ai d’ailleurs dévoilé ce fait aux élèves qu’à la fin.

Elle se prête très bien à diverses études : temps de vol de la suite (valeur de n telle que Un=1) , ou encore altitude maximale (plus grange valeur atteinte pas Un).

L’activité est très orientée sur les algorithmes, qui sont d’un niveau nettement plus conséquent que le thème d’étude précédent. Ces algorithmes permettent d’étudier empiriquement les suites de Syracuse, leur temps de vol et leur altitude maximale. Sauf exception, les élèves ne sont pas capables d’écrire ce genre de code. Il faut les épauler dans l’écriture et leur fournir un code initial qui leur permet de démarrer, c’est ce qui est le cas dans ce thème d’étude.

sommaire

En guise de conclusion

La prise en main de Scilab n’est pas simple : aux difficultés de syntaxe (très nombreuses commandes, aucun bouton....) s’ajoutent des difficultés conceptuelles comme par exemple la représentation matricielle des nombres et des suites.

Toutefois ces activités ont largement plu aux élèves . Il faut dire que, à partir du moment où l’effectif est faible (une douzaine), et où l’on se donne plusieurs heures en salle info pour traiter ces activités, cela facilite grandement les choses !

La programmation est très accessible dans Scilab, puisque l’on procède par ligne de commande. Cela constitue un point très positif mais il n’en reste pas moins que l’algorithmique est en général d’un accès difficile pour les élèves. Je pense qu’il faudrait commencer dès la seconde en commençant par écrire quelques petits programmes très simples à l’aide de la calculatrice.

Par rapport au tableur, Scilab permet d’écrire les formules et des relations mathématiques. Avec son langage de programmation, ses nombreuses fonctions graphiques et sa puissance de calcul, Scilab montre des possibilités inaccessibles pour une calculatrice standard. Pour de nombreuses notions, Scilab semble particulièrement bien adapté : suites numériques, statistiques, fonctions et d’autres sans doute.

Scilab n’est pas un logiciel que l’on maîtrise facilement. Son utilisation comme outil pour l’épreuve pratique du bac S est pertinente mais nécessite un apprentissage progressif sur 2 ans, c’est à dire dès la classe de première. J’imagine un apprentissage des commandes de base et de la programmation en ligne de commande en classe de première, puis une reprise de la programmation en ligne de commande suivi de l’apprentissage du module de programmation en terminale.

C’est seulement en étalant dans le temps la formation à ce logiciel qu’on pourra espérer une mémorisation et une maîtrise réelle de Scilab. Cette remarque vaut d’ailleurs à mon sens pour la plupart des outils TICE.

sommaire

découverte de Scilab
Thème Suites chaotiques
Thème Suites de Syracuse
Exercices Scilab

ANNEXE : PRECISION D’UN LOGICIEL

Il est utile de bien comprendre cette notion délicate mais fondamentale que constitue la précision d’un calcul, surtout à notre époque envahie par les machines...

Quand l’ordinateur calcule, il opère avec des nombres codés chacun sur un bloc de 64 bits (8 octets) et écrits en base 2.

Sans entrer dans les détails, mais pour donner une idée, le nombre suivant codé en machine sur 64 bits par

1 100000000101 11001001000000000000000000000000000000000000000000

est le réel + 2^6 * (1 + ½ + ¼+1/32+1/256) = + 114,25

Ce type de représentation des nombres permet un traitement très rapide des calculs car l’architecture des microprocesseurs est conçue à la base pour les calculs sur des nombres représentés de cette manière (norme IEEE-354). Scilab, en tant que logiciel de calcul numérique, a donc tout intérêt à utiliser les fonctionnalités de calcul du microprocesseur car elles sont très rapides. Scilab utilise donc la norme IEEE-354 avec un inconvénient toutefois : comme ces nombres sont codés sur 64 bits, leur précision est limitée.

En effet, le développement décimal (en base 2) étant codé sur 52 bits (les 12 autres sont réservés pour l’exposant et le signe), l’ « atome numérique » est donc 2^(-52) ce qui est d’ailleurs égal à la variable %eps (epsilon !) que l’on voit ci-dessus.

Comme le développement décimal en base 2 va jusqu’à la 52 ème décimale, le développement décimal en base 10 va jusqu’à la 16 ème décimale. Evidemment, on peut travailler avec des nombres bien plus petits comme 10^(-300), mais même dans ce cas nous ne disposerons jamais, outre les 299 premières décimales qui valent 0, que 16 décimales sûres à partir de la 300 ème car finalement, l’exposant ne fait que décaler vers la droite ou la gauche les chiffres qui composent le nombre :

123456789 = 1234,56789 10^5 = 0,0000123456789 * 10^13 = 1234567890000 * 10 ^(-4)

La ligne ci-dessus montre que dans chaque cas, nous ne disposons que de 9 chiffres significatifs.

Comme pour les langages de programmation implémentés sur nos PC, la précision, c’est à dire le nombre de chiffres significatifs, sera donc de 16, à moins d’utiliser des machines d’architecture différente, ou bien-sûr de travailler avec des systèmes de calcul formel évolués qui calculent eux-même leur développement décimal.