LaDissertation.com - Dissertations, fiches de lectures, exemples du BAC
Recherche

Programme matlab

Compte rendu : Programme matlab. Recherche parmi 300 000+ dissertations

Par   •  8 Novembre 2021  •  Compte rendu  •  1 831 Mots (8 Pages)  •  345 Vues

Page 1 sur 8

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)

...

Télécharger au format  txt (8.6 Kb)   pdf (180.8 Kb)   docx (40.7 Kb)  
Voir 7 pages de plus »
Uniquement disponible sur LaDissertation.com