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 :

résolution de fonction


Sujet :

C

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Points : 34
    Points
    34
    Par défaut résolution de fonction
    Bonjour,
    j'aimerais créer un programme qui résout une fonction quelconque f(x)=0 dans un intervalle donné.
    J'ai essayé d'utiliser un algorithme de force brute (essayant toute les possibilités) cependant cela prend énormément de temps lorsque l'intervalle est grande.
    J'ai ensuite essaye d'utiliser un système de pas pour accélérer la résolution
    par exemple avec un pas de 1, lorsque f(5)>0 et f(6)<0, on teste toute les possibilités l'intervalle [5,6]. Mais cela pose encore problème pour quelques fonctions. (pour x<5.2, f(x) négatif, 5.2<x<5.6, f(x) positif, 5.6<x, f(x) négatif, donc le programme ne détecte pas le changement de signe)
    Donc avez vous une idée pour améliorer la performance de l'algorithme de force brute ? ou avez vous un autre algorithme pour résoudre une fonction ?
    merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Sachant que les fonctions peuvent avoir une infinité de solution, utiliser la force brute ....

    Pourquoi ne pas résoudre l'équation tout simplement ?
    Tu détermine les types d'équations :
    f(x) = k
    f(x) = ax + b
    f(x) = ax² + bx + c
    Pour les inéquations tu utilises la dérivée.

    Et ainsi tu obtient les intervalles des solutions et la solution sera l'intersection de tous les ensembles solutions de chaque (in/)équation.

    Après, certains logiciels font déjà cela comme le solveur d'open office.
    Il serait donc intéressant de voir comment ils procèdent.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par foobar42 Voir le message
    ...cependant cela prend énormément de temps lorsque l'intervalle est grande.
    Surtout qu'il y a une infinité (au sens littéral) de nombres entre deux nombres quelconques...

    Citation Envoyé par foobar42 Voir le message
    J'ai ensuite essaye d'utiliser un système de pas pour accélérer la résolution
    par exemple avec un pas de 1, lorsque f(5)>0 et f(6)<0, on teste toute les possibilités l'intervalle [5,6]. Mais cela pose encore problème pour quelques fonctions. (pour x<5.2, f(x) négatif, 5.2<x<5.6, f(x) positif, 5.6<x, f(x) négatif, donc le programme ne détecte pas le changement de signe)
    Donc avez vous une idée pour améliorer la performance de l'algorithme de force brute ? ou avez vous un autre algorithme pour résoudre une fonction ?
    merci d'avance
    Tu y étais presque. Il te faut passer par la dichotomie. Tu prends une plage, par exemple ton [5; 6] et tu y rajoutes le milieu (5.5).
    Ensuite, avec f(5) > 0, f(6) < 0 tu regardes f(5.5)
    Si f(5.5) > 0 alors la solution est entre f(5.5) et f(6) donc tu repars de là. Au contraire, si f(5.5) < 0 alors la solution est entre f(5) et f(5.5) donc tu repars de là.
    Et tu recommences avec tes 2 nouvelles bornes...

    Bon bien entendu il te faut au préalable t'assurer que f(x)=K admette au-moins une solution, que la solution se trouve dans l'intervalle choisi et qu'elle soit continue sur cet intervalle. De plus, cette méthode ne te permettra de trouver qu'une seule solution dans le cas où plusieurs seraient possibles. Mais que veux-tu: cela fait des siècles que les mathématiciens essaient de résoudre ce problème (de façon complète s'entend) et n'y arrivent pas (je dirais même que cela est impossible)...
    http://www.developpez.net/forums/d12...on-dichotomie/
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Résolution 2 fonctions implicites
    Par boss89 dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/04/2014, 17h15
  2. redirection en fonction de la résolution d'écran
    Par finalfx dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/11/2006, 01h26
  3. problème positionnement en fonction de la résolution
    Par zodd dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 10/10/2006, 09h12
  4. Réponses: 1
    Dernier message: 24/07/2006, 17h28
  5. hauteur d une balise div en fonction de la résolution
    Par echecetmat dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/01/2005, 10h51

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