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 : 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)
Avec 'myfun4fmin' définit tel que:
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
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 : 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]=...
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