Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB
MATLAB Forum d'entraide sur MATLAB. Avant de poster -> FAQ MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 09h55   #1
Membre à l'essai
 
Inscription : avril 2007
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 83
Points : 21
Points : 21
Par défaut Problèmes avec fmincon ..

Bonjour tout le monde,

Voilà après avoir utilisé la fonction lsqcurvefit j'ai finalement opté pour fmincon pour pouvoir mieux intégrer mes contraintes.

J'ai 12 inconnues (x), toutes solutions d'équations linéaires ou non linéaires.
Quand je mets ceci à fmincon

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ifg = ones(8,1); % pour le moment - constantes
YDATA = [Esp; Esp2]; % colonne de taille 8

% Bornes pour les x! (colonne de taille 12)
lb = [-Inf, 0, -Inf, -Inf, -Inf, 0, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf] ; 
ub = [Inf, Inf, Inf, Inf, Inf, Inf, Inf, Inf, Inf, Inf, Inf, Inf] ; 
% Point de départ
x0 = [0; 1; 0; 3; 0; 1; 0; 3; 1; 0; 0; 1] ; 

weight = ones(1,8) ; % Pour le moment

% Définition de A et b tel que A*x <=b

A = [0 0 2 -3 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 2 -3 0 0 0 0; 0 0 0 0 0 0 0 0 -1 0 0 0; 0 0 0 0 0 0 0 0 0 -1 0 0; 0 0 0 0 0 0 0 0 0 0 -1 0;0 0 0 0 0 0 0 0 0 0 0 -1 ; 0 0 0 0 0 0 0 0 1 0 0 0 ; 0 0 0 0 0 0 0 0 0 1 0 0 ; 0 0 0 0 0 0 0 0 0 0 1 0 ; 0 0 0 0 0 0 0 0 0 0 0 1 ]; 

b = [-9; -9; 0; 0; 0; 0; 1; 1; 1; 1]; 

% options_fmincon A editer
options_fmincon = optimset('fmincon')

% Définition de Aeq/beq tel que Aeq*x=beq
Aeq = [0 0 0 0 0 0 0 0 1 1 0 0; 0 0 0 0 0 0 0 0 0 0 1 1]; 
beq = [1;1] ;
% fmincon
[x,fval,exitflag,output] = fmincon('myfun4fmin',x0,A,b,Aeq,beq,lb,ub,[],options_fmincon, YDATA, weight, ifg)
Avec 'myfun4fmin' définit tel que:
Code :
1
2
3
function f = myfun4fmin(x,YDATA,weight,ifg)
xdata = []; 
f = sum((fun_cumlmamulti(x,xdata,weight,ifg)-YDATA).^2); %fun_cumlmamulti retourne les "YDATA" souhaités en fonction des x
Et bien ça me donne des 'x' imaginaires.
Quand je rajoute des contraintes (A devient plus grande) ça tourne dans le vide et j'ai une erreur
Code :
1
2
3
4
5
Error in ==> optim\private\nlconst at 615
               [YMAX,YIND]=min(YL.*sdiff);

Error in ==> fmincon at 498
   [X,FVAL,lambda,EXITFLAG,OUTPUT,GRAD,HESSIAN]=...
Donc là je vois vraiment pas.
Pourtant c'est pas "sorcier" comme problématique et avec le A définit au dessus j'ai un résultat (imaginaire) dans la seconde (mauvaise convergence quand même).


Si quelqu'un avait une petite idée, je serai preneur

Hollow
hollowdeadoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 11h43   #2
Membre à l'essai
 
Inscription : avril 2007
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 83
Points : 21
Points : 21
N'y a t'il pas - par exemple - un moyen plus simple pour définir A et b tel que A*x<=b ?

Ici en gros A n'est qu'une diagonale vu que je veux des contraintes du style 3*x(3) <= 0, -2*x(4) <= 1, etc.

--
Hollow
hollowdeadoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h49   #3
Membre à l'essai
 
Inscription : avril 2007
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 83
Points : 21
Points : 21
A priori (et ça me semble bizarre), dès que la matrice passe à plus de 10 lignes ça pose un problème!

C'est assez fou mais bon je vais continuer mes investigations car ça serait vraiment vraiment contraignant et "bizarre" pour justement ajouter des contraintes.
hollowdeadoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h40.


 
 
 
 
Partenaires

Hébergement Web