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

MATLAB Discussion :

[fmincon] Contrainte non linéaire sur le minima et pour tout x réél


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [fmincon] Contrainte non linéaire sur le minima et pour tout x réél
    Bonsoir,

    Débutant sous MATLAB et dans le cadre d'un BE je souhaite minimiser la fonction myfun(a,x,y) selon a avec la condition suivante: f(a).(x-a) <= 0 .
    f(a) est une fonction non linéaire de a.

    Comme ma condition dépend du résultat à trouver a et doit être valable pour tout x réel je ne parviens pas à l'incorporer à fmincon malgré la lecture de la doc et de l'aide. Je pensais le faire via un nonlcon mais les fonctions c(a) et ceq(a) ne semblent prendre que des variables à minimiser en entrée et non pas une variable qu'il ne faut pas minimiser mais nécessaire pour la condition.


    Pourriez vous m'aider ?
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Sev-7 Voir le message
    Je pensais le faire via un nonlcon mais les fonctions c(a) et ceq(a) ne semblent prendre que des variables à minimiser en entrée et non pas une variable qu'il ne faut pas minimiser mais nécessaire pour la condition.
    Effectivement, mais tu peux "contourner" cela en utilisant la méthode exposée dans le 3) de Que représente le symbole @ ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse si rapide.
    Désolé par contre, je me suis rendu compte que je m'étais trompé sur ma condition (c.f. ci-dessous).
    Par contre je ne comprends pas la partie suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [x,fval] = fminsearch(@(x) maFonction(x,a),x0)
    Ca veut dire que @(x) précise que l'optimisation de maFonction doit se faire sur la variable x ?

    Donc je devrais faire quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [a, fval] = fmincon(@(a) J(a,x,y),x0,options,[],[],[],[],[],[],@(a) nonlcon(a,x))
    avec pour nonlcon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function [c,ceq] = nonlcon(a,x)
    c = f(a).(x-a) + a^2/2 - x^2/2;
    ceq = f(a).(x-a) + a^2/2 - x^2/2;
    Mais x n'est définie nul part, et si je demande à MATLAB de faire une boucle sur l'ensemble des réels je me doute bien que ca va planter. Mais comme ma condition se fait sur une droite (f(a).(x-a) + a^2/2) inférieure à une parabole, peut être que si je défini x = 0:10 par exemple ça marcherait ?

    La je n'ai pas accès à MATLAB mais je testerai ça ce soir.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sev-7 Voir le message
    Ca veut dire que @(x) précise que l'optimisation de maFonction doit se faire sur la variable x ?
    Oui c'est bien ça.

    Citation Envoyé par Sev-7 Voir le message
    Mais x n'est définie nul part
    Heu il est bien défini quelque part non ?
    De ce que j'ai compris tu as quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = ...
    [a, fval] = fmincon(...)
    ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'aurais peut être dû préciser que le x dans la fonction J(a,x,y) n'est pas le même que dans ma condition, j'ai donc plutôt (en énoncé mathématique):
    Soit a le minimum de la fonction J(a,x,y) tel que pour tout b réel f(a)(b-a) + a^2/2 - b^2/2 <= 0
    D'où en MATLAB:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function [c,ceq] = nonlcon(a,b)
    c = f(a).(b-a) + a^2/2 - b^2/2;
    ceq = f(a).(b-a) + a^2/2 - b^2/2;
     
    [a, fval] = fmincon(@(a) J(a,x,y),x0,options,[],[],[],[],[],[],@(a) nonlcon(a,b))
    Comme je l'ai dit j'essayerai ça ce soir quand j'aurais accès à MATLAB en définissant x = 1:10, mais j'aurais préféré en minimisant pour tout x réel mais il ne me semble pas que MATLAB gère ça non ?

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé, ça ne fonctionne pas, il ne trouve pas la bonne valeur.
    (J'ai vu en affichant les courbes avec un plot que fminsearch donne une valeur très proche du minima avec la condition.)
    En faisant un produit terme à terme sur mon vecteur b je ne comprends même pas ce que MATLAB fait car si je change b le résultat reste le même.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function [c,ceq] = nonlcon(a,b)
    c = f(a).*(b-a) + a^2/2 - b^2/2;
    ceq = f(a).*(b-a) + a^2/2 - b^2/2;
     
    b = 0:10;
    [a, fval] = fmincon(@(a) J(a,x,y),x0,options,[],[],[],[],[],[],@(a) nonlcon(a,b))
    Il faudrait vraiment que ce soit général et que ma condition corresponde à:
    la droite d'équation y(b) = f(a).*(b-a) + a^2/2 soit sous la parabole d'équation t(b) = b^2/2

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/07/2012, 12h44
  2. fmincon contrainte non linéaire entier
    Par le fab dans le forum MATLAB
    Réponses: 7
    Dernier message: 25/07/2012, 14h31
  3. Régression linéaire avec contraintes non-linéaires
    Par TimeSeries dans le forum SAS STAT
    Réponses: 0
    Dernier message: 20/04/2010, 10h56
  4. Réponses: 8
    Dernier message: 07/04/2008, 12h02

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