Recherche de zero d'une fonction...
Résolu
Utilisateur anonyme
-
pom -
pom -
A voir également:
- Recherche de zero d'une fonction...
- Remettre a zero un pc - Guide
- Fonction si et - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Je recherche une chanson - Guide
3 réponses
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
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
merci beaucoup, le pb c ke je ne peux pas utiliser cette méthode dans le devoir qu'on nous a donné :-S
Salut, plusieurs choses tout d'abord
Je pen se que ton erreur vient de ton main :
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; }