Programme matlab
Compte rendu : Programme matlab. Recherche parmi 300 000+ dissertationsPar Nada Chhab • 8 Novembre 2021 • Compte rendu • 1 831 Mots (8 Pages) • 345 Vues
voici une fonction "qui marche", sauf dans le cas ou la solution est une des bornes:
int zero2( float a , float b, float *resultat)
{
float epsilon = 0.00001f;
float c;
while(fabs(a-b)>epsilon)
{
c=(a+b)/2.0f;
if (fabs(fonction(c)) < epsilon)
{
*resultat =c;
return 1;
}
else
{
if (fonction(a) > fonction(b))
a=c;
else
b=c;
}
}
return 0;
}
int main ()
{
float x, y,res ;
printf(" entrez x: \n") ;
scanf("%f", &x) ;
printf(" entrez y: \n") ;
scanf("%f", &y) ;
printf("F(%f)=%f; = F(%f)=%f\n", x, fonction( x), y, fonction(y)) ;
if (zero2( x, y, &res)==1)
printf("le zero de la fonction est %f \n", res) ;
else
printf("le zero de la fonction n'est pas dans les bornes [%f, %f] \n", x, y) ;
return 0 ;
}
Edit: pour inclure les bornes, j'ai pas trouvé mieux que de faire un test au début puisque dans la boucle, la division par deux de l'intervalle fait qu'on n'arrive jamais aux bornes:
int zero2( float a , float b, float *resultat)
{
float epsilon = 0.00001f;
float c;
if (fonction(a)<epsilon) //si la première borne est proche de zéro
{
*resultat =a; //on l'indique comme solution
return 1;
}
if (fonction(b)<epsilon) //si la deuxième borne est proche de zéro
{
*resultat =b; // on l'indique comme solution
return 1;
}
while(fabs(a-b)>epsilon) //sinon tant que la distance entre les nornes n'est pas négligeable
{
c=(a+b)/2.0f; // on prends le milieux
if (fabs(fonction(c)) < epsilon) // et l'on teste si cette valeur est proche de zéro
{
*resultat =c; // si c'est le cas, on valide cette réponse
return 1;
}
else // sinon
{
if (fonction(a) - fonction(b) > 0.0f) //on recherche la borne dont le résultat est le plus éloigné du zéro (utilisation de fabs nécessaire peut être pour d'autre fonction qui ne sont pas tjrs>0?)
a=c; //si a est le plus éloigné de zéro, on l'échange
else
b=c; //si b est le plus éloigné de zéro, on l'échange
}
}
return 0;
}
#include <stdlib.h>
#include <math.h> //pour cos, sin ou autre...
int main (int argc, char *argv[])
{
int dichotomie ( double (*)(double), double, double, double*, double); //fonction
double zero , //zero recherché
a, b, //intervalle [a,b]
precision ; //précision voulue
printf("Exemple : \n");
if ( dichotomie (sin, -1.0, 1.0, &zero, 1.0e-2) != -1 ) {// exemple avec sin dans [-1;1]
printf("Zero de la fonction sin dans l'intervalle [-1;1] a 1e-2 pres : \n%le\n", zero);
}
else printf("Erreur.\n");
if ( dichotomie (sin, -1.0, 2.0, &zero, 1.0e-2) != -1 ) {// exemple avec sin dans [-1;2]
printf("Zero de la fonction sin dans l'intervalle [-1;2] a 1e-2 pres : \n%le\n", zero);
}
else printf("Erreur.\n");
system("PAUSE");
return 0;
}
int dichotomie ( double (*f)(double), double a, double b, double* zero, double precision)
...