Probleme en polynomes d'interpolation

Résolu
sciencetalker Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
sciencetalker Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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.

1 réponse

Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329
 
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
sciencetalker Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329 > sciencetalker Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,
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
sciencetalker Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   > Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention  
 
arigato(merci en japonais) marco, ca m'a vraiment aidé.merci encore une fois!!
0