Rechercher : dans
Par :

[matlab] minimum fonction

Dernière réponse le 5 mai 2008 à 08:31:08 lisette, le 30 avr 2008 à 13:39:58 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [matlab] minimum fonction » dans :
Représentation des courbes sous Matlab Voir La fonction plot permet essentiellement de tracer des courbes sous Matlab. Dans cette astuce, nous allons essayer de détailler le fonctionnement de cette commande. Simple utilisation Vecteur Matrice Vecteur en fonction d'un autre Autres...
Manipulations élémentaires des tableaux sous MatLab VoirSommaire I. Stockage des tableaux II. L'indexation linéaire II.1. Accéder à un élément d'un tableau en utilisant l'indexation linéaire II.2. Passer d'une indexation à l'autre II.2.1. La fonction ind2sub II.2.2. La fonction sub2ind III. La...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Tableur - Les fonctions mathématiques VoirLes fonctions standards Méthode description ABS() Cette méthode renvoie la valeur absolue d'un nombre, il renvoie donc le nombre s'il est positif, son opposé (positif) s'il est négatif IMPAIR(valeur) Cette méthode renvoie la valeur...

1

damlegone32, le 1 mai 2008 à 14:03:56

Salut a toi,

La fonction fmincon peut le faire mais il faut avoir la toolbox optimisation.
Voir l'aide pour l'utilisation ou :
http://www.mathworks.com/access/helpdesk/help/toolbox/optim/­ug/fmincon.html

N'hésite pas a demander si tu as besoin.

A+

Répondre à damlegone32

2

lisette, le 2 mai 2008 à 08:34:51

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...

Répondre à lisette

3

lisette, le 2 mai 2008 à 08:57:30

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 ??

Répondre à lisette

4

damlegone32, le 2 mai 2008 à 13:04:24

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+

Répondre à damlegone32

5

lisette, le 2 mai 2008 à 14:47:45

Merci maintenant ca fonctionne mieux ... mais est ce que je peux émettre la condition supplémentaire 0<fval<1 ??

Répondre à lisette

6

damlegone32, le 2 mai 2008 à 15:37:23

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+

Répondre à damlegone32

7

 lisette, le 5 mai 2008 à 08:31:08

Merci beaucoup, maintenant ca fonctionne très bien.

Répondre à lisette