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

Calcul scientifique Python Discussion :

Déterminer pour quelles valeurs on atteint un minimum


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Déterminer pour quelles valeurs on atteint un minimum
    Bonjour,

    J'ai un programme permettant de calculer le minimum d'une fonction à 2 variables, mais pas à déterminer en quelles valeurs ce minimum est atteint.
    Si vous avez des idées je suis preneur.

    Bonne journée

  2. #2
    Expert éminent
    salut,

    comme la fonction min() par exemple ?

  3. #3
    Nouveau membre du Club
    Plutôt un "équivalent" de np.argmin() du coup. Sauf que np.argmin() c'est pour les listes. Ici florian veut optimiser des fonctions.

  4. #4
    Expert éminent
    l'énoncé n'est pas très parlant, on ne sait pas quel est le "programme" en question qui permet de trouver la valeur minimum, ni si le PO a la main sur le code, ni même s'il est question de numpy...

    dans tous les cas, à part prendre un intervalle donné pour tester les valeurs de la fonction (et donc éventuellement en tirer une liste qu'on filerait à numpy.argmin()) je vois pas comment on peut faire

    donc ma solution, qui vaut ce qu'elle vaut, est d'utiliser le paramètre key de la fonction min() :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> f = lambda (a, b): a**2 + 3*b - 50
    >>> min([f((a,b)) for b in range(-10,10) for a in range(-10,10)])
    -80
    >>> min([(a,b) for b in range(-10,10) for a in range(-10,10)], key=f)
    (0, -10)
    >>> f((0, -10))
    -80

  5. #5
    Nouveau Candidat au Club

    Voici le programme qui calcule le minimum pour la fonction entrée, je vais essayer votre programme et vous dire si cela marche .
    Merci

  6. #6
    Nouveau Candidat au Club
    Pour ma fonction j'aimerais une précision à 0.01 et je n'ai pas réussi à régler le pas des boucles for a 0.01, si vous avez une solution je suis preneur.
    Bonne soirée

  7. #7
    Expert éminent
    Salut,

    Je ne sais pas si certains comprennent ta fonction mais il est de toutes façons préférable de faire un copier coller entre des balises code qu'une capture qui est d'ailleurs incomplète.

    La fonction est encombrée parce que tu transmets une liste en argument et que tu dois donc en extraire chaque élément.

    Crée plutôt une fonction qui prend x et y en argument, ne fut-ce que pour la clarté.

    Malgré les deux return qui se suivent sans raison, ta fonction ne fait que retourner directement le résultat d'un calcul sans te donner de liberté d'évaluer quoi que ce soit, donc pour ta question initiale, il n'y a aucune possibilité.

    Peut-être qu'en divisant l'algorithme en plusieurs parties ...

  8. #8
    Expert éminent
    de ce que je lis de la fonction scipy.optimize.fmin() elle prend un éventuel paramètre full_output=True, affiche la valeur courante de la fonction et retourne au moins deux valeurs xopt et fopt respectivement le paramètre qui minimise la fonction et la valeur de la fonction à son minimum, le tout dans un nparray

    quant à la précision dont tu parles, est-ce que ça ne pourrait pas correspondre au paramètre ftol ?

    il semble néanmoins que Obofix avait vu juste, donc j'irais pas plus loin sur cette discussion ne connaissant pas {num,sci}py

  9. #9
    Nouveau Candidat au Club
    Oui, effectivement le 2ème return ne sert à rien j'essayais des trucs pour afficher mes valeurs mais sans succès, et la fonction ne présente pas grand intérêt, je connais son minimum mais je ne vois toujours pas comment trouver pour quelles valeurs il est atteint.
    Quand vous dites de diviser l'algorithme en plusieurs parties, je ne vois pas quelles sont les parties distinctes de l'algorithme
    ftol je ne sais pas comment on s'en sert, ,ni à quoi il sert.

###raw>template_hook.ano_emploi###