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 :

Trouver le z�ro d'une fonction


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par d�faut Trouver le z�ro d'une fonction
    Bonjour,

    Je souhaiterais savoir s'il existe en C++ une fonction qui permette de trouver directement le z�ro d'une fonction.

    Je vous remercie par avance,

    Cordialement.

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Bonjour,
    En C++ uniquement, non, par contre, dans l'une des nombreuses biblioth�ques de math�matiques, certainement.

    Regarde du cot� de boost, notamment Boost.Math

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par d�faut
    Bonjour,

    Merci pour votre r�ponse.

    J'ai regard� dans la biblioth�que Boost Math.
    Je n'ai pas trouv� de fonction permettant de r�soudre une �quation, je suis cependant d�butante en C++.

    Sachant que je souhaiterais que la fonction me rende une solution num�rique (donc non exacte), connaissez-vous un autre moyen de faire ?

    Je vous remercie par avance,

    Cordialement.

  4. #4
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Et bien, programmer le calcul.

    Certes, c'est bien de ne pas r�inventer la roue, mais vient un moment o� c'est plus rapide, et surtout plus formateur.

    Quelle est ta situation pr�cise?
    Dois-tu pouvoir d�terminer {x de R | f(x)=0} pour toute fonction f qu'on te donnerai?
    Si oui, comment te la donnerait-on? par sa forme analytique (f(x)=2x�-1) ou par une fonction pr�cod�e?

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par d�faut
    Je voudrais rentrer la fonction par une forme analytique.
    La fonction est :

    f(x(k))=-x(k)*exp(-(x(k)+t)) +10.

    Je voudrais trouver la valeur x(0) de x qui annule la fonction pour t=0.
    Puis la valeur x(1) de x qui annule la fonction pour t=x(0).
    Puis la valeur x(2) de x qui annule la fonction pour t=x(0)+x(1).
    etc.

    Je voudrais que les valeurs x(0), x(1) et x(2) soient num�riques avec une pr�cision de 15 chiffres apr�s la virgule.

    Merci par avance.

  6. #6
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Premi�rement, la pr�cision � 15 chiffres, ce n'est pas facilement possible. (cf le format flottant
    Il faut te tourner vers des outils sp�cialis�s.

    Enfin, n�gligeons ce d�tail.
    Quand je disais la forme analytique, je voulais d�signer ceci (ou pire encore):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    int main() {
        string equation = "f(x(k))=-x(k)*exp(-(x(k)+t)) +10";
        cout << equation << " a pour zéro : " << search_zero(equation) << endl;
        return 0;
    }
    Commen�ons par le d�but, sais-tu comment t'y prendre math�matiquement parlant? Autrement dit, si tu n'avais qu'un crayon, que ferais-tu?

    Il ne faut pas oublier qu'un ordinateur est une calculette g�ante, super rapide, mais qui fais ce qu'on lui dit.
    Et qu'un programme n'est qu'une mani�re de lui dire que faire.

    La seule vraie limite d'un langage est: "Il n'est possible de programmer que ce qu'on peut expliquer."

    tu cherches donc la solution de -x*exp(-(x+t)) +10 == 0
    c'est-�-dire 10 = x * exp(-(x+t))
    commence par ecrire une petite fonction:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    double f(double x, double t) {
        return -x * exp(-(x+t)) +10;
    }
    Ton probl�me devient alors d'�crire la fonction double chercher_zero(double x, double t); qui devrait retourner le zero de f pour un x et un t donn�.


    Pour l'usage futur, tu peux envisager ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class exponentielle {
    private:
        double decalage;
    public:
        explicit exponentielle(double d) : decalage(d) {}
        double operator()(double x, double t) const {
            return -x * exp(-(x+t)) + decalage;
        }
    };
    //exemple d'usage
    int main() {
        exponentielle e10(10);
        std::cout << " à t=0, f(4) = " << e10(4) << std::endl;
    }

Discussions similaires

  1. Trouver rapidement les z�ros d'une fonction
    Par nahouto dans le forum MATLAB
    R�ponses: 17
    Dernier message: 23/01/2009, 13h32
  2. Trouver le minimum d'une fonction � 3 variables
    Par QuintusII dans le forum MATLAB
    R�ponses: 13
    Dernier message: 08/12/2008, 14h19
  3. Trouver l'erreur dans une fonction
    Par Seth77 dans le forum Langage
    R�ponses: 4
    Dernier message: 28/06/2006, 16h38
  4. Diff�rentes m�thodes de d�termination du z�ro d'une fonction
    Par Desperados dans le forum Math�matiques
    R�ponses: 4
    Dernier message: 30/05/2006, 22h29
  5. R�ponses: 6
    Dernier message: 12/05/2006, 15h20

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