[matlab] minimum fonction

lisette -  
 lisette -
Bonjour,

Je n'arrive pas à émettre une condition sur matlab. Pouvez vous m aider ?

J'ai le code suivant :

R1 = 0.4;
Ld = 5.173e-3;
Lq = 5.173e-3;
psipm=0.03079;
Zp = 2;
n=1100
w=Zp*2*pi*n/60
A=w*psipm*R1;
B=w*psipm;
C=w*Ld/R1;
D=w*R1*psipm;
E=w^2*psipm*Lq;

g=@(x)1-A*(x(2)-B-C*x(1))/(R1*x(1)^2+R1*x(2)^2-D*x(2)-E*x(1));
[x,fval]=fminsearch(g,[-10, -10])

Ce code fonctionne sans problème mais j'ai besoin d'ajouter la condition
x(1)^2+x(2)^2<=100 ou alors fval<0, est-ce possible ?
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. lisette
     
    salut,

    le problème avec la fonction fmincon c'est que la fonction f(x) à minimiser doit répondre aux conditions suivantes :

    c(x)<=0
    ceq(x)=0
    A.x<=b
    Aeq.x=beq
    lb<=x<=ub

    on a alors x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

    le problème c'est que dans mon problème je n'ai pas les conditions 2 3 et 4. Est-ce que je peux encore utilisé cette fonction ? Car j'ai essayé mais je ne sais pas quoi mettre pour mes inconues...
    0
  2. lisette
     
    Je viens de refaire un essai avec A=[0 0] b=0 et Aeq=[0 0] et beq=0 ensuite g mis lb et ub et j'ai un problème avec ma fonction nonlcon.

    je tappe

    function[c,ceq]=nonlcon (x)
    c= sqrt(x(1)^2+x(2)^2)-10
    ceq = sqrt(x(1)^2+x(2)^2)-10

    matlab me sort :

    "??? function [c,ceq]=nonlcon (x)
    |
    Error: Function definitions are not permitted at the prompt or in scripts."

    pourquoi ??
    0
  3. damlegone32 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   29
     
    Salut,

    As-tu bien enregistré la fonction nonlcon dans un fichier .m à part et du même nom que la fonction (cad nonlcon.m) ?
    De plus comme tu n'as pas de contraintes égalitée il faut écrire ceq = 0 (ou ceq = zeros(1,length(c)) ).
    Sinon je te conseille de mettre A=[], b=[], Aeq=[], beq=[], lb=[], ub=[] pour que ces paramètres ne soit pas pris en compte (sauf si bien sur tu en as besoin).

    Voilou. A+
    0
    1. lisette
       
      merci maintenant ca fonctionne mieux ... mais est ce que je peux émettre la condition supplémentaire 0<fval<1 ??
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. damlegone32 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   29
     
    Alors,
    0<fval<1 rajoute 2 contraintes en plus : -g(x) < 0 et g(x)-1 < 0.
    Donc nonlcon va maintenant s'écrire comme ceci :

    function[c,ceq]=nonlcon (x)

    load 'constantes.mat';
    c(1)= sqrt(x(1)^2+x(2)^2)-10;
    c(2)= -(1-A*(x(2)-B-C*x(1))/(R1*x(1)^2+R1*x(2)^2-D*x(2)-E*x(1)));
    c(3)= (1-A*(x(2)-B-C*x(1))/(R1*x(1)^2+R1*x(2)^2-D*x(2)-E*x(1)))-1;
    ceq = [];


    et dans le programme principal :
    save 'constantes.mat' 'A' 'B' 'C' 'D' 'E' 'R1', pour que la fonction nonlcon est accès aux constantes.

    Voilà mé cé pa sur ke ca marche.

    A+
    0
    1. lisette
       
      merci beaucoup, maintenant ca fonctionne très bien.
      0