[matlab] minimum fonction
lisette
-
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 ?
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 ?
A voir également:
- [matlab] minimum fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- La casa de papel age minimum ✓ - Forum Cinéma / Télé
- Game of thrones âge minimum ✓ - Forum Cinéma / Télé
5 réponses
Salut a toi,
La fonction fmincon peut le faire mais il faut avoir la toolbox optimisation.
Voir l'aide pour l'utilisation ou :
https://www.mathworks.com/help/optim/ug/fmincon.html;jsessionid=87108c0b5820b7a3cf175543e484
N'hésite pas a demander si tu as besoin.
A+
La fonction fmincon peut le faire mais il faut avoir la toolbox optimisation.
Voir l'aide pour l'utilisation ou :
https://www.mathworks.com/help/optim/ug/fmincon.html;jsessionid=87108c0b5820b7a3cf175543e484
N'hésite pas a demander si tu as besoin.
A+
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...
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...
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 ??
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 ??
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+
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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<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+