Logiciel libre de géométrie, d'analyse et de simulation multiplateforme par Yves Biton

Accueil Tutoriels l’API de MathGraph32

Programmer une figure en Python : La méthode de Newton

modification vendredi 3 avril 2024.

Toutes les versions de cet article : [English] [français]



Depuis version 7.9.1 MathGraph32 permet de créer des objets dans une figure en langage Python.

Premier exemple avancé : On trace la courbe représentative d’une fonction, on crée un point lié à l’axe des abscisses (en fait une nouvelle droite confondue avec l’axe des abscisses) et on crée une suite de 50 tangentes en appliquant la méthode de Newton en partant du point lié.
Vous remarquez que la figure est dynamique.
La dérivée est une dérivée calculée de façon formelle par MathGraph32.
Pour que la figure soit dynamique, il faut créer des objets MathGraph32 dans la fonction newton.
Vous trouverez en bas de cette page deux autre exemple de code mais dans le deuxième la figure n’est pas dynamique (les tangentes ne sont pas recalculées quand on capture le point M).
Dans le dernier exemple vous remarquez que les print donnent une sortie dans la partie Sortie de l’exécution.
Si vous modifiez le code Python, cliquez sur le bouton Exécuter en dessous de ce cadre d’édition

Autre exemple de code pour arriver au même résultat :

from mathgraph import *
# ne pas modifier la ligne ci-dessus
def newton(x, prof):
   t = getCalcName(x)
   form1 = 'f(t)'
   yx = addCalc('yx' + str(prof), form1.replace('t', t))
   form2 = 'g(t)'
   m = addCalc('m' + str(prof), form2.replace('t',t))
   pt1 = addPointXY(x, yx)
   pt2 = addPointXY(x, 0)
   addSegment(pt1, pt2, 'grey', '.')
   addLineAx(pt1, m, '', 'green', '.')
   form3 = '-f(t)/g(t) + t'
   x0 = addCalc('x' + str(prof) + '0', form3.replace('t', t))
   if (prof > 0):
       newton(x0, prof - 1)

setAngleUnity('radian')
zoomFig(0, 0, 2)
formula = 'exp(x)-2'
f = addFunc('f', formula)
courbe = addCurve(f, 500)
g = addDerivative('f', 'g')
axex = addLineAB('O', 'I')
setHidden(axex)
M = addLinkedPointLine(axex, 2, 0, 'M')
xM = addXMeasure(M, 'xM')
newton(xM, 50)

Exemple de code non dynamique :

from mathgraph import *
# ne pas modifier la ligne ci-dessus
# afin de pouvoir utiliser les fonctions mathgraph, par exemple
# A = addPointXY(3, 3, 'A')
setAngleUnity('radian')
formula = 'exp(x)-2'
ff = addFunc('f', formula)
def f(x):
   return getFuncImage(ff, x)
courbe = addCurve('f', 500)
gg = addDerivative('f', 'g')
def g(x):
   return getFuncImage(gg, x)
def newton(x, prof):
   yx = f(x)
   m = g(x)
   print(m)
   pt = addPointXY(x, yx)
   addLineAx(pt, m, '', 'green', '.')
   x0 = -f(x)/g(x) + x
   if (prof > 0):
       newton(x0, prof - 1)
axex = addLineAB('O', 'I')
setHidden(axex)
M = addLinkedPointLine(axex, 2, 0, 'M')
xM = addXMeasure(M, 'xM')
print(getValue(xM))
newton(getValue(xM), 5)