Comment appliquer l'algorithmique aux sciences expérimentales Pierre Dieumegard « L'informatique » est une discipline apparue dans les classes préparatoires scientifiques vers 1990. Pour les classes BCPST (Biologie, Chimie, Physique, Sciences de la Terre), en première année, l'horaire administratif est de une demi-heure de cours par semaine ainsi que (environ) une heure de travaux pratiques (officiellement répertoriée comme des « colles ») ; en seconde année, il n'y a plus que des travaux pratiques. Cet enseignement d'informatique est évalué au concours agro-véto (le concours principal des classes BCPST) par une épreuve orale facultative, où seuls les points au dessus de 10 sont pris en compte. Vers 1990, l'informatique a été introduite progressivement. D'abord, vers 1987 le programme a été défini. Le but de l'enseignement était l'apprentissage de l'algorithmique, par le moyen du langage Pascal. Compte-tenu du faible horaire, le programme définissait nettement un « sous-ensemble du langage Pascal » que les étudiants devaient connaître, et tout le reste était hors programme (1). Les professeurs des trois matières scientifiques (mathématiques, physique-chimie et biologie-géologie) étaient collégialement responsables de cet enseignement, qui pouvait en pratique être assuré soit par l'un, soit par l'autre, soit confié à un enseignant extérieur. Divers stages de formation des professeurs ont été organisés en 1988 et 1989 (INA-Paris, ENS de Lyon...), ce qui a permis la mise en place d'une épreuve d'informatique à partir du début des années 1990 pour le concours commun « agro » (ainsi que pour l'ENSG de Nancy au début, mais ceci n'a pas duré). En 2000, brutalement, les modalités de l'enseignement d'informatique ont changé, et le langage Pascal a été remplacé par le langage Matlab (ou le langage Scilab, qui en est assez proche) ; ces dispositions ont été reconduites dans le programme entré en vigueur en 2003. Ici, le terme « brutalement » peut être compris dans plusieurs sens : Finalement, ce programme d'informatique a pu être appliqué à partir du concours 2004 (les sessions 2002 et 2003 laissaient le choix entre le langage Pascal et les langages Matlab/Scilab). 1. Matlab et Scilab sont fondamentalement des logiciels de calcul numérique, et non des langages informatiques généralistes Au concours, comme indiqué dans la note [7], les étudiants doivent présenter un dossier comportant deux programmes informatiques : « Deux langages sont autorisés : les langages des logiciels MATLAB et SCILAB. Chaque dossier de travaux dirigés comprend l'intitulé du travail dirigé ; la présentation du dossier, le programme proprement dit. Le programme informatique (d'au moins 40 lignes) est constitué par le listing informatique (sur feuille libre recto NUMÉROTÉES). » En dehors de la classe préparatoire BCPST, ces logiciels ne sont pas considérés comme des langages de programmation, mais comme des logiciels de calcul numérique.
Le logiciel Octave a les mêmes objectifs que le logiciel commercial Matlab, et a la même syntaxe : il doit être utilisable en classe préparatoire BCPST.
Le logiciel Scilab est aussi un logiciel de calcul numérique, avec une syntaxe quelque peu différente de Matlab et Octave.
Ainsi, même s'il est vrai que ces logiciels ont des capacités de programmation, ils ne sont pas fondamentalement conçus pour ça : ils sont fondamentalement des logiciels de calcul. 2. Des contradictions existent entre le programme d'algorithmique et les caractéristiques de Matlab et Scilab En classe préparatoire BCPST, l'informatique a des objectifs clairement généralistes : 2.1. Qu'est-ce qu'un objet élémentaire, qu'est-ce qu'un objet structuré ? Le programme officiel [6] indique que « les objets élémentaires sont de type numérique (entier, réel ou complexe), caractère ou logique, et qu'un objet structuré peut être une chaîne de caractères, un objet constitué de plusieurs objets distincts ou un tableau de une ou plusieurs dimensions ». La note [8], qui doit servir de référence pour les épreuves du concours agro-véto, donc de base pour l'enseignement, indique « Les objets élémentaires correspondent aux types de valeur simple : les valeurs numériques, les nombres complexes ainsi que les chaînes de caractères ». Que faut-il faire ? Suivre le programme officiel, et considérer que les chaînes de caractères sont des objets structurés, constitués d'un certain nombre d'objets élémentaires, les caractères ? Suivre la note du concours, et ne pas parler des caractères eux-mêmes, qui n'auraient pas de sens en dehors d'une chaîne ? D'autre part, le programme officiel [6] considère que les nombres réels sont des objets simples, ce qui permet de considérer les nombres complexes comme des objets structurés, ce qui est clair à la fois sur le plan informatique et sur le plan du vocabulaire : comment considérer comme « simple » un objet comportant l'adjectif « complexe » ? 2.2. La double appartenance des tableaux ne simplifie pas la tâche des étudiants ni des enseignants La note [8] indique : « Il est demandé de connaître d'une part les objets correspondant à une notion mathématique, c'est à dire les vecteurs et les matrices. D'autre part, les étudiants devront être à même d'utiliser la notion de tableaux au sens représentation de données structurées. Ainsi les tableaux à plus de deux dimensions sont autorisés. Cependant, pour les tableaux à une ou deux dimensions, les étudiants devront être à même d'expliquer s'ils utilisent ce « tableau » en tant qu'objet de l'algèbre linéaire (i.e. matrice ou vecteur) ou en tant que structure de données au sens informatique du terme (i.e. tableaux de plusieurs éléments). » Les étudiants et enseignants doivent donc jongler avec les deux aspects des tableaux numériques. D'une part ce sont des objets informatiques structurés, sur les éléments desquels on peut travailler, par exemple parcourir un tableau pour en trouver le plus petit élément. D'autre part ce sont des objets mathématiques sur lesquels on peut effectuer des opérations mathématiques, par exemple une multiplication de matrices. 2.3. Au concours, l'étudiant devrait être capable de résoudre les incohérences des textes officiels La note [8] indique : « Même s'il n'est pas possible de déclarer le type d'un objet, l'étudiant doit impérativement : Comment définir « le type de chaque objet », puisqu'il existe des contradictions entre les divers textes régissant cette épreuve d'informatique ? 2.4. Les épreuves du concours sont fortement orientées vers les mathématiques Déjà le programme officiel [5] associe fortement mathématique et informatique, même si le détail du programme d'informatique est donné dans un document séparé [6]. Dans les rapports du concours agro-véto (disponibles sur www.concours-agro-veto.net/), même si les fichiers du concours 2007 de l'oral de mathématique et d'informatique sont séparés, pour les concours 2006, 2005 et 2004, c'est un même fichier qui regroupe les rapports des épreuves des deux matières. La note [8] indique que les étudiants doivent connaître « les opérateurs traditionnels sur les objets simples : les quatre opérations, les opérateurs relationnels (comparaison), les opérateurs logiques ». On peut difficilement effectuer les « quatre opérations » sur des « objets simples » tels que les chaînes de caractères (multiplication et divisions de chaînes de caractères ?). Manifestement, ici, on ne doit travailler que sur des valeurs numériques où ces opérations sont possibles. Les étudiants doivent aussi connaître « les opérateurs sur les objets structurés : l'addition et la multiplication de matrices, les opérateurs relationnels, les quatre opérations sur les tableaux, c'est à dire les opérations fonctionnant sur des tableaux à n entrées et non limités aux vecteurs et matrices. Il s'agit de +, -, * et / ». [8] Là encore, ce n'est possible que si on se limite aux objets structurés numériques de type « vecteur » ou « matrice », et les connaissances mathématiques nécessaires ne sont pas négligeables. Cette même note [8] indique classe les instructions et fonctions de Matlab en plusieurs catégories : celles faisant partie du programme, celles pouvant être utilisées par le candidat sans donner lieu à des questions (fonctions graphiques), celles hors programme pour lesquelles le candidat doit pouvoir expliciter l'algorithme, et celles dont l'utilisation est prohibée. Toutes ces fonctions sont exclusivement mathématiques, et ne concernent pas les chaînes de caractères. 3. Ces contradictions aboutissent à des effets pervers observés lors des épreuves du concours Puisque Matlab et Scilab sont fondamentalement des logiciels de calcul, il est normal que les utilisateurs s'en servent comme des logiciels de calcul, en abandonnant un peu l'aspect langage de programmation. Les examinateurs du concours se plaignent de cette dérive vers une mathématisation incontrôlée, et décrivent des situations où les étudiants ont utilisé des fonctions ou instructions qu'ils étaient incapables d'expliquer. Par exemple, le rapport du concours 2006 [9] indique : C'est regrettable, mais probablement inévitable, compte tenu de la nature même des logiciels utilisés. De plus, les examinateurs et rédacteurs du rapport de concours ne tiennent pas toujours compte de des limites données aux connaissances exigibles selon la note [8]. On peut lire dans le rapport du concours 2005 [10] : « de nombreux candidats ne savent pas comment procéder à un tirage aléatoire d'un entier entre 2 bornes quelconques ». Ce n'est pas étonnant, puisque pour faire un tel tirage aléatoire, il faut utiliser la fonction rand, qui n'est pas dans la liste des fonctions faisant partie du programme selon la note [8]. En suivant cette note, on pourrait considérer que l'emploi de la fonction rand entre dans les « Instructions et fonctions hors programme, susceptibles de donner lieu à des questions si le candidat les utilise. (Questions portant notamment sur l'algorithme correspondant) ». Comme il est difficile d'expliquer simplement un algorithme de génération de tels nombres pseudo-aléatoires, il est normal que les professeurs responsables de l'enseignement ne demandent pas à leurs étudiants d'utiliser une telle fonction. Que faire ? 4. Proposition pour des algorithmes simples (et scientifiquement intéressants) : réalisation de programme de mesures par ordinateur (EXAO) 4.1. Ce qu'est l'EXAO Les étudiants ont l'habitude d'utiliser en travaux pratiques de physique, chimie ou biologie des dispositifs d'acquisition automatisée de mesures (= EXAO = data logging = ATIDEX = MBL = CBL...) Le principe en est simple, même si l'électronique en est souvent complexe. Un appareil de mesure (tension ou intensité électrique, température, pH, concentration en gaz, champ magnétique, ou autres grandeurs) est relié à un « convertisseur analogique-numérique », qui transforme ses signaux en valeurs numériques informatiques. Ensuite, un programme informatique permet d'utiliser ces valeurs, c'est à dire les afficher à l'écran, les tracer sous forme de courbe, les enregistrer sur fichier, etc. Les logiciels vendus avec les appareils de mesure sont en général complexes, avec des menus déroulants, une aide contextuelle, des fenêtres variées... Il est hors de question de demander à des étudiants normaux de programmer de tels logiciels. Par contre, en se basant sur les textes actuels, on peut assez facilement faire de petits programmes d'acquisition et de visualisation des mesures. Il est simplement nécessaire d'utiliser quelques fonctions qui ne sont pas strictement au programme, mais ni plus, ni moins que la fonction « rand » qui donne des nombres aléatoires. Ces fonctions sont simplement les fonctions de mesure du temps ainsi que l'échange de données avec l'extérieur, soit par lecture et écriture de petits fichiers de textes, soit par lancement de programmes extérieurs. La représentation graphique est très simple, et peut se limiter aux fonctions basiques de type « plot » ou « plot2d ». Avec ces quelques fonctions, qui se comptent sur les doigts d'une seule main, on peut faire des algorithmes du type :
Pour ce qui est de l'action de mesure elle-même, il faut utiliser de petits logiciels (écrits dans d'autres langages). Les exemples proposés ci-dessous correspondent au monde DOS-Windows, mais le principe est utilisable aussi dans le monde Unix-Linux. 4.2. Mesure du temps Le plus simple, et le plus maîtrisable par le programmeur, est de se limiter aux mesures lentes, où l'intervalle entre les mesures est supérieur à une seconde. - Pour Matlab et Octave, la fonction « clock » renvoie une matrice-ligne de 6 nombres, qui sont dans l'ordre, l'année, le mois, le jour, l'heure, la minute et la seconde ; la partie fractionnaire des secondes permet d'obtenir des millisecondes. « now » renvoie un nombre dont la partie entière est la date d'aujourd'hui (à partir du 1er janvier 0000), et la partie fractionnaire l'heure actuelle, en fraction de jour. - Pour Scilab, « getdate » renvoie aussi une matrice-ligne de nombres entiers, dont le dernier correspond aux millisecondes. 4.3. Lancement de logiciels extérieurs On peut imaginer un programme « mesure_voie_3.exe », qui ferait une mesure et renverrait une valeur numérique, par exemple 18.4.
- Matlab et Octave possèdent la commande « dos » : [x,y] = dos('mesure_voie_3.exe') renvoie la mesure dans la variable y. Pour Octave, il existe aussi la commande « system » qui joue le même rôle, et doit être utilisable aussi sous Linux.
- Scilab possède la fonction « unix_g » : x = unix_g('mesure_voie_3.exe') renvoie la valeur de température dans la variable x.
Comme les valeurs renvoyées sont des chaînes de caractères, il faut ensuite les transformer en nombre par les fonctions « evstr » de Scilab ou « str2num » de Matlab et Octave. 4.4. Échanges de données par de petits fichiers de texte 4.4.1. Utilisation du système multitâches Les systèmes d'exploitation modernes sont multitâches, c'est à dire que plusieurs programmes peuvent fonctionner « en même temps ». En réalité, le temps d'utilisation du microprocesseur est réparti entre les différentes applications.
On peut donc réaliser un logiciel capable de faire les mesures, et pouvant les écrire régulièrement dans un petit fichier de texte. Ce fichier de texte serait lu régulièrement par le script de Matlab, Scilab ou Octave, qui ensuite traiterait les mesures. 4.4.2. Comserfich, logiciel pour le contrôle de la voie série (RS232) De nombreux appareils sont connectables à l'ordinateur par une telle liaison : les systèmes Orphy (GTS, GTI, portable...), divers multimètres, pHmètres, thermomètres, luxmètres... Normalement, Matlab peut directement utiliser ces liaisons, mais avec des commandes spéciales, Scilab nécessite des fonctions à partir d'une bibliothèque spéciale, et Octave ne semble pas pouvoir exploiter directement ce type de liaison. La copie d'écran ci-dessous correspond à un programme réalisé en Delphi5. On règle les différents paramètres (numéro de la voie, vitesse, etc) en cochant les bonnes valeurs. On active le logiciel en cliquant sur un bouton « Action », qui se transforme alors en bouton « arrêt ? ». Une fois activé, ce programme scrute régulièrement le fichier « envoi.txt », et envoie son contenu sur la voie série correspondante. Lorsqu'il reçoit un message par la voie série, il inscrit ce message dans le fichier « retour.txt ». En même temps, on peut voir les messages échangés dans la fenêtre de droite.
On peut y voir le résultat d'échanges d'informations avec l'appareil Orphy GTS. Comserfich a lu le message « XEA 0 » dans le fichier « envoi.txt », et l'a donc envoyé sur la voie série vers Orphy GTS. Ce message signifie (pour Orphy GTS) « faire la mesure sur la voie 0 » ; Orphy a répondu la valeur numérique 255, et Comserfich l'a inscrite dans le fichier « retour.txt ». 4.4.3. Lecture et écriture de petits fichiers de texte par Matlab, Scilab ou Octave Il est souvent nécessaire de pouvoir détruire les fichiers après les avoir lu. Scilab peut le faire par « mdelete(retour.txt') ». Matlab et Octave peuvent le faire par « delete('retour.txt') ». Pour déclencher la prise de mesure, il faut envoyer « XEA 0 ». Scilab peut le faire par : write('envoi.txt','XEA 0'). Matlab peut le faire par dlmwrite('envoi.txt','XEA 0',''). Une telle fonction n'est pas possible directement pour Octave, et il faut en construire uns soi-même (apparemment) : function sauve(nomfich,nomvar) % à sauvegarder dans sauve.m Ensuite, sauve('envoi.txt','XEA 0') enverra la chaîne XEA 0 dans le fichier envoi.txt Pour lire le fichier retour.txt dans la variable ch :
Ainsi, le programme de script suivant, pour Scilab, fait trois mesures successives sur la voie 0 de Orphy GTS, grâce au logiciel Comserfich : for i=1:3 4.4.4. Autre logiciel de mesure polyvalent : Visu32
Ce logiciel fait les mesures sur un appareil (variable grâce à un système de pilotes), et les affiche à l'écran. Lorsqu'on clique sur le bouton « fichiers inactifs », ce bouton devient vert, et affiche « fichiers actifs » : à intervalles réguliers, le logiciel sauvegarde les mesures dans de petits fichiers (visibles ci dessus : visu.ea0, visu.ea1, etc). Ces petits fichiers ne contiennent que la valeur numérique lue, et sont donc très faciles à lire : avec Octave, il suffit de l'instruction dlmread('visu.ea0') pour obtenir la valeur numérique lue dans le fichier visu.ea0. Comme cette valeur change au cours du temps, il suffit de programmer le bon algorithme en Octave (ou Scilab, ou Matlab...) pour enregistrer, visualiser, traiter ces mesures. 4.5. Comment obtenir des petits programmes de mesure, permettant à Matlab, Octave et Scilab de s'ouvrir au monde extérieur ? Il est bien sûr possible de les programmer soi-même, avec divers langages. Il est aussi possible de télécharger des programmes déjà existant sur le site sciencexp.free.fr/. Il contient les principaux logiciels exécutables décrits ici : Conclusion Il est possible de faire de l'algorithmique avec les logiciels de calcul tels que Matlab, Scilab ou Octave. Pierre Dieumegard Le présent texte correspond à l'intervention de M. Dieumegard à la session 1 « L'informatique, une discipline à part entière ! Culture, fondamentaux et usages » du colloque international ePrep 2008. Références [1] Clavel, G. (dir). « L'informatique en « prépa-bio » : quelques sujets... de réflexion », UPA/INA-PG, novembre 1989. [2] « Objectifs de formation et programme des première et seconde années des classes préparatoires de biologie, chimie, physique et sciences de la Terre (BCPST), Annexe I, Informatique », Arrêté du 8 août 2000, publié au J.O. du 10-09-2000 et dans le BOEN n° 34 du 28 septembre 2000, disponible sur http://www.education.gouv.fr/bo/2000/34/sup.htm. [3] Note de service décrivant l'aménagement du programme informatique, publié au BOEN n° 35 du 5 octobre 2000, disponible sur http://www.education.gouv.fr/bo/2000/35/sup.htm. [4] Note d'application du Service des Concours Agronomiques, Ministère de l'Agriculture et de la Pêche SCA/01/566. [5] Programme de mathématiques et d'informatique (classe de première et de seconde année BCPST), publié au BOEN n° 3 du 26 juin 2003, disponible sur ftp://trf.education.gouv.fr/pub/edutel/bo/2003/hs3/annexe3.pdf. [6] Programme d'informatique de la voie BCPST, publié au BOEN n° 3 du 26 juin 2003, disponible sur ftp://trf.education.gouv.fr/pub/edutel/bo/2003/hs3/prog_info.pdf. [7] Notice d'instructions relatives aux concours A recrutant sur la banque Agro-Véto (filière BCPST) session 2008, disponible sur http://www.concours-agro-veto.net/IMG/pdf_notice_2008.pdf. [8] Note d'information sur l'épreuve facultative d'informatique des concours agro-véto, disponible sur http://www.concours-agro-veto.net/IMG/pdf/note_informatique_fev_2006.pdf. [9] rapport du concours agro-véto 2006, mathématiques et informatique, disponible sur http://www.concours-agro-veto.net/IMG/pdf/07_maths.pdf. [10] rapport du concours agro-véto 2005, mathématiques et informatique, disponible sur http://www.concours-agro-veto.net/IMG/pdf/2_MATHS_entier.pdf. NOTES (1) « On l'a souvent répété : le programme d'informatique dans les classes préparatoires de biologie mathématiques supérieures et spéciales est un programme d'informatique "généraliste". Il ne doit pas être considéré comme le complément d'une autre discipline et, à ce titre, tout sujet d'informatique proposé au concours devra, s'il fait appel à des connaissances de biologie, de mathématiques, de physique ou de chimie non élémentaires, préciser explicitement ces connaissances dans le texte du sujet » [1 : Clavel et al., 1989]. (2) L'arrêté ministériel [2] a été publié en septembre 2000, la note de service d'application [3] au début octobre 2000, la note d'application du concours agro en août 2001, ce qui est extraordinairement rapide. L'arrêté [2] indiquait que ses dispositions devaient s'appliquer à partir de la rentrée 2000, ce qui était évidemment impossible. ___________________ |
Informatique et TIC | Articles |