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
Avec 'myfun4fmin' définit tel que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Et bien ça me donne des 'x' imaginaires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Quand je rajoute des contraintes (A devient plus grande) ça tourne dans le vide et j'ai une erreur
Donc là je vois vraiment pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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]=...
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
Partager