Probleme en polynomes d'interpolation

Résolu/Fermé
sciencetalker Messages postés 4 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 22 juillet 2009 - 29 mai 2008 à 20:53
sciencetalker Messages postés 4 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 22 juillet 2009 - 31 mai 2008 à 16:25
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 vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 326
29 mai 2008 à 21:31
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 22 juillet 2009
30 mai 2008 à 19:28
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 vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 326 > sciencetalker Messages postés 4 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 22 juillet 2009
30 mai 2008 à 20:52
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 22 juillet 2009 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
31 mai 2008 à 16:25
arigato(merci en japonais) marco, ca m'a vraiment aidé.merci encore une fois!!
0