Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dérivée sous Scilab

    8 octobre 2018 à 19:56:16

    Salut tout le monde,

    Je suis en train de faire une fonction me permettant de calculer la dérivée d'une fonction en un point donné.

    J'ai réussi à faire quelque chose de propre (la différence de résultat entre ma fonction et numderivative est de l'orde de 10^-9).

    Seulement je viens de voir un truc avec numderivative, c'est que cette fonction ne vérifie pas la dérivabilité d'une fonction en un point (sqrt, abs,..). Je l'ai même testée avec une fonction discontinue, elle me renvoie quand même un résultat.

    Ce qui m'a amené à cette question : y a-t-il un moyen de voir numériquement si une fonction est dérivable en un point ou pas ?

    Merci !

    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2018 à 9:53:35

      je pense que tu peux tester la dérivabilité dans la limite de la précision numérique de la machine.

      Quand on utilise dans scilab \(D=numderivative(f,a,h)\), pour calculer la dérivée en \(a\) avec la précision \(h\), j'ai vu au moins trois cas "pathologiques" que on peut sans doute identifier par des tests  numériques complémentaires  

      1 -si la fonction est continue non dérivable en \(a\) , on peut calculer \(D=numderivative (f,a\pm \epsilon , h\)\) avec un \(\epsilon \) suffisamment petit ( mais supérieur à \(h\) pour que cela marche ) pour avoir une approximation  des dérivées à droite et à gauche en \(a\) .

      Si elles sont égales   à \(D=numderivative(f,a,h)\) en \(a\), ( égalité testée à un seuil fixé de précision )  , on peut condidérer \(f\) dérivable en \(a\) à la précision prés du calcul, sinon non dérivable.
      J'ai fait le test avec \(abs(x)\) on trouve bien  \(D=numderivative (f,abs(x)\pm \epsilon , h =\pm 1\) ,  mais 0 en x=0 ( en fait 0 pour un x extrêmement faible (\(<10^{-70}\) ... ) 

      2- Pour \(\sqrt{x}\), c'est une peu différent car la dérivée tend de façon continue  vers l'infini.  ( de plus la fonction n'est pas définie dans \(\mathbb{R}\)   à gauche ;  si on tape un x négatif, SCILAB sort tranquillement un complexe). Lorsque on calcule \(D=numderivative (f,a\pm \epsilon , h\)\) , D croit continuement jusqu'à des valeurs très élevées .
      Donc on peut avoir un test "valeur très grande"  permettant de façon générale de considérer que la dérivée d'une fonction  est infinie en un point.

      3- Si on considère une fonction discontinue en \(a\),  un simple test \(\vert f(a+\epsilon  )-f(a-\epsilon )\vert\) supérieur à un seuil fixé me semble suffisant pour identifier la discontinuité.

      Donc en résumé si on souhaite intégrer un test numérique de dérivabilité sur une fonction inconnue a priori mais en un point supposé à l’intérieur du domaine de définition de la fonction:

      1-test de continuité   2-si continue, calcul dérivée à gauche, à droite, 3- si inégales, non dérivable , 4- si trop grande, dérivée infinie en \(a\) 4-si égales à la valeur calculée directement en \(a\), dérivable de dérivée \(D=numderivative(f,a,h)\).

      -
      Edité par Sennacherib 9 octobre 2018 à 10:08:55

      • Partager sur Facebook
      • Partager sur Twitter
      tout ce qui est simple est faux, tout ce qui est compliqué est inutilisable
        9 octobre 2018 à 11:24:25

        Merci pour cette réponse détaillée.

        Donc si je comprends on test plutôt la dérivabilité numérique que théorique ?

        Par exemple, si on prend une fonction discontinue f(x)=0 si x<0 et f(x)=10^-20 sinon, l'ordinateur va considérer ça comme continue, et donc dérivable ?

        Et sinon, pour la continuité, c'est le test auquel j'avais pensé, cependant je ne sais pas quel epsilon choisir, ni le seuil fixé. Est-ce qu'il faut prendre juste un peu plus grand que la précision de la machine ? Ou on a pas besoin de faire si petit ?

        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2018 à 12:01:56

          Personnellement, je calculerais (f(X0+h)-f(x0)) / h pour des h de plus en plus petits (positifs et négatifs).

          Si ce ratio donne toujours plus ou moins le même résultat, alors la fonction est continue et dérivable, et la dérivée vaut le ratio en question.

          • Partager sur Facebook
          • Partager sur Twitter
            10 octobre 2018 à 10:08:46

            Une  question est de savoir l'utilité pratique de se préoccuper d'intégrer un tel contrôle dans un programme en fonction de son usage prévu. Scilab ne le fait pas, Matlab non plus je pense .

            Soit on connait explicitement la fonction, et on peut en général identifier de façon théorique les points singuliers.

            Soit on cherche la dérivée  d'une fonction donnée par points, c'est souvent le cas en pratique ( données  expérimentales, fonction obtenue par résolution numérique d'une équation différentielle, etc...) et en général une  fonction physique n'est pas exotique, ou les points particuliers du problème sont identifiables par une étude préalable. ( par exemple si j'étudie le rebond d'une balle, je sais a priori qu'il y aura pour la vitesse une singularité numérique au point d'impact)
            Avec une fonction décrite par points et en l'absence d'indication suffisante a priori sur le phénomène qu'elle traduit , le calcul de la dérivée aura l’imprécision du maillage de la fonction numérique si on utilise les données brutes sans lissage préalable par une approximation polynomiale ou autre.  Mais le calcul après lissage ne garantit pas d'avantage l'identification des singularités qui seront ...lissées.
            Le calcul numérique d'une dérivée d'une fonction numérique  pouvant être  par nature assez imprécis, en physique, il est indispensable de faire une analyse a posteriori pour  identifier les variations suspectes et se poser la question d'un comportement local singulier non identifié par une étude préalable du problème.

            ( numériquement, le calcul d'une dérivée peut être très sensible aux erreurs d'arrondi , de troncature puisque on divise pour le calcul par une valeur h qui tend vers 0, beaucoup plus délicat  que celui du calcul d'une intégrale)

            -
            Edité par Sennacherib 10 octobre 2018 à 10:09:53

            • Partager sur Facebook
            • Partager sur Twitter
            tout ce qui est simple est faux, tout ce qui est compliqué est inutilisable

            Dérivée sous Scilab

            × 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