Mathématice, intégration des Tice dans l'enseignement des mathématiques  
Sommaire > N°53 - janvier 2017 > Définir des fonctions par un algorithme

Définir des fonctions par un algorithme
motivation, réalisation dans Casyopée et exemples
Moteur de recherche
Mis en ligne le 20 décembre 2016, par Jean-baptiste Lagrange

par le Groupe Casyopée de l’IREM de Rennes :

  • Roselyne Halbert,
  • Jean-baptiste Lagrange,
  • Christine Le Bihan,
  • Bernard Le Feuvre,
  • Marie-Catherine Manens

Les instructions officielles pour le lycée recommandent de lier algorithmique et contenus mathématiques. Par ailleurs, les fonctions occupent une grande place dans le curriculum, comme champ autonome en Seconde, et pour l’analyse dans le cycle terminal. Définir une fonction par un algorithme est pour les élèves une occasion de dépasser une compréhension des fonctions limitée par l’usage dominant de fonctions définies par une formule algébrique.
Cet article vise à montrer l’intérêt d’un développement où un algorithme avec une structure itérative simple à mettre en œuvre permet de définir une fonction à l’intérieur d’un environnement logiciel où coexistent d’autres fonctions, des objets géométriques dynamiques et des objets symboliques.
L’article développe nos motivations, puis donne des indications sur la réalisation dans la dernière version de Casyopée, avant de développer quelques exemples qui servent de base à des scénarios d’usage dans des classes de lycée.

Motivation et objectifs

Dans l’activité récente du groupe Casyopée de l’IREM de Rennes, nous avons exploré certaines situations où le travail sur les fonctions avec le logiciel Casyopée a été complété par un travail en algorithmique. Nous les présentons succinctement en insistant sur l’apport de l’algorithmique.

Trajectoires

Trajectoires de mobiles.
Nous avons expérimenté des situations en classe de Seconde impliquant pour les élèves de définir la position d’un mobile par deux coordonnées dépendant du temps. Cela s’est avéré difficile pour les élèves, même dans le cas de dépendances linéaires. La mise en œuvre d’un algorithme calculant ces coordonnées de façon itérative et affichant les points dans un repère a constitué une tâche utile pour permettre aux élèves de bien comprendre la dépendance au temps, de façon à pouvoir ensuite l’exprimer sous forme fonctionnelle.

Primitive approchée

Primitive approchée en Première.
La recherche de primitives par lecture inverse du tableau des dérivées est une tâche purement symbolique, qui ne met pas en évidence le lien entre fonction et dérivée, notamment dans le registre graphique. La tâche qui peut être demandée aux élèves est la construction approchée de la courbe d’une primitive d’une fonction donnée : un pas et un point initial étant choisis, on construit la droite passant par le point et de pente la valeur de la dérivée en ce point. On réitère ensuite la construction en prenant un point sur la droite dont l’abscisse est celle du point précédent, augmentée du pas. Il s’agit de la méthode d’Euler appliquée à l’équation différentielle F’(x)=f(x), F étant la fonction inconnue et f la fonction donnée. Voir le document de référence

Modélisation

Fonctions dont la courbe modélise un objet du monde réel.
Nous avons particulièrement expérimenté en classe de Terminale la modélisation de ponts suspendus, visant à faire découvrir par les élèves une fonction modélisant un câble porteur à partir d’une étude des tensions menée en interdisciplinarité Math-Physiques. Il est apparu intéressant de faire étudier par les élèves un modèle discret prenant en compte le nombre fini de suspentes. Le câble est alors modélisé comme une ligne brisée, et la fonction est affine par morceaux ; la fonction dans le modèle continu est alors la limite de la fonction du modèle discret quand le nombre de suspentes tend vers l’infini. L’étude des tensions permet d’obtenir des relations de récurrence sur les coordonnées des points du câble. La fonction du modèle discret peut donc être calculée par un algorithme. Voir le document de référence.

Méthode d’Euler

Toujours en Terminale, d’autres tâches de modélisation conduisent à une équation impliquant une fonction et sa dérivée (par exemple une relation linéaire entre une fonction et sa dérivée pour un modèle de croissance exponentielle). Il s’agit d’une équation différentielle. Même si cette notion n’est pas au programme de toutes les Terminales, la construction approchée d’une courbe solution (méthode d’Euler) pour un pas donné est une tâche possible. Comme la recherche d’une primitive approchée en Première, elle met bien en évidence le lien entre fonction et dérivée et conduit les élèves à une bonne compréhension du modèle. Elle se systématise par un algorithme itératif simple.


Dans les situations qui viennent d’être décrites, il est intéressant que les élèves puissent facilement implémenter un algorithme et explorer de différentes façons, notamment numérique et graphique, la fonction obtenue par l’algorithme et aussi la comparer à une fonction obtenue de façon symbolique. Nous avons souhaité que les fonctions puissent être obtenues dans Casyopée, qui offre de nombreuses possibilités d’exploration graphique, numérique et symbolique, de façon à faciliter cette exploration. C’est ce qui a motivé le nouveau développement exposé dans cet article. Les objectifs de ce nouveau développement sont les suivants :

  1. définir des fonctions à partir d’algorithmes, en cohérence avec les fonctions telles qu’elles sont implémentées dans Casyopée,
  2. afficher les graphes, tables et courbes de ces fonctions, dans les mêmes écrans que les autres fonctions, et permettre certains calculs,
  3. proposer une structure de programmation simple, avec un jeu d’instructions réduit, conduisant à la définition d’une fonction qui puisse être traitée par Casyopée.

Réalisation dans Casyopée (version 3.4.4)

Les choix

Ils résultent des objectifs. Du point de vue des fonctions, l’élève doit pouvoir percevoir un parcours itératif comme liant deux variables, soit par une dépendance fonctionnelle (fonction à valeur dans R), soit par une dépendance à un même paramètre (fonction à valeur dans R²). Du point de vue algorithmique, il s’agit de centrer l’activité de l’élève sur l’itération, en distinguant bien initialisation et corps de boucle.

  1. Deux variables spéciales x et y sont pré-déclarées.
  2. La fonction est définie comme une fonction affine par morceaux f telle que f(x)=y pour chaque couple de valeurs de (x, y) obtenu dans l’itération. Cette définition n’est possible que si la suite des x générée dans l’itération, est strictement croissante. Dans le cas contraire, la fonction peut être définie comme une fonction f à valeurs dans R² f(t)=[X(t) ; Y(t)], telle que la fonction X (resp. Y) est affine par morceaux et prend pour chaque entier t la valeur de x (resp y) obtenue au pas t de l’itération.
  3. Les autres variables sont identifiées par un caractère alphabétique disponible.
  4. Le programme comprend deux blocs : un bloc de déclaration et d’initialisation des variables et un bloc d’itération sous une des quatre formes (boucler, tant que, répéter jusqu’à, pour).
  5. A l’intérieur du corps de boucle, seule l’affectation d’une formule à une variable déclarée est permise.
  6. La condition d’arrêt (ou de continuation) est du type variable > formule, variable ≥ formule, variable < formule ou variable ≤ formule.
  7. Les formules sont entrées comme dans les autres modules de Casyopée. Elles peuvent comprendre une ou plusieurs variables du programme et d’autres objets symboliques définis dans Casyopée (fonctions, paramètres).
  8. Il n’y a pas d’entrée/sortie de données. Le résultat observable de la programmation est la création d’une fonction avec la possibilité d’exploration graphique et numérique.
  9. Il n’y a pas dans la version actuelle de structure alternative (si.. alors .. sinon). Cela pourra être revu par la suite, si des situations sont proposées nécessitant cette structure.

L’interface

Les fonctions par algorithme sont créées via le menu du volet d’algèbre.

La fenêtre de création s’ouvre

La partie centrale comprend deux volets redimensionnables. A gauche, la zone de programme. On opère sur cette zone à l’aide des 5 premières entrées du menu. Consulter l’aide en ligne de Casyopée pour le détail.
A droite un volet comprend en haut une zone de test où les valeurs successives des variables intervenant dans l’itération seront affichées, puis différents choix :

  1. Le choix du type de fonction. Le choix de gauche correspond à une fonction affine par morceaux f telle que f(x)=y pour chaque couple de valeurs de (x, y) obtenus dans l’itération. Avec ce choix, l’itération sera arrêtée dès que deux valeurs consécutives de x seront en ordre décroissant. Le choix de droite correspond à une fonction à valeurs dans R² f(t)=[X(t) ; Y(t)], telle que la fonction X (resp. Y) est affine par morceaux et prend pour chaque entier t la valeur de x (resp y) obtenue au pas t de l’itération. Avec ce choix, l’itération sera poursuivie sans considérer l’ordre des valeurs successives de x. La différence entre les deux options est illustrée par le dernier exemple de cet article.
  2. Un champ permettant d’entrer un commentaire libre pour identifier la fonction.
  3. Le nombre maximum d’itérations. Si le programme ne termine pas avec un nombre d’itérations inférieur à la valeur choisie, il sera arrêté quand ce nombre sera atteint.

En bas de la fenêtre, on trouve la barre de création commune à toutes les fenêtres d’entrée : choix de l’identificateur de la fonction, validation ou sortie. La validation n’est possible qu’après un test sans erreur de syntaxe ni d’exécution. Si l’on choisit de sortir, aucune fonction n’est créée, mais le programme n’est pas perdu : il sera de nouveau accessible lors de la prochaine activation de la fenêtre.
Si l’on choisit OK, la fonction apparaît dans la liste des fonctions du volet d’algèbre, avec le commentaire permettant de l’identifier.

Ensuite le menu contextuel (click-droit) permet soit de la supprimer, soit de la modifier.
La fonction apparaît aussi dans le menu-bouton des courbes du volet de géométrie et parmi les boutons de la fenêtre graphique.

Nous verrons leur utilisation dans les exemples ci-dessous.

Exemples

Les exemples de mise en œuvre de fonctions définies par un algorithme qui suivent visent à faire partager au lecteur les possibilités ouvertes par ce développement. Les scénarios pour la classe ne sont pas développés ici., Le groupe Casyopée expérimente de tels scénarios et des comptes-rendus sont progressivement publiés sur http://casyopée.eu/. Noter aussi que dans ces exemples, le choix est fait d’une itération repéter.. jusqu’à. Le choix d’un autre type (tant que ou pour) aurait été possible. La justification mathématique des algorithmes proposés est supposée faire partie de la culture du lecteur et n’est donc pas développée.

La méthode d’Euler

La méthode d’Euler pour une solution approchée de l’équation différentielle y’=y

Dans cet exemple, régulièrement proposé aux élèves de Terminale afin de conjecturer l’existence d’une fonction égale à sa dérivée sur un intervalle, les gestes de base pour créer et utiliser une fonction définie par un algorithme sont montrés. Nous choisissons ici une approximation de la solution sur [0 ;2] avec la condition initiale f(0)=1

Entrer l’algorithme

Nous choisissons la sous-entrée par un algorithme dans l’entrée Créer fonction du menu du volet d’algèbre. Une fenêtre s’ouvre avec un embryon de programme.

Structure
Nous modifions la ligne 3, et choisissons Répéter jusqu’à dans la liste de gauche.

Déclarations
Nous modifions la déclaration de la variable y.

Avec l’entrée de menu correspondante, un champ d’entrée s’ouvre pour la valeur initiale.

Nous remplaçons 0 par 1 puis OK.
Nous déclarons une nouvelle variable p.

Nous choisissons la lettre dans la liste à gauche et nous l’initialisons comme pour y . Nous choisissons un pas de 1/2 dans un premier temps.

Corps de boucle
Nous activons l’entrée Affecter Variable dans la boucle.

Une barre d’entrée similaire à l’initialisation s’affiche. La variable à affecter est à choisir parmi les variables déclarées.

La ligne s’insère après la ligne répéter
Nous introduisons de même la ligne 6.

Condition d’arrêt
Nous modifions la ligne 7 comme ci-dessus.
Nous conservons la variable x et nous modifions l’expression 0 en 2.

Nous modifions aussi l’inégalité en inégalité large. Ainsi, la fonction sera définie sur l’intervalle [0 ;2]

Exécuter

Avant de définir la fonction, il faut vérifier que le programme s’exécute correctement.
Nous choisissons d’arrêter le programme après au plus 500 itérations.
Si notre programme est correct il doit s’arrêter après 4 itérations ; cette limite de 500 ne sera pas atteinte.
Si notre programme est correct les valeurs de x seront croissantes.
Nous choisissons donc une fonction à valeur dans R (cocher xy(x)).
Nous activons l’entrée Tester une première fois pour choisir les variables dont les valeurs seront affichées, puis une deuxième fois pour lancer.

Nous vérifions que le programme s’exécute correctement. Les valeurs prises par x et y au cours de l’itération s’affichent en colonne. Nous remplissons le champ commentaire pour nous rappeler ce que fait la fonction, puis OK pour définir.

Utiliser la fonction

La fonction apparaît dans la liste des fonctions avec le commentaire que nous avons choisi.
Un bouton avec la lettre apparaît aussi sous le volet graphique. En l’activant, la fonction est graphée. Il existe aussi une entrée dans le menu courbe du volet de géométrie.
Nous choisissons de définir la fonction exponentielle sur l’intervalle [0 ;2] et nous la graphons aussi. Nous constatons que la fonction définie par l’algorithme est affine par morceaux. La ligne brisée (bleue) en quatre segments qui la représente est proche du graphe de l’exponentielle (noir) sur le premier segment, puis les représentations s’éloignent. Notons que dans un scénario en classe, cette étape de comparaison n’interviendra qu’après une exploration approfondie de la fonction définie par l’algorithme, et des conjectures sur une solution que les élèves pourront tester en dérivant dans Casyopée.

Nous allons donc modifier l’algorithme pour un pas plus petit. Dans l’exemple de l’onglet suivant, nous verrons qu’il aurait été aussi possible d’utiliser un paramètre de Casyopée. Nous revenons sur la définition en sélectionnant la fonction dans la liste des fonctions : choisir l’entrée Modifier du menu contextuel.

La fenêtre de programme s’affiche à nouveau.
Nous modifions la ligne 3, soit par double-clic, soit par l’entrée de menu. Nous faisons le test, nous modifions le commentaire, puis nous validons (OK)

Nous constatons que cette fois les représentations de la fonction ainsi modifiée et de l’exponentielle se superposent.

Une comparaison plus précise peut être faite à l’aide de la table.

Nous pouvons aussi créer la fonction g-f, pour une estimation de la différence.

Un message nous avertit que la fonction ainsi créée aura une utilisation limitée au graphisme et aux valeurs approchées.

Nous constatons en effet que la fonction h a un graphe correct, mais que Casyopée ne peut calculer complètement une valeur symbolique comme h(2).

En revanche le menu contextuel (click-droit) permet de lire et de copier une valeur approchée. La table ou l’entrée Evaluer Formule de la fenêtre d’algèbre permettrait de constater le même résultat.

Primitive approchée

Dans cet exemple, nous allons montrer comment des objets de Casyopée peuvent être utilisés dans un algorithme. Cet exemple correspond à un scénario expérimenté en classe de Première qui est présenté dans la section suivante.

Objets de Casyopée

Créons un paramètre p pour le pas de la méthode, de façon à pouvoir le faire varier.

Créons une fonction u, qui sera la fonction dont on cherche une primitive prenant la valeur 1 en 0. Initialement, nous considérons la fonction cosinus, mais comme le paramètre p, ce choix pourra être modifié par la suite.

Modification d’une fonction définie par un algorithme

En cliquant-droit dans la ligne de la liste des fonctions correspondant à la fonction f comme ci-dessus, nous allons modifier son programme.
Supprimons la déclaration de p à la ligne 2. Ainsi p est maintenant le paramètre de Casyopée.

Modifions aussi les lignes 5 et 6 ainsi que le commentaire et testons l’algorithme.

Le programme termine, nous pouvons appliquer la modification à la fonction (OK).

Utilisation de la fonction

En animant le paramètre p, on observe comment la fonction obtenue s’ajuste à la fonction définie par U(x)=1+sin x.
Voici pour les valeurs de p : 1, 1/2 et 1/20.



Il est possible aussi de modifier la fonction u. Ici nous prenons simplement u(x)= x et U(x)=1+x²/2.

Trajectoires

Nous présentons d’abord un exemple correspondant à un scénario expérimenté en classe de Seconde. Le second exemple reprend l’algorithme de la figure 1. Même s’il est irréaliste de penser le traiter avec des élèves de lycée, il peut en intéresser certains désireux d’approfondir. Il nous permet aussi de montrer certaines possibilités.

Fonctions à valeur dans R (...)

Fonctions à valeur dans R

Le Coyote est posté à 20 m de distance de la sortie d’un tunnel.
Bip-bip sort de ce tunnel sur la voie de chemin de fer rectiligne à une vitesse de 2 m.s-1.
La fusée du Coyote lui permet d’avoir une vitesse de 3 m.s-1 .
« Étant donnée une direction choisie par le Coyote, peut-il rattraper Bip-Bip ? ».

Fonctions définissant les trajectoires
Nous définissons un paramètre pour l’angle de la trajectoire de Coyotte.

et un autre pour le temps de parcours.

La trajectoire de Bip Bip est la courbe de la fonction b définie par l’algorithme suivant.

La trajectoire de Coyotte est la courbe de la fonction c définie par l’algorithme suivant.

Utilisation des fonctions
Une fois les deux fonctions créées et les courbes créées dans le volet de géométrie, pour une valeur de a donnée, nous animons le paramètre T.

Avec un angle de 43° Coyotte passe devant Bip Bip ! Encore raté. Il reste à essayer d’autres valeurs.
Note : pour utiliser des angles en degrés, voir ici

Fonctions à valeur dans R² (...)

Fonctions à valeur dans R²
Cet exemple reprend l’algorithme de la figure présentant l’interface, ci-dessus.

Un mobile part de l’origine du repère. Sa direction fait un angle de a radians avec le point de coordonnées (0 ;1). A chaque pas de l’itération, il parcourt une distance égale au dixième de sa distance à ce même point. Nous constatons sur la figure que, avec un angle a de 9/10 radians, l’algorithme s’est arrêté, l’abscisse du mobile devenant décroissante, sans que la condition d’arrêt soit réalisée.
Choisissons l’autre case à cocher qui correspond à une fonction à valeurs dans R².

On constate que cette fois l’itération s’est arrêtée avec la réalisation de la condition I< 1/100000. Voici l’affichage de la courbe dans le volet de géométrie, et en parallèle, l’évolution de l’abscisse et de l’ordonnée dans le volet graphique.

Mise en œuvre en classe

Comme nous l’avons indiqué plus haut, des scénarios sont en cours d’expérimentation par le groupe Casyopée. Au moment où cet article est écrit on peut trouver sur le site http://casyopee.eu des documents relatifs à deux expérimentations, accessibles par le menu de gauche :


En plus du document de référence déjà cité on trouve pour chaque situation les indications de mise en œuvre en classe, un entretien avec le professeur, et des observations et évaluations du travail des élèves.

Conclusion : algorithmes et fonctions, une association pleine d’avenir !

Nous espérons que ces quelques exemples auront donné un aperçu des possibilités qu’ouvre ce nouveau développement. Certes, on ne traitera pas avec Casyopée tous les algorithmes dans le champ du lycée. Mais on permettra aux élèves une vision différente de l’algorithmique, où un algorithme ne se réduit pas à « entrer des données, les traiter et afficher un résultat », mais conduit plutôt à la création d’un objet (ici une fonction) avec ses propriétés. Dans le domaine des fonctions, pour lequel Casyopée est conçu, la définition par un algorithme offre des possibilités supplémentaires par rapport aux autres environnements mathématiques en usage au lycée. Nous le montrons dans le Post-Scriptum à cet article. Comme cela a été dit plus haut, des exemples d’utilisation avec les élèves ont été et seront testés en classe, avec des comptes-rendus sur http://casyopéee.eu. Nous sommes preneurs de tout commentaire ou suggestion, ainsi que d’exemples d’utilisation.


ps

Qu’apporte ce développement par rapport à l’utilisation d’environnements présents dans les classes de lycée ?

Nous reprenons l’exemple de la méthode d’Euler pour une solution approchée de l’équation différentielle f ’=f sur [0 ;2] avec la condition initiale f(0)=1 et nous le traitons successivement avec un tableur, avec AlgoBox et avec GeoGebra, avant de comparer avec Casyopée Nous appelons h le pas de la méthode, qui peut être fixe ou variable.

1) Avec un tableur :
On crée deux listes de nombres (en recopiant deux formules un nombre de fois suffisant) puis on crée un nuage de points ou une ligne brisée.
Par exemple, pour h=0,5 on aura les formules
0,0 1 =EXP(A1)
0,5 =B1+B1*0,5 =EXP(A2)
1,0 =B2+B2*0,5 =EXP(A3)
1,5 =B3+B3*0,5 =EXP(A4)
2,0 =B4+B4*0,5 =EXP(A5)

La représentation obtenue n’est pas reconnue par le logiciel comme représentative d’une fonction.
Pour obtenir une comparaison avec la fonction exponentielle, on crée une nouvelle liste et un nouveau nuage de points.
Pour faire varier h, il faut modifier les formules et le nombre de lignes.

Avec Algobox :
On crée par algorithme les valeurs successives des termes des deux suites et on utilise des instructions « graphiques » pour afficher à chaque itération un point.
La représentation obtenue n’est pas reconnue par le logiciel comme représentative d’une fonction.
Pour obtenir une comparaison avec la fonction exponentielle, on ajoute une ligne à l’algorithme dans la boucle. Le pas peut être une variable dont la valeur doit être entrée par l’utilisateur
******************************************
1 VARIABLES
2 x EST_DU_TYPE NOMBRE
3 y EST_DU_TYPE NOMBRE
4 h EST_DU_TYPE NOMBRE
5 DEBUT_ALGORITHME
6 LIRE h
7 x PREND_LA_VALEUR 0
8 y PREND_LA_VALEUR 1
9 TRACER_POINT (x,y)
10 TANT_QUE (x<=2) FAIRE
11 DEBUT_TANT_QUE
12 y PREND_LA_VALEUR y+y*h
13 x PREND_LA_VALEUR x+h
14 TRACER_POINT (x,y)
15 TRACER_POINT (x,exp(x))
16 FIN_TANT_QUE
17 FIN_ALGORITHME
******************************************
Avec GeoGebra
- Soit on utilise GeoGebra comme un simple tableur.
- Soit on utilise la commande ItérationListe (f,1,2/h), h étant un curseur et f définie par f(x)=(1+h)x. Cette utilisation de GeoGebra sera menée par le professeur et non par les élèves. En effet ce type de programmation est très éloigné des pratiques en algorithmique des élèves de lycée.
Dans les deux cas, la représentation obtenue n’est pas reconnue par le logiciel comme représentative d’une fonction.
La comparaison avec la fonction exponentielle est simple.

Avec Casyopée
La procédure est décrite dans l’article. Le logiciel prend en charge le traitement du pas et l’affichage de la ligne brisée. La représentation obtenue est reconnue par le logiciel comme représentative d’une fonction. Le pas peut être un paramètre (curseur). La comparaison avec la fonction exponentielle est simple. Le type de programmation est conforme aux pratiques au lycée avec un environnement de programmation plus facile à maîtriser.

Réagir à cet article
Vous souhaitez compléter cet article pour un numéro futur, réagir à son contenu, demander des précisions à l'auteur ou au comité de rédaction...
À lire aussi ici
MathémaTICE est un projet
en collaboration avec
Suivre la vie du site Flux RSS 2.0  |  Espace de rédaction  |  Nous contacter  |  Site réalisé avec: SPIP  |  N° ISSN 2109-9197