Probleme en polynomes d'interpolation

Résolu
Bonjour,
s'il vous plait que quelqu'un m'aide a faire un programme en c qui trouve le zero d'une fonction avec la methode de bissection (methode de newton).et merci d'avance.
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. Contributeur
    Bonjour,
    Tu supposes que ta fonction ne possède qu'un seul zéro, et qu'elle est monotone sur ton intervalle?
    Tu veux le faire par dichotomie?

    Cordialement,
    0
    1. merci Marco.'cest vrai ce que tu dis mais le problème c'est que j'arrive pas a ecrire correctement un programme en langage c qui trouve le zero d'une fonction quelconque.
      0
    2. Contributeur
      @sciencetalkerBonsoir,
      Je t'ai juste posé des questions. Si ces hypothèses sont respectées, voici grossièrement l'algorithme à implémenter :
      hypothèses supplémentaires : a<b et f non constante sur [a ; b]
      
      fonction trouveZero(fonction f, réel a, réel b, réel positif précision) : réel
       réel milieu = (b-a)/2
       si | f(milieu) | < précision
        retourner milieu
       si (f(a)<f(b) et f(milieu) > précision) ou (f(a)>f(b) et f(milieu) < -précision)
        /*si fonction croissante et f(milieu) positif, 
         *ou si fonction décroissante et f(milieu négatif)
         */
        retourner trouveZero(f, a, f(milieu), précision)
       sinon
        retourner trouveZero(f, f(milieu), b, précision)
      


      Bon, ça c'est récursif, donc c'est joli mais en C, si tu as une précision trop fine, tu vas avoir un débordement de ta pile.

      En itératif, ce serait plutôt un algorithme qui ressemblerait à ça :
      hypothèses supplémentaires : a<b et f non constante sur [a ; b]
      
      fonction trouveZero(fonction f, réel a, réel b, réel précision) : réel
       réel début = a
       réel fin = b
       réel milieu
       booleen croissante
       si f(début)<f(fin) //f croissante
        croissante = vrai
       sinon //f décroissante
        croissante = faux
      
       tant que | f(milieu) | < précision faire
       milieu = fin-début
        si f(milieu) > 0
         si croissante
          fin=milieu
         sinon
          debut=milieu
        sinon
         si croissante
          debut=milieu
         sinon
          fin=milieu
       fin tant que
       retourner milieu
      


      Voilà. Tu peux diminuer le nombre de si-sinon en mettant des 'et' et 'ou' (tu fais ton tableau de Karnaugh pour optimiser tout ça), mais c'est moins parlant.
      Il y a peut-être des erreurs, mais ça doit ressembler à ça.
      Après, pour faire ça en C, c'est tout simple !
      0
    3. @Marco la baraquearigato(merci en japonais) marco, ca m'a vraiment aidé.merci encore une fois!!
      0