Fmincon matlab

Fermé
abdou - 9 nov. 2014 à 16:14
 paricilesthunes - 14 nov. 2014 à 20:32
bonjour j'ai refais l'exemple qui se trouve dans le help matlab sur fmincon mais la fonction je pense ne marche pas volia le programme est ce que il ya des erreurs :
function f = fun(x)
f = -x(1) * x(2) * x(3);


A = [-1 -2 -2; 1 2 2];
b = [0;72];


x0 = [10;10;10]; % Starting guess at the solution
[x,fval] = fmincon(@fun,x0,A,b);

1 réponse

paricilesthunes
14 nov. 2014 à 20:32
Bonsoir

Tu ne peux pas effectuer la minimisation dans la définition de la fonction, c'est le serpent qui se mord la queue :)
Tu peux définir ta fonction à minimiser :
1) Dans un fichier seul (private function),
2) À l'intérieur de la fonction de minimisation (nested function),
3) Après la fonction de minimisation (local function).
4) Comme fonction anonyme, auquel cas tu n'as pas besoin de fichier (mais rien n'empêche de définir la fonction à minimiser comme fonction anonyme dans les cas 1, 2, 3).

1) Dans le fichier myfun.m :
function f=myfun(x)
f=-x(1)*x(2)*x(3);
end
Puis dans le workspace ou dans un autre fichier :
A=[[-1,-2,-2];[1,2,2]];
b=[0;72];
x0=[10;10;10];
[x,fval]=fmincon(@myfun,x0,A,b);

2) Dans le fichier minif.m :
function [x,fval]=minif
function f=myfun(x)
f=-x(1)*x(2)*x(3);
end
A=[[-1,-2,-2];[1,2,2]];
b=[0;72];
x0=[10;10;10];
[x,fval]=fmincon(@myfun,x0,A,b);
end

3) Dans le fichier minif.m :
function [x,fval]=minif
A=[[-1,-2,-2];[1,2,2]];
b=[0;72];
x0=[10;10;10];
[x,fval]=fmincon(@myfun,x0,A,b);
end
function f=myfun(x)
f=-x(1)*x(2)*x(3);
end

4) Dans un fichier ou dans le workspace :
myfun=@(x)(-x(1)*x(2)*x(3));
A=[[-1,-2,-2];[1,2,2]];
b=[0;72];
x0=[10;10;10];
[x,fval]=fmincon(myfun,x0,A,b);

Tu devrais songer à chercher de l'aide ailleurs quand tu as un problème, c'est un vrai ramassis de branquignols ici.
2