Un exemple de fonction définie par une boucle

dimanche 14 juin 2009
par  Alain BUSSER

Un exemple de fonction venu du monde impitoyable de la finance, présente la particularité de se calculer par une boucle sans condition d’arrêt.

D’où l’intérêt que cette fonction peut présenter en Seconde, en algorithmie. Cependant, comme beaucoup d’exemples intéressants dans ce domaine, celui-ci fait appel à la notion de suites géométriques, et anticipe donc quelque peu sur la classe de Première.

Monsieur Fortuné place x € à la Caisse du Tangue [1] à un taux de 2,5%, pendant 20 ans. Ceci signifie que chaque année, la Caisse

  • ajoute à son capital de l’année précédente, 2,5% de celui-ci ;
  • arrondit le résultat au centime d’euro près.

Monsieur Richard, ayant placé x € au Crédit de la Fourmi [2] pendant 20 ans, bénéficie d’un calcul de son intérêt légèrement différent :

  • le Crédit multiplie 20 fois son capital initial par 1,025
  • puis arrondit au centime près, seulement à la fin.

On se demande lequel des deux procédés de calcul est le plus avantageux (arrondir chaque année, ou seulement à la fin). Pour cela on définit une fonction d’« erreur » qui, à chaque capital initial x, associe la différence entre les deux capitaux finaux de Messieurs Fortuné et Richard. Cette fonction a plusieurs particularités :

  1. Elle est discrète, puisque en tant que différence entre deux fonctions à valeurs décimales avec deux chiffres après la virgule, elle est de la même catégorie : Seulement deux décimales.
  2. Elle ne peut pas être calculée plus simplement qu’en itérant 20 fois la combinaison des deux opérations « multiplier par 1,025 » et « arrondir à deux décimales ».
  3. Elle est complexe, la valeur obtenue dépendant grandement de x, avec une allure chaotique.

Voici à quoi ressemble la représentation graphique de cette fameuse fonction, avec un côté dynamique, le taux d’intérêt, en pourcent, étant manipulé par un curseur :

On voit que parfois Monsieur Richard y gagne, et parfois c’est Monsieur Fortuné : Cela dépend non seulement du capital mais aussi du taux d’intérêt, et pour des taux d’intérêts grands, donc peu réalistes, la différence peut atteindre des dizaines d’euros !


Un très bon outil pour étudier cette fonction est Euler Math Toolbox : On définit une fonction f(r,x) dépendant de la raison r (considérée ici comme un paramètre) et du capital x, par le code suivant :

>function f(x,r)
  $s=x;
  $for n=1 to 20
  $s=round(r*s,2);
  $end
  $return s-round(x*r^20,2);
  $endfunction

Après ça, il suffit d’entrer le tout petit bout de code que voici

plot2d("f(x,1.025)",xmin=0,xmax=100);

pour avoir la représentation graphique de la fonction f(1,025 ;x) sur l’intervalle [0 ;100] :

On peut aller plus loin : En considérant non plus r comme un paramètre mais comme une variable, on peut représenter graphiquement la fonction de deux variables comme une surface :

On voit que l’écart entre les capitaux de Messieurs Fortuné et Richard va de -2400 € à 3800 €, mais ces valeurs ne sont atteintes que pour des taux d’intérêts voisins de 100%, ce qui est franchement irréaliste dans les banques (il faudrait chercher du côté de la Cosa Nostra ; mais dans ce cas ce ne sont plus des taux d’intérêt mais des taux d’usure).

On peut également inverser les rôles de r et x, et retrouver une fonction à une variable : erreur fonction du taux pour un capital donné.


Pour aller plus loin

Pour avoir des fonctions plus régulières, on peut chercher le minimum, le maximum, l’intégrale ou la valeur moyenne de f(r,x) sur des intervalles de la forme [x-h ;x+h].

En particulier l’intégrale de la fonction sur [0 ;10000] a un signe déterminant lorsqu’il s’agit de voir si, en moyenne, c’est Monsieur Richard ou Monsieur Fortuné qui y gagne le plus...

Le même phénomène a des conséquences dans le traitement numérique des signaux, où, en audio il engendre un bruit de fond et en traitement d’images, des « marches d’escalier » disgrâcieuses.

Le source de la figure DGPad

  1. // Coordinates System :
  2. SetCoords(64,198,40);
  3.  
  4.  
  5. // Geometry :
  6. P1=Point("P1",-1.6,-3.25);
  7. E1=Expression("E1","int\u00e9r\u00eat (pourcents) : ","0","5","2.5","1.9","2.95");
  8. E2=Expression("E2","","","","round(x*(100+E1))/100","22.65","-0.55");
  9. E3=Expression("E3","","","","E2(E2(E2(E2(E2(x)))))","22.15","-1.55");
  10. E4=Expression("E4","","","","E3(E3(E3(E3(x))))","22.15","-2.55");
  11. E5=Expression("E5","","","","E4(x)-round(100*x*(1+E1/100)^20)/100","21.9","-3.3");
  12. E6=Expression("E6","","","","E5(x)*10","-1.35","1.95");
  13. f1=Curvus("f1","","","E6(x)");
  14.  
  15.  
  16. // Styles :
  17. STL(P1,"c:#0000b2;s:6;f:30");
  18. STL(E1,"c:#0f453e;s:7;f:24;p:4;cL:200;cPT:YzojNzgwMDEzO3M6MTA7ZjozMA==");
  19. STL(E2,"c:#0a1b37;h:1;s:7;f:24;p:4;cL:200;cPT:YzojNzgwMDEzO2g6MTtzOjEwO2Y6MzA=");
  20. STL(E3,"c:#3b244d;h:1;s:7;f:24;p:4;cL:200;cPT:YzojNzgwMDEzO2g6MTtzOjEwO2Y6MzA=");
  21. STL(E4,"c:#7c253a;h:1;s:7;f:24;p:4;cL:200;cPT:YzojNzgwMDEzO2g6MTtzOjEwO2Y6MzA=");
  22. STL(E5,"c:#737e6c;h:1;s:7;f:24;p:4;cL:200;cPT:YzojNzgwMDEzO2g6MTtzOjEwO2Y6MzA=");
  23. STL(E6,"c:#2b4307;h:1;s:7;f:24;p:4;cL:200;cPT:YzojNzgwMDEzO2g6MTtzOjEwO2Y6MzA=");
  24. STL(f1,"c:#760012;s:1;f:30;p:0");
  25. SetCoordsStyle("isAxis:true;isGrid:true;isOx:true;isOy:true;isLockOx:false;isLockOy:false;centerZoom:false;color:#111111;fontSize:18;axisWidth:1;gridWidth:0.1");
  26. SetGeneralStyle("background-color:#FAFAFA");

Télécharger


[1ce mammifère ayant la particularité d’hiberner, est donc une sorte d’épargnant...

[2elle aussi emmagasine, voir La Fontaine


Documents joints

la représentation graphique
la représentation graphique

Commentaires