Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

demande d'aide, matlab



  1. #1
    sage

    demande d'aide, matlab


    ------

    Bonjour
    Je dois écrire un programme en Matlab permettant de minimiser une fonction assez complexe de deux variables (théta et de phi ) et je ne vois vraiment pas comment faire. Alors si vous pouvez m'aider rien qu'un petit peu afin de m'aider à avancer je vous en serais énormément
    reconnaissante..

    Merci beaucoup d'avance.

    -----

  2. Publicité
  3. #2
    invite19431173

    Re : demande d'aide, matlab

    Message déplacé.

  4. #3
    Pole

    Re : demande d'aide, matlab

    Il faut faire 2 boucles emboîtés, l'une qui boucle sur théta et l'autre sur phi.
    A l'intérieur des 2 boucles, tu evalues ta fonction, et tu regardes si le résultat est plus petit que ton précédent minimum.
    Après, pour chacune de tes boucles, tu dois fixer les bornes et un pas d'incrémentation.
    Si ce n'est pas assez précis, tu diminues le pas, mais pour ne pas attendre 3 jours, il faut aussi diminuer l'intervalle.

    Pole.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  5. #4
    robert et ses amis

    Re : demande d'aide, matlab

    je suis d'accord avec toi Pole, mais une remarque quand même sur la forme : pas besoin d'écrire de boucle avec matlab!

  6. A voir en vidéo sur Futura
  7. #5
    matthias

    Re : demande d'aide, matlab

    Citation Envoyé par Pole
    Il faut faire 2 boucles emboîtés, l'une qui boucle sur théta et l'autre sur phi.
    A l'intérieur des 2 boucles, tu evalues ta fonction, et tu regardes si le résultat est plus petit que ton précédent minimum.
    Autrement dit, tu veux tester toutes les valeurs avec un pas donné ?
    C'est très lourd en calcul, et ça ne va pas forcément donner de bons résultats. Même si tu prends le minimum trouvé et que tu recommences avec un pas plus petit autour de ce minimum, ça ne t'assures pas la convergence vers un minimum global.
    Autant regarder du côté du gradient conjugué, ou autres méthodes d'optimisation.

  8. #6
    Pole

    Re : demande d'aide, matlab

    Qu'est-ce qu'un minimum global?
    Et comment peut on avoir des optimisations sur la recherche d'un minimum?

    Pole.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  9. Publicité
  10. #7
    Baygon_Jaune

    Re : demande d'aide, matlab

    Citation Envoyé par matthias
    Autrement dit, tu veux tester toutes les valeurs avec un pas donné ?
    C'est très lourd en calcul, et ça ne va pas forcément donner de bons résultats. Même si tu prends le minimum trouvé et que tu recommences avec un pas plus petit autour de ce minimum, ça ne t'assures pas la convergence vers un minimum global.
    Autant regarder du côté du gradient conjugué, ou autres méthodes d'optimisation.
    Étant donné que les variables sont theta et phi, on peut sans trop de risque penser qu'elles sont dans un intervalle de 2.Pi, donc pas trop important ; pour peu que la fonction à minimiser ne soit pas trop violente en variations, ça donne quand même un moyen simple de trouver ce qui sera bien un minimum global de la fonction. Il faut avoir de la puissance de calcul, c'est sûr ^^
    « L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui ! » Desproges

  11. #8
    matthias

    Re : demande d'aide, matlab

    Citation Envoyé par Pole
    Qu'est-ce qu'un minimum global?
    Et comment peut on avoir des optimisations sur la recherche d'un minimum?
    minimum global par opposition à minimum local.
    Et optimisation signifie recherche d'un minimum en mathématiques. Il ne s'agit pas d'optimiser la recherche du minimum (enfin si aussi, mais ça c'est dans le choix et l'implémentation de l'algorithme d'optimisation justement ).
    Il y a pleins de méthodes. Fais une recherche sur "descente du gradient", "gradient conjugué", "recuit simulé", etc.

    Citation Envoyé par Baygon_jaune
    pour peu que la fonction à minimiser ne soit pas trop violente en variations, ça donne quand même un moyen simple de trouver ce qui sera bien un minimum global de la fonction. Il faut avoir de la puissance de calcul, c'est sûr ^^
    Pour peu que les variations ne soient pas trop violentes, des méthodes relativement simples fonctionneront bien sans avoir besoin de tester toutes les valeurs

  12. #9
    rvz

    Re : demande d'aide, matlab

    Bonjour,

    Je soutiens tout à fait Matthias : La méthode proposée par Pole est certainement juste dans la mesure où elle donne un résultat, mais elle est extrèmement coûteuse.
    Pour trouver le minimum d'une fonction, il faut plutôt se tourner vers les méthodes type gradient conjugué, ou même gradient à pas fixe si on veut pas s'embêter à écrire plein de lignes de code. Remarquons tout de même que si la fonction n'est pas au moins localement convexe au voisinage du minimum, ça va jamais marcher. Problème : Une fonction localement convexe n'est que localement convexe, et donc si on veut utiliser l'un des algo ci dessus, il faut déjà trouver un voisinage du minimum où la fonction est localement convexe.

    Donc la méthode que je propose est la suivante :

    Prendre un pas grossier H et faire la méthode de Pole sur un intervalle borné (peut-être certaines caractéristiques de la fonction permettent elles de dire que le minimum ne s'y trouvera pas ?). On trouve ainsi un sous intervalle de taille 2H dans lequel on s'attend à avoir le minimum, et sur ce sous intervalle, faire un gradient conjugué.

    __
    rvz

  13. #10
    rvz

    Re : demande d'aide, matlab

    D'ailleurs, une remarque complémentaire :
    Il est très difficile de trouver un programme qui ne fasse pas n'importe quoi pour des problèmes de minimisation de 1/(|x-2|+1) sur R.

    La seule manière que je vois pour éviter des boucles infinies sur le programme, ce serait de dire : On fait la méthode de Pole sur [-100,100] en testant sur tous les entiers (donc ici H=1). On s'aperçoit que le plus petit est atteint en x = -100. On renvoie donc, au choix, minimum = -100 ou - infini...

    __
    rvz

  14. #11
    pat7111

    Re : demande d'aide, matlab

    Il y a des fonctions d'optimisation toutes faites sous Matlab (fmincon, fminunc) qui commutent au besoin d'un algo à l'autre sans évidemment que le résultat soit infaillible (ne convergent pas toujours ou pas au bon endroit... )
    Plutôt appliquer son intelligence à des conneries que sa connerie à des choses intelligentes...

  15. #12
    Pole

    Re : demande d'aide, matlab

    C'est sûr qur "ma" méthode n'est absolument pas applicable à la main.
    Mais avec des ordis qui font des millions d'opérations pas secondes, on peut avoir un arrondi avec 5 chiffres, 6, voire 7. (Bien entendu, il faut le programmer dans un langage compilé, ce qui n'est pas le cas de Matlab)

    Pole.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  16. Publicité
  17. #13
    matthias

    Re : demande d'aide, matlab

    Ici il n'y a que 2 variables, mais les problèmes d'optimisation rencontrés en industrie (par exemple) en comptent souvent beaucoup plus (jusqu'à quelques millions).

  18. #14
    Pole

    Re : demande d'aide, matlab

    En industrie, on a besoins que d'environ 3 décimales. De plus, on a besois que de faire 1 calcul pour 1 projet. Un calcul d'une demi-journée me paraît négligeable devant le reste du temps passé à la conception. Mais si pendant la conception, il faut refaire des calculs de minimum en changeant quelques coefs, ça peut prendre beaucoup de temps....
    Bien sûr si on met des millions de variables...mais ça m'étonnerait surtout si quelqu'un doit les taper.
    Déjà, je pense qu'avec une centaine de variable, ça doit être très long. Dans ce cas, il faut faire plusieurs essais, avec des pas choisis intelligement.
    ex : ne pas faire calculer entre 0 et 100 par pas de 10-6, mais plutôt par pas de 1, puis 10-3, puis 5*10-5 et 10-6.

    Pole.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  19. #15
    matthias

    Re : demande d'aide, matlab

    Citation Envoyé par Pole
    Bien sûr si on met des millions de variables...mais ça m'étonnerait surtout si quelqu'un doit les taper.
    Je t'assure que ce n'est pas rare dans des problèmes mettant en jeu des réseaux (distribution, télécommunication, etc). Et le calcul n'est pas forcément fait une fois pour toute.

  20. #16
    Pole

    Re : demande d'aide, matlab

    On doit calculer un minimum (ou un maximum) de fonction de millions de variables avec des réseaux ? Pourquoi?

    Pole.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  21. #17
    couro

    Re : demande d'aide, matlab

    bonsoir,
    je dois programmer les algorithmes d'optimisations numériques ( polak ribierre,descente,gradient conjugué...)
    j'ai du mal a y arriver!!!quelqu'un peut il m'aider???

Discussions similaires

  1. Besoin d'aide en MATLAB
    Par gregoory dans le forum Mathématiques du supérieur
    Réponses: 33
    Dernier message: 15/01/2010, 19h05
  2. besoin d'aide en matlab
    Par claudiu dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 09/01/2007, 09h38
  3. demande d'aide sur Matlab
    Par zak dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 04/12/2006, 11h37
  4. Demande aide Matlab
    Par guitounou dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 06/03/2006, 17h52