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

Algorithmes et structures de données Discussion :

Recherche de la racine mini d'une fonction inconnue - Le retour


Sujet :

Algorithmes et structures de données

  1. #1
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut Recherche de la racine mini d'une fonction inconnue - Le retour
    Bonsoir,

    Je reviens sur un de mes précédents post (dispo là), parce que les solutions proposées ne me conviennent plus (bah oui, à force, on devient exigeant !). Elles fonctionnent très bien, mais je souhaiterais optimiser un peu plus la résolution.

    Je vais imager un peu plus que la dernière fois. Je travaille donc avec une matrice dont les termes sont dépendants d'une variable k. Je calcule le déterminant de cette matrice, et je cherche à trouver la valeur minimale de k qui annule ce déterminant (k strictement positif).

    L'allure de l'évolution du déterminant en fonction de k peut être assimilé pour ce sujet à une sinusoïde d'amplitude décroissante lorsque k augmente. Evidemment, la période de la sinusoïde varie avec les données de base, donc on ne peut pas trop prévoir la plage de résultat (sauf que ça sera entre 0 et 100000... mais ça fait un peu large!).

    Le but de la manoeuvre est donc de trouver la plus petite valeur de k qui annule le déterminant.

    J'ai testé, pour le moment:
    1. un algo incrémental: on part de k=0, et on augmente par pas de dk. On détecte la racine dès qu'il y a un changement de signe du déterminant entre deux pas consécutifs (éventuellement, pour améliorer la précision, on revient au pas précédent, on divise le pas par 10, et on recommence). Problème: c'est relativement long si la racine est à 10 et que l'on a besoin d'un pas de 0.001 pour ne pas rater la racine...
    2. un algo type Newton. Très rapide. Rien à dire sur ce point. Problème: ne trouve pas forcément la racine minimale... je l'ai abandonné au profit de l'algo n°1
    3. un algo de résolution par intervalles.. euh, non, pas encore testé... pas tout compris à la méthode... si quelqu'un a une doc explicite à me conseiller...
    jobhertz m'avait conseillé à l'époque de me tourner éventuellement vers un algo avec pas adaptatif. Est-ce que ceci pourrait améliorer les choses dans le cas présent? (je n'ai pas trouvé de doc convaincante pour le moment pour répondre moi-même à la question...)

    Si vous avez d'autres idées à proposer, je suis preneur.

    Merci d'avance.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    premiere idée a chaud, pltot que d'utiliser un pas constant, vu que tu travaille sur des ordres de grandeurs large, essaie de passer en logarithme. comme ca, tu auras toujours une bonne precision a ordre de grandeur donné. en gros, au lieu d'ajouter un dx, mutliplie par (1+dx). comme ca, plus x est grand, plus le pas est grand.. ca n'est pas vraiment un pas adaptatif, c'est plus un truc qui marche bien dans certains cas, typiquement quand on manipule des frequences.
    Pour un vrai pas adaptatif, l'ide est d'avoir un pas d'autant plus grand que la pente (donc la dérivée) est faible, et reciproquement. mis ca n'est pas garanti.

    mais c'est plus ou moins ce que fait newton, c'est curieux qu'il saute une racine ?? tu lui donne bien 0 comme valeur initiale ? c'est peut etre justement un pb d'ordre de grandeur, donc CF plus haut..

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    La méthode de Newton permet de trouver une racine, mais pas forcément la plus petite.
    Ici, si la fonction est positive en 0 et que sa dérivée s'annule en un point x0 entre 0 et le plus petit k tel que f(k)=0, et si on se retrouve très proche de x0 lors d'une itération, on va certainement sauter vers une autre période, non ?
    Il suffit peut-être d'utiliser cette méthode en réduisant le pas quand la dérivée est faible pour réduire les risques de se retrouver sur une autre période ?
    [Edit] Par exemple, pour une fonction sinusoidale de péridoe constante, on pourrait remplacer la valeur de la dérivée en x par min(1/2+epsilon,f'(x))

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par borisd
    Ici, si la fonction est positive en 0 et que sa dérivée s'annule en un point x0 entre 0 et le plus petit k tel que f(k)=0, et si on se retrouve très proche de x0 lors d'une itération, on va certainement sauter vers une autre période, non ?
    C'est exactement ça... pour les petites valeurs de x (proche de 0), la dérivée est "faible", ce qui fait qu'on peut très bien basculer sur une autre "période" en cours d'algorithme. Et rien n'empêche de basculer à nouveau ultérieurement, vu que la fonction oscille continûement...

    Citation Envoyé par borisd
    Il suffit peut-être d'utiliser cette méthode en réduisant le pas quand la dérivée est faible pour réduire les risques de se retrouver sur une autre période ?
    [Edit] Par exemple, pour une fonction sinusoidale de péridoe constante, on pourrait remplacer la valeur de la dérivée en x par min(1/2+epsilon,f'(x))
    je viens juste d'y penser à basculer en progression itérative quand la dérivée est "faible", et passer en newton dès que la dérivée le permet.... je vais aller tester ça, té! Si j'arrive à trouver une valeur qui fasse la frontière entre "faible" et pas "faible".
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    As-tu essayé le théorème de Sturm?

    http://fr.wikipedia.org/wiki/Th%C3%A...%A8me_de_Sturm

    appliqué à la "forme" de ton polynôme en k, cela peut t'aider...
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par Nemerle
    As-tu essayé le théorème de Sturm?

    http://fr.wikipedia.org/wiki/Th%C3%A...%A8me_de_Sturm

    appliqué à la "forme" de ton polynôme en k, cela peut t'aider...
    En effet, on doit pouvoir utiliser ce théorème dans une méthode dichotomique pour trouver le plus petit x dans [0,somme(|coeffs|)] tel que sigma(0)-sigma(x)=1 (ou le plus grand x tel que sigma(0)-sigma(x)=0).

  7. #7
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    tout à fait, c'est généralement la dichotomie qui est utilisée
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  8. #8
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par Nemerle
    As-tu essayé le théorème de Sturm?

    http://fr.wikipedia.org/wiki/Th%C3%A...%A8me_de_Sturm

    appliqué à la "forme" de ton polynôme en k, cela peut t'aider...
    Euh... oui... enfin... mon polynôme en k, c'est le déterminant d'un matrice carré de dimension 50 en ce moment... je me vois mal calculer son expression à la mano pour appliquer le théorème...
    Je peux descendre jusqu'à une dimension 20 sans trop perdre en précision sur la solution, mais même là, c'est pas calculable comme polynôme...
    C'est dommage, mais je me garde quand même ce théorème pour le jour où...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  9. #9
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    pourquoi cacluler le det à la mano?

    La méthode de Kramer est algorithmique!!
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  10. #10
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par Nemerle
    pourquoi cacluler le det à la mano?

    La méthode de Kramer est algorithmique!!
    Ouaip, ok... même si je passe par une décomposition LU plutôt (d'ailleurs, je crois me souvenir avoir lu sur ce forum qu'il valait mieux passer par une décomposition LU que par Kramer pour calculer un déterminant... mais je ne sais plus si c'est pour une question de rapidité ou de précision...)

    Mais bon, là n'est pas la question. Je n'ai pas dû bien comprendre le théorème de Sturm alors. Je l'applique comment si je n'ai que les valeurs numériques de ma fonction? Avec l'expression littérale d'une fonction, ça marche très bien. Mais avec mes nombres... je vois mal... voire pas du tout!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  11. #11
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    tu changes d'énoncé: avant tu avais un déterminant en k, soit une fct littérale!

    Citation Envoyé par plegat
    Je vais imager un peu plus que la dernière fois. Je travaille donc avec une matrice dont les termes sont dépendants d'une variable k. Je calcule le déterminant de cette matrice, et je cherche à trouver la valeur minimale de k qui annule ce déterminant (k strictement positif).

    Dans le cas où tu as une famille de valeurs de la fonction, déterminer "la + petite racine", n'a pas de sens il faut que tu "choisisses" le type de fonction associée...
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  12. #12
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par Nemerle
    tu changes d'énoncé: avant tu avais un déterminant en k, soit une fct littérale!
    Nan nan nan, je ne change pas l'énoncé! (ou alors je n'ai pas fait exprès de faire une phrase douteuse...)
    Les termes de ma matrice sont des fonctions de k, que je connais littéralement.
    Le déterminant de ma matrice est également une fonction de k, que je ne connais pas littéralement. Je pourrais, mais pour avoir l'expression littérale du déterminant d'une matrice 100x100, euh... je ne me le sens pas du tout... c'est faisable, mais honnêtement, j'ai autre chose à foutre (entendre par là, je n'ai pas le budget horaire pour m'atteler à la tâche, et le reste de l'étude à faire avancer... )

    Citation Envoyé par Nemerle
    Dans le cas où tu as une famille de valeurs de la fonction, déterminer "la + petite racine", n'a pas de sens il faut que tu "choisisses" le type de fonction associée...
    Pas tout compris là...
    J'ai une fonction continue de R+ dans R, pour chaque valeur de k une valeur de déterminant, les valeurs pouvant prendre des valeurs positives ou négatives. Qu'est-ce qui m'empêche d'avoir des racines? C'est peut-être le mot "racine" qui prête à confusion? En tous cas, si ma fonction continue passe par des valeurs positives et négatives, c'est bien qu'elle s'annule quelque part...

    Je vais préparer un exemple, ça permettra d'avoir un problème pratique et concret...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  13. #13
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Je remonte un vieux post du fond des entrailles, juste pour le passer en résolu.
    J'ai pu ramener le problème à une recherche de valeurs propres... c'était si simple que je ne l'avais même pas vu...
    Donc plus besoin de calculer de déterminant, ni de minimum...

    Merci encore à tous ceux qui ont participé
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  14. #14
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par plegat Voir le message
    Je remonte un vieux post du fond des entrailles, juste pour le passer en résolu.
    Le syndrome "Cold Case".

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

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

Discussions similaires

  1. racines reelles d'une fonction
    Par devlop_RO dans le forum MATLAB
    Réponses: 5
    Dernier message: 08/08/2010, 18h26
  2. Réponses: 3
    Dernier message: 01/05/2007, 12h03
  3. Recherche de la racine mini d'une fonction inconnue
    Par plegat dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 31/07/2006, 19h39
  4. cherche une fonction qui permet de faire une recherche
    Par vbcasimir dans le forum Langage
    Réponses: 7
    Dernier message: 01/09/2005, 17h24
  5. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34

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