Rechercher : dans
Par :

Recherche de zero d'une fonction...

Dernière réponse le 1 mai 2006 à 19:06:45 audrey75, le 30 avr 2006 à 15:51:12 
 Signaler ce message aux modérateurs

Bonjour à tous
débutante en programmation, jai tenté de rédiger un programme permettant de trouver les racines de la fonction f=(1/2) - (x^2) sur l'interval [0,1]. pour cela je veux utiliser la méthode de pas. jai donc tapé ceci :
voici mon nouveau programme ( VERSION MODIFIEE !!! )

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double delta_x = pow ( 10 , (-8) );

double f ( double x )
{
double y;
y = 0.5 - x*x;
return y;
}

double systematique (void)
{
double x;
double f ( double x );
for ( x=0 ; x<=1 ; x = x + delta_x )
{
if ( fabs (f(x))==0 ) return x;
}
}

int main ()
{
double x;
double f(double x);
double systematique ();
double zero;
zero = systematique();
printf ( "%lf est une racine de f", zero );
return 0;
}

Le problème c'est que j'obtient tj le même résultat : 0,000 est une racine de f
or, 0 n'est pas le bonne réponse
quelq'un pourrait-il me dire ou est l'erreur ? j'obtient la même chose en utilisant une fonction epsilon petite et en écrivant : if ( fabs(f(x))<eps)
:-(

Meilleures réponses pour « recherche de zero d'une fonction... » dans :
[VBA] RechercheV Polyvalente VoirRECHERCHE POLYVALENTE Pour les accros et les inconditionnels des fonctions d'Excel, avant de crier au scandale, lisez les quelques lignes suivantes. La RechercheV d'origine a beaucoup de limites: La colonne de la donnée doit être avec un offset...
Comment utiliser efficacement les moteurs de recherche ? VoirComment utiliser efficacement les moteurs de recherche ? Si Internet représente une masse d'informations colossale, il peut être fastidieux de trouver le renseignement que vous recherchez. Pourtant, il est possible d’optimiser ses requêtes pour...
Google - Fonction calculatrice VoirGoogle dispose d'une calculatrice intégrée. Pour l'utiliser, il suffit simplement d'entrer une expression dans le champ de saisie et de lancer la recherche ! Cette fonction est aussi accessible à partir de la barre Google ou des navigateurs...
Web - Moteur de recherche VoirIl existe une énorme quantité d'informations sur Internet (plusieurs millions ou milliards de documents), et ces informations sont pour la plupart renouvelées quotidiennement. Le moteur de recherche est un élément indispensable pour s'y...

1

bobcarter, le 30 avr 2006 à 17:21:40

Salut
j'ai pas eu le temps de lire ton programme pour retrouver ton erreur parceque je suis tres oqp en meme tps.
Mais je peux te conseiller, tu peux utiliser la methode de dichotomie pour retrouver le zero de ta fonction.Elle est dejà interessante parceque ta fonction f=(1/2) - (x^2) est positive en a=0 et et negative en b=1. Alors tu peux utiliser la methode de dichotomie parceque la condition f(a)*f(b)<0 est respectée.Donc à chaque iteration tu divisera ton intervalle [a, b] en deux parties et tu gardera que la partie ou la condition f(a)*f(b)<0 est respectée.

Pour etre plus clair tu fais c=(a+b)/2 et tu as tes deux intervalles [a c] et [c b]. tu verifie si f(a)*f(c)<0 alors tu es sure de trouver ton zero dans l'intervalle [a c] dc tu redui ton intervalle en disant b=c. si la condition f(a)*f(c)<0 n'est pas vrai alors le zero de ta fonction se trouve plustot dans l'intervalle [c b] , donc tu fais a=c .
Ainsi tu fais une boucle qui s'arretera quand ton intervalle [a b] sera tres petit. (b-a<precision ); Ta fonction ressemblera à ce qui suit .

#include <stdio.h>
#include <math.h>

double dichotomie (double a, double b, double eps,
double (*f)(double))

{
double e,em,c,fa,fb,fc;

fa=f(a); /* valeurs de la fonction */
fb=f(b);
e=b-a; /* longueur intervalle initial */
em=eps*(fabs(a)+fabs(b));
while (e>em) { /* condition de convergence */
c=(a+b)/2.0; /* milieu intervalle courant */
fc=f(c);
if (fa*fc<0.0) { /* [a,b] --> [a,c] */
b=c; fb=fc;
}
else { /* [a,b] --> [c,b] */
a=c; fa=fc;
}
e=b-a; /* nouvelle longueur */
em=eps*(fabs(a)+fabs(b));
}
return c; /* c est la solution cherchée */
}

Bnne chance
Bobby

Répondre à bobcarter

2

audrey75, le 30 avr 2006 à 17:27:33

Merci beaucoup, le pb c ke je ne peux pas utiliser cette méthode dans le devoir qu'on nous a donné :-S

Répondre à audrey75

3

bobcarter, le 30 avr 2006 à 17:42:45

Il n y a pas de koi.
Si g le tps j regarderai unpeu ton programe mais c pas evidement pour moi.
bnne chance

Répondre à bobcarter

4

 pom, le 1 mai 2006 à 19:06:45

Salut, plusieurs choses tout d'abord
Je pen se que ton erreur vient de ton main :

int main () 
{ 
double x; <-- par défaut x vaut 0 (sauf erreur de ma part)
double f(double x);  <-- pour appeler f tu dois écrire double d1=f(x)
double systematique (); <-- dans ta fonction systematique x vaut 0, pourquoi ne mets tu pas x en argument de cette fonction ?
double zero; 
zero = systematique(); <-- pourquoi appelles-tu deux fois cette fonction ?
printf ( "%lf est une racine de f", zero ); 
return 0; 
} 

Répondre à pom
Collection CommentÇaMarche.net