N'oublions pas mes années passées (pour moitié) à faire la revue de vulgarisation Pour la Science : alors qu'il s'agit d'une revue de "haut niveau", illisible par ceux qui n'ont pas un minimum de bagage scientifique, je savais bien, naguère, que les graphes étaient difficiles pour beaucoup de lecteurs, et qu'il fallait donc les éviter ou les expliquer de façon détaillée. Nos lecteurs pouvaient comprendre la notion de fonction, mais il ne fallait pas en abuser. Manifestement, ce que je dis ici est plus "avancé", et certains me pardonneront, j'espère, car c'est pour des étudiants engagés dans des étudies techniques, technologiques ou scientifiques que j'écris.
Mon objectif : expliquer l'intérêt des diagrammes logarithmiques (semi logarithmiques ou "log-log"), mais, aussi, expliquer pourquoi il faut en user avec circonspection.
Pour les besoins de l'explication, je crée deux séries de points, associées respectivement à des fonctions x^3 et x^10 (à noter que je fais tout cela en utilisant ce merveilleux logiciel qu'est Maple : comment un étudiant en technique, technologie et science peut-il ne pas l'utiliser ?) :
for i to 10 do
p[i] := i^3;
q[i] := i^10;
end do;
Commençons par examiner une représentation de la fonction
x^3;
. Là, sur un axe horizontal, nous portons des valeurs de x, et nous indiquons verticalement les valeurs de la fonction. Les deux axes sont gradués régulièrement : pour l'axe horizontal, par exemple, il y a autant de distance entre 2 et 3 qu'entre 5 et 6, puisque les deux différences 3-2 et 6-5 sont égales (à 1).
La représentation de la fonction est la suivante :
with(plots);
pointplot({seq([i, p[i]], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 1000], symbol = soliddiamond, color = blue, symbolsize = 30);
Si nous voulons maintenant représenter la fonction
x^10 sur le même graphe, nous rencontrons une difficulté, car voici ce que nous sommes amenés à tracer :
pointplot({seq([i, q[i]], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 1000], symbol = soliddiamond, color = blue, symbolsize = 30);
Là, un seul point peut être indiqué, car le deuxième, correspondant à l'abscisse x = 2, doit apparaître à une ordonnée 2^10 = 1024 qui sort du cadre du graphique.
Bien sûr, on pourrait agrandir ce dernier :
pointplot({seq([i, q[i]], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 2000], symbol = soliddiamond, color = blue, symbolsize = 30);
Mais on voit que le troisième point (et les suivants) n'apparaissent pas. Pour les voir, il faudrait faire un graphe tel que :
pointplot({seq([i, q[i]], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 10^11], symbol = soliddiamond, color = blue, symbolsize = 30);
Et ce n'est pas bon, parce que, cette fois, les premiers points semblent tous à la même ordonnée, ce qui est loin d'être vrai !
La fonction logarithme est intéressante, parce qu'elle permet de bien voir les différences, aussi bien quand les valeurs sont petites que quand elles sont grandes
pointplot({seq([i, log(p[i])], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 20], symbol = soliddiamond, color = blue, symbolsize = 30);
Bien sûr, on évitera de penser que la courbe soit ainsi de type racine carrée, mais, au moins, on pourra voir les différences sur les points initiaux comme sur les points finaux.
Mieux même, on pourra voir des différences qui auraient été difficiles à voir autrement :
with(plottools);
a := pointplot({seq([i, log(p[i])], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 20], symbol = soliddiamond, color = blue, symbolsize = 30);
b := pointplot({seq([i, log(q[i])], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 20], symbol = soliddiamond, color = blue, symbolsize = 30);
display({a, b});
Jusque ici, on observera que je n'ai pas utilisé d'échelles logarithmiques, pour les graphes, mais seulement représenté les logarithmes des valeurs. Je trouve cela plus simple.
Puis, pour terminer, je vous invite à regarder ce que donne la première fonction quand on affiche le logarithme de x, et le logarithme de y :
pointplot({seq([log(i), log(p[i])], i = 1 .. 10)}, labels = ["x", "y=f(x)"], view = [0 .. 10, 0 .. 20], symbol = soliddiamond, color = blue, symbolsize = 30);
Une droite ! Mais on se souvient que c'est une courbe qui est loin d'être linéaire.