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 :

Valeurs d'un polynome


Sujet :

C++

  1. #1
    BNS
    BNS est déconnecté
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Points : 45
    Points
    45
    Par défaut Valeurs d'un polynome
    Bonjour à tous!
    Je fais un programme en C++ ou je dois determiner les valeurs d'un polynome pour des entiers allant de 0 à 480.
    Le polynome est le suivant:
    y = 0,000000000322x5 - 0,000000257756x4 + 0,000081114881x3 - 0,008665354105x2 + 1,177898003058x - 2,112511004321

    Il est un peu compliqué, mais il faut ce qu'il faut pour etre le plus précis possible

    Je programme le tout dans une nouvelle classe:

    class CRoom
    {
    private:
    double a5, a4, a3, a2, a1, a0;
    public:
    CRoom(void);
    ~CRoom(void);

    int power(int value, int n);
    double fonction(int x);
    };
    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
    CRoom::CRoom(void)
    {
    	a5 = 3.22e-10 ;
    	a4 = 2.57756e-7;
    	a3 = 8.1114881e-5;
    	a2 = 8.665354105e-3;
    	a1 = 1,177898003058 ;
    	a0 = 2,112511004321 ;
    }
     
    CRoom::~CRoom(void)
    {
    }
     
    int CRoom::power(int value, int n)
    {
    	int result=1;
    	for (int i=1;i<=n;i++)
    	{
    		result=value*result;
    	}
    	return result;
    }
     
    double CRoom::fonction(int x)
    {
    	double y;
    	if (x>=4)
    	{
    		y = a5*power(x,5) - a4*power(x,4) + a3*power(x,3) - a2*power(x,2) + a1*x - a0 ;
    	}
    	else y = 0;
    	return y;
    }
    Mais voila, au moment de lire les resultats donnés par la fonction, ben je tombe de haut: les données ne sont pas celles attendues.
    D'ou pourrait venir l'erreur? De la définition de mes a(i) dans mon constructeur?
    Merci d'avance pour votre aide

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Si tu veux avoir la version la plus précise du résultat, ce n'est pas ainsi qu'il faut procéder, mais factoriser le polynôme d'abord sous une forme a + x * (b + x * (c + x * (...))). De plus, ça t'économisera des appels coûteux à pow - pow prend 2 doubles en paramètres, non ? -

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par BNS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	a1 = 1,177898003058 ;
    	a0 = 2,112511004321 ;
    Les virgules me semblent bizarres a cet endroit.

    J'ai la flemme de faire l'analyse necessaire pour savoir comment calculer le polynome de facon reellement precise. Je ne suis pas si sur que cela qu'utiliser Horner soit meilleur qu'utiliser pow (ca risque de dependre de la precision de la bibliotheque d'ailleurs).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    BNS
    BNS est déconnecté
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Points : 45
    Points
    45
    Par défaut
    Merci à vous deux, l'un pour son conseil pour optimiser un peu le calcul, l'autre pour avoir remarqué l'erreur de virgule!

  5. #5
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Quand je vois des coefficients à 10e-10, je te dis attention aux problèmes de conditionnements....

  6. #6
    BNS
    BNS est déconnecté
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Points : 45
    Points
    45
    Par défaut
    Problèmes de conditionnement? C'est à dire?

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Si tu ne fais pas gaffe à ton opération, les précisions apportées par le coefficient a5 seront perdues.

  8. #8
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    hé oui.... Le calcul numérique réserve parfois bien des surprises...
    Ce qui compte, ce n'est pas forcément la précision que tu donnes à tes variables, mais plutôt la manière de t'en servir!
    Par exemple, certains algorithmes convergent très bien avec des conditions initiales "à la louche" alors que d'autres divergent avec des conditions initiales très précises.
    Idem pour les matrices...

    Je dis juste ça pour te prévenir : tu as un rapport 10000000000 entre ton plus grand et ton plus petit coefficient: ça veut dire attention!
    Mais je te rassure, ces problèmes n'arrivent pas tous les jours non plus!

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

Discussions similaires

  1. Trouver racines polynomes (par recherche de valeurs propres)
    Par membreComplexe12 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 29/10/2011, 10h20
  2. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45
  3. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  4. [XSLT]position d'un element de valeur specifique
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/07/2002, 16h42
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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