[matlab] minimum fonction

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. 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
    1. 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
      1. 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. merci maintenant ca fonctionne mieux ... mais est ce que je peux émettre la condition supplémentaire 0<fval<1 ??
          0
      2. 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. merci beaucoup, maintenant ca fonctionne très bien.
          0