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

Fortran Discussion :

Minimisation d'une fonction en Fortran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Par défaut Minimisation d'une fonction en Fortran
    Bonjour,

    Je vous écris car au bord du désespoir après moultes recherches...Je cherche à minimiser une fonction à 2 variables sous Fortran et bien évidemment Fortran ne dispose pas de fonctions internes qui font ce boulot ingrat.

    Je m'explique, je dispose d'une fonction à 2 variables x1 et x2 (f(x1,x2)), je fais varier ces 2 variables en même temps dans des intervalles bornés (x1 réel varie de 0 à 2 et x2 réel varie entre -1 et 1) et le but c'est de trouver la valeur de x1 et la valeur de x2 qui minimisent ma fonction f.

    J'ai vu qu'il existait des fonctions internes préfaites sous d'autres supports tels que mathematica (la fonction "findminimum") ou autre qui font ce genre de choses mais je suis déjà bien engagé en Fortran et je ne peux me permettre de tout recommencer dès le début...

    J'ai aussi fait quelques recherches dans les bibliothèques Lapack mais sans résultat...Suis-je au bord du gouffre... ?

    En vous remerciant pour votre intervention.


    Saad.

  2. #2
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    Bonjour

    Tout dépend de ta fonction f et de ce que tu veux faire ! Ceci dis avec 2 variables ça ne devrait pas être trop difficile.

    Une première façon de faire un peu bourrine serait de faire une boucle sur x1 et sur x2 avec un quadrillage et de trouver le minimum.

    Sinon il faut que tu te poses ces questions :

    Est ce que f(x1,x2) est facile à évaluer ?

    Si oui tu peux tirer aléatoirement x1 et x2 dans l'intervalle que tu connais et tu retiens x1 et x2 qui te donne le f min.

    Est ce que tu connais l'expression anlytique de f et surtout est ce que tu peux calculer la dérivée ?

    Si oui je crois que Numerical Recipes propose des routines de gradient conjugué qui peremette de chercher le minimum. Ou tu fais toi même une routine qui se déplace dans le sens du gradient c'est pas très sorcier.

    Est ce que tu dois trouver le minimum de manière très efficace (tu veux le faire un grand nombre defois ?

    Dans ce cas je te déconseille la grille ou le tirage aléatoire et je choisirais plutot une méthode du gradient.

    Bon courage

  3. #3
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Va voir dans "Numerical Recipes"; Au chapitre 10 "Minimisation or Maximisation of Functions", et en particulier dans les sections 10.4 à 10.7, et tu seras submergé par une multitude de solutions (avec les codes).
    Jean-Marc Blanc

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Par défaut
    Salut.

    Pour minimiser tes fonctions, je te conseilles sinon de calculer les dérivées à chacune des variables (dérivées partielles) puis de chercher le zéro de ces fonctions dans le sens négatif à positif. Si tu souhaites avoir le minimum de ta fonction f(x1,x2) alors il faudra satisfaire au fait que les deux dérivées devront vérifier le critère précédant.

    Mis sous 'algorithme' cela donnerait:

    1. On calcule f(x1,x2)

    2. On calcule la dérivée par rapport à x1 en (x1,x2) puis celle par rapport à x2 en (x1,x2). Notons les f'1 et f'2 respectivement.

    3. On sauvegarde la valeur de f'1 et f'2 comme étant f'b1 et f'b2 (sauvegarde des valeurs antérieures)

    4. On calcule la fonction au point suivant

    5. On calcule ses dérivées en ce point

    6. Si f'1 et f'2 sont positives et que f'b1 et f'b2 sont négatives alors:

    7. On interpole les valeurs de x1 et x2 à partir des dérivées

    8. On sauvegarde les x1 et x2 interpolés comme le point minimum de la fonction.

    (Ceci correspondrait, je pense à la démarche à employer si tu veux faire le programme à la main, sinon Numerical Recipies peut fournir des solutions comme dit précédemment)

  5. #5
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    premier problème (comme l'ont dit les autres) : la forme que revêt ta fonction:
    si tu as l'expression analytique, c'est fini: tu recherche les 0 des dérivées cela te donne les extrema locaux, tu n'as plus qu'à les évaluer pour en tiré le minimum global...

    sinon, il y a des algorithmes (tels que uzawa ) de résolution du problèmle de minimisation... tu peux regarder par exemple cette page:
    http://cermics.enpc.fr/~jpc/mopsi/td3/index.html

    le problème dans l'évaluation sur une grille c'est que ton minimum va très probablement tombé entre les mailles de ta grille... du coup tu n'auras pas le minimum correctement ou alors il faut rafiner la grille jusqu'à ateindre une bonne précision...

    tu peux aussi regarder les problèmes de minimisation sous contrainte, ou les problèmes d'optimisation... (dsl, je me souvient avoir vu ça à la fac mais mes souvenirs sont défaillant là dessus)

    l'idée reste en général la même: on utilise le gradient pour contrôler la descente vers le minimum...

Discussions similaires

  1. [fmincon] minimisation d'une fonction avec paramètre
    Par lefevrelaumonier dans le forum MATLAB
    Réponses: 5
    Dernier message: 05/12/2014, 09h50
  2. Réponses: 6
    Dernier message: 17/11/2012, 02h57
  3. Minimisation d'une fonction
    Par foufi86 dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/05/2011, 17h51
  4. minimisation d'une fonction sur fortran
    Par lemale dans le forum Fortran
    Réponses: 1
    Dernier message: 21/05/2009, 16h40
  5. Réponses: 6
    Dernier message: 21/09/2007, 15h18

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