IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Méthode du point fixe avec un pointeur de fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut Méthode du point fixe avec un pointeur de fonction
    Bonjour,

    pouvez vous m'aider à comprendre pourquoi ce code ne donne pas le bon résultat ?

    J'attends 0.66 comme solution finale, et j'obtiens quelque chose qui varie avec la valeur de départ de x.

    Merci beaucoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    #define a 3.0
    #define b -5.0
    #define c 2.0
     
    /*
     * Il s'agit ici de resoudre par le point fixe
     * l'equation du second degre 3x^2 - 5x + 2
     * La solution exacte est donnee par
     * delta = 25 - 24 = 1
     *       5 - 1            5 + 1
     * s1 = --------   s2 = ---------
     *         6                6
     *
     * s1 = 1 ; s2 = (2/3)
     *
     * La methode du point fixe resout une equation
     * du type x=f(x)
     *
     * Ici, on cherche
     *        -2
     * x = --------
     *      3x - 5
     *
     */
     
    /*prototypes*/
    double fonction(double) ;
    double point_fixe(double (*)(double), double) ;
     
    int main(void)
    {
        /* fonction principale */
        double x_depart = 0. ;
        puts("resolution de 3x**2 + 5x + 2 = 0 par le point fixe") ;
        printf("la solution est %lf",point_fixe(&fonction, x_depart)) ;
        return 0 ;
    }
     
    double point_fixe( double (*a_function)(double) , double start )
    {
        /*algorithme itératif du point fixe x_n+1 = f(x_n)*/
        double epsilon ;
        double x_0 ;
        double x_1 ;
        epsilon = 1 ;
        x_0 = start ;
        while ( epsilon > 0.00001)
        {
    	    x_1 = x_0 ;
    	    x_0 = (*a_function)(x_0) ;
    	    epsilon = abs( x_0 - x_1 ) ;
        }
        return x_0 ;
    }
     
    double fonction(double x)
    {
        /*fonction a utiliser pour trouver la racine du polynome*/
        double resultat ;
        resultat = ( -c / ( a*x + b ) ) ;
        return resultat ;
    }

  2. #2
    Membre éprouvé Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Par défaut
    Salut,
    la fonction abs a pour format:
    int abs ( int n );
    ou
    long abs ( long n );
    elle ne prend pas de double, remplace abs par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(epsilon<0)epsilon=-epsilon
    PS: initialise tes variables aussi cela sera plus propre.

    j'oubliai ta fonction à 2 points fixe (0.66 , 1). Donc en fonction de ta valeur de départ tu tomberas sur 0.66 ou 1.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Merci beaucoup, je vois où est l'erreur. Il vaut mieux utiliser fabs.

  4. #4
    Membre éprouvé Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Par défaut
    En effet je ne connaissais pas merci pour l'info 'fabs'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode des points fixes
    Par brunetta24 dans le forum MATLAB
    Réponses: 7
    Dernier message: 14/05/2011, 19h20
  2. Méthode des points fixes des calculs numériques
    Par brunetta24 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 11/05/2011, 21h24
  3. Soucis avec un pointeur de fonction
    Par Masanori dans le forum C++
    Réponses: 2
    Dernier message: 30/03/2009, 11h01
  4. Réponses: 11
    Dernier message: 11/04/2007, 18h33
  5. Comment fait ça avec les pointeurs, la fonction et les struc
    Par mahdianis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/02/2006, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo