next up previous contents index
suivant: La méthode de Newton monter: Exercice sur la méthode précédent: L'énoncé   Table des matières   Index

La solution avec Xcas

  1. Pour avoir les variations de f (x) = x exp(x) + 0.2 on peut calculer la dérivée et faire le graphe de f.
    On tape : f(x):=x*exp(x)+0.2
    factor(diff(f(x)))
    On obtient : (x+1)*exp(x)
    On tape : G:=plotfunc(f(x),x=-3..1) On obtient :

    Image xex02

    Pour montrer que l'équation f (x) = 0 a deux solutions a et b qui vérifient a < -1 < b < 0, on calcule, d'après le graphe f (- 3), f (- 2), f (- 1), f (0).
    On tape : f(x)$(x=-3..0) On obtient :
    0.0506387948964,-0.0706705664732,-0.167879441171,0.2 donc puisque f est continue, d'après le théorème des valeurs intermédiaires on a : -3 < a < - 2 et -1 < b < 0

  2. La méthode de Newton consiste à itérer la fonction h définie par h(x) = x - f (x)/g(x) où g est la derivée de f. Pour trouver a, on va commencer en x0 = - 2 (car la fonction est concave et décroissante sur [- 3; - 2] et les xn seront des valeurs approchées de a par excés) et pour trouver b, on va commencer en x0 = 0 (car la fonction est convexe et croissante sur [- 1;0] et les xn seront des valeurs approchées de b par excés). On tape :
    Newtonvaleur(x0):={
      local j,f,g,h;
      f(x):=x*exp(x)+0.2;
      g(x):=(x+1)*exp(x);
      h(x):=x-f(x)/g(x);
      pour j de 1 jusque 5 faire
        x0:=h(x0);
      fpour;
      retourne x0;
    }:;
    
    Remarque
    On peut remplacer g(x):=(x+1)*exp(x); par g:=function_diff(f);
    On tape pour avoir la valeur de x5 qui approche a :
    Newtonvaleur(-2.)
    On obtient :
    -2.54264135777
    On tape pour avoir la valeur de x5 qui approche b :
    Newtonvaleur(0)
    On obtient :
    -0.259171101819

  3. Si on veut avoir une valeur approchée de a (resp b) à eps prés, il faut avoir un xj qui vérifie xj - eps $ \leq$ a < xj (resp xj - eps $ \leq$ b < xj) c'est à dire f (xj - eps) > 0 (resp f (xj - eps) < 0) i.e. on doit avoir dans les 2 cas, f (xj - eps)*f (x0) $ \leq$ 0 On tape :
    Newtonvalpres(x0,eps):={
      local j,g,h,t,s;
      f(x):=x*exp(x)+0.2;
      g(x):=(x+1)*exp(x);
      h(x):=x-f(x)/g(x);
      j:=0;
      t:=x0-eps;
      //s:=ifte(f(x0)>0,1,-1);
      s:=sign(f(x0));
      tantque s*f(t)>0 faire
        x0:=h(x0);
        t:=x0-eps;
        j:=j+1;
      ftantque;
      print(j);
      retourne t,x0;
    }:;
    
    On tape pour avoir la valeur de xj qui donne un encadrement de a à 1e - 6 prés :
    Newtonvalpres(-2.,1e-6)
    On obtient pour j = 3 :
    -2.54264235686,-2.54264135686
    On tape pour avoir la valeur de xj qui donne un encadrement de a à 1e - 10 prés :
    Newtonvalpres(-2.,1e-10)
    On obtient pour j = 4 :
    -2.54264135787,-2.54264135777
    On tape pour avoir la valeur de xj qui donne un encadrement de b à 1e - 6 prés :
    Newtonvalpres(0,1e-6)
    On obtient pour j = 4 :
    -0.259172101477,-0.259171101477 On tape pour avoir la valeur de xj qui donne un encadrement de b à 1e - 10 prés :
    Newtonvalpres(0,1e-10)
    On obtient pour j = 5 :
    -0.259171101919,-0.259171101819

  4. y exp(y) + a = 0 a une solution si -exp(- 1) + a $ \leq$ 0 i.e si a < 1/e Cette fonction est définie pour des x tels que x exp(x) = a < 1/e. On résout donc l'équation x exp(x) - 1/e = 0:
    On modifie le programme en :
    Newtonvaleura(x0,a):={
      local j,f,g,h;
      f(x,a):=x*exp(x)+a;
      g(x):=(x+1)*exp(x);
      h(x):=x-f(x,a)/g(x);
      pour j de 1 jusque 5 faire
        x0:=h(x0);
      fpour;
      retourne x0;
    }:;
    
    lorsque a = - 1/e, on a f (0, a) = a < 0 et f (1, a) = e - 1/e > 0. On tape :
    Newtonvaleura(1,-1./e)
    On obtient :
    0.278464542823
    Pour x $ \leq$ 0, a = x*exp(x) $ \leq$ 0 donc l'équation en y, y*exp(y) + x*exp(x) = 0 a une seule solution positive ( y*exp(y) + a vaut a $ \leq$ 0 pour y = 0 et vaut (x(exp(x)2 -1)/(exp(x)) > 0 pour y = - x). On peut donc l'obtenir par la méthode de Newton : on démarre avec y0 = - a car pour x > 0 la courbe de f (x, a) = x*exp(x) + a se trouve au dessus de sa tangente en x = 0 (puisque f"(x) > 0 pour x > 0) et que cette tangente d'équation y = x + a coupe l'axe des x en x = - a.
    Pour 0 < x < 0.278464542823 l'équation en y, y*exp(y) + x*exp(x) = 0 a deux solutions que l'on peut obtenir par la méthode de Newton : on démarre soit par x0 = 0 soit par x0 = - 2.
    On tape :
    Newtonimplicit():={
      local j,f,g,h,a,xj,y0,y,L;
      g(y):=(y+1)*exp(y);
      f(y,a):=y*exp(y)+a;
      pour xj de -4 jusque 0 pas 0.1 faire
      a:=xj*exp(xj);
      h(y):=y-f(y,a)/g(y);
      y0:=-a;
      pour j de 1 jusque 5 faire
        y0:=h(y0);
      fpour;
      L:=L,point(xj+i*y0)
    fpour;
    pour xj de 0 jusque 0.28 pas 0.01 faire
      a:=xj*exp(xj);
      h(y):=y-f(y,a)/g(y);
      y0:=0;
      pour j de 1 jusque 5 faire
        y0:=h(y0);
      fpour;
      L:=L,point(xj+i*y0);
      y0:=-2;
      pour j de 1 jusque 5 faire
        y0:=h(y0);
      fpour;
      L:=L,point(xj+i*y0)
    fpour;
    retourne L;
    }:;
    
    On tape Newtonimplicit()
    On obtient :

    Image xexyey

    On peut vérifier en tapant :
    plotimplicit(x*exp(x)+y*exp(y),[x,y])


next up previous contents index
suivant: La méthode de Newton monter: Exercice sur la méthode précédent: L'énoncé   Table des matières   Index
Documentation de giac écrite par Renée De Graeve