Partage
  • Partager sur Facebook
  • Partager sur Twitter

programmer la fonction W

    2 décembre 2011 à 21:13:17

    Salut tous,

    j'ai une expression analytique où je dois trouver Y connaissant X. Le probleme est que la fonction qui lit Y à X est la fonction W :
    http://fr.wikipedia.org/wiki/Fonction_W_de_Lambert

    le probleme est que cette fonction n'est pas pré-programmée dans la plupart des langages, je voudrais savoir comment faire ceci ?

    => par exemple si je veux calculer y=W(exp(X)) avec X qui varie de 1e-5 en 1e-5 de 1e-10 à 1 ?

    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2011 à 21:24:26

      Le plus simple est surement de résoudre numériquement l'équation <math>\(Ye^Y-e^X = 0\)</math> (pour <math>\(X\)</math> fixé), par exemple avec la méthode de Newton (en partant par exemple de <math>\(Y_0=0\)</math>).


      Edit : après réflexion, partir de <math>\(0\)</math> ne me semble pas être la meilleur idée. Après rapide étude, on sait que ta solution se trouve entre <math>\(0\)</math> et <math>\(1\)</math> (et même <math>\(0.5\)</math> et <math>\(1\)</math>*), partir de <math>\(0.5\)</math>, <math>\(0.75\)</math> ou <math>\(1\)</math> doit être un peu mieux (en plus de partir plus près de la solution, les dérivées y sont plus grande qu'en zéro, donc ça doit converger plus vite).

      * <math>\(1\times e^1 = e^1\)</math>, donc pour <math>\(X=1\)</math>, <math>\(Y=1\)</math>,
      <math>\(0.5\times e^{0.5}<1<e^{10^{-10}}\)</math> donc pour <math>\(X=10^{-5}\)</math>, <math>\(Y>0,5\)</math> et la fonction W de Lambert est croissante. Avec cette constatation, on voit que tu peux utiliser une recherche par dichotomie, plus lente, mais qui tu donneras une estimation de l'erreur commise et donc de mieux gérer le nombre d'itérations.
      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2011 à 11:34:20

        merci d'avoir pris le temps de repondre :D

        mais en fait pour des raisons pedagogiques j'aimerai bien savoir comment programmer cette fonction W
        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2011 à 13:51:31

          Commencer par <math>\(y_0 = 0\)</math>  est effectivement moins avantageux que <math>\(y_0 = 1\)</math>, mais cela rajoute en fait peu d'itérations puisque <math>\(y_0 = 0 \implies y_1 = e^x\)</math>.

          <math>\(y_{n+1}=y_n-\frac{y_ne^{y_n} - e^x}{(1+y_n)e^{y_n}}\)</math>

          Quoi qu'il en soit, il est inutile de vouloir faire une méthode de dichotomie étant donné que la méthode de Newton converge toujours extrêmement rapidement dans l'intervalle donné. En seulement 5 itérations, on a déjà une précision de l'ordre de 1e-16 pour tout x dans [0, 1].

          P.S.: Si tu veux la fonction W(x) plutôt que W(exp(x)), utilise :

          <math>\(y_0 = 1\)</math>
          <math>\(y_{n+1}=y_n-\frac{y_ne^{y_n} - x}{(1+y_n)e^{y_n}}\)</math>
          • Partager sur Facebook
          • Partager sur Twitter
            3 décembre 2011 à 15:14:14

            Citation : 21did21

            merci d'avoir pris le temps de repondre :D

            mais en fait pour des raisons pedagogiques j'aimerai bien savoir comment programmer cette fonction W



            Je trouve justement très pédagogique de voir que "dans la vraie vie" beaucoup de fonctions sont calculées numériquement par ce genre de méthode (avec des fois plus de sophistication).

            Par exemple, si je te demandais de programmer la fonction racine carrée, comment ferais-tu ?
            Et bien tu pourrais utiliser la méthode de Newton pour résoudre <math>\(x^2-a=0\)</math> (pour obtenir <math>\(\sqrt{a}\)</math>) une fois <math>\(a\)</math> connu.
            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2011 à 1:07:41

              je vais regarder ceci, merci de votre aide
              • Partager sur Facebook
              • Partager sur Twitter

              programmer la fonction W

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown