Bonjour,
Je suis débutant en Matlab, je travaille actuellement sur une modélisation d'une réaction chimique. Le système est composé d'une série de temps et 7 séries d'espèces (des concentrations chimiques).
L'algorithme Levenberg-Marquardt me permet d'ajuster mes paramètres pour que l'écart entre les valeurs théoriques et expérimentales (xexpvect et yexpvect) soit le plus faible possible.
Je sèches sur un message d'erreur:
Dans mon code j'ai bien défini un intervalle pour mes paramètres ainsi qu'une valeur initiale. Du coup ce que je comprends de l'erreur, c'est qu'il y a 9 variables pour 7 systèmes d'équations et c'est ce qui pose problème.Error using lsqncommon (line 67) The Levenberg-Marquardt algorithm does not handle bound constraints and the trust-region-reflective algorithm requires at least as many equations as variables; aborting.
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 global wbeta y=zeros(7,1); %fait ressortir les équations en vecteur colonne; y(1)=-y(1)*wbeta(1); y(2)=y(1)*wbeta(1)-y(2)*wbeta(2); y(3)=y(2)*wbeta(3)-y(3)*wbeta(4)-y(3)*wbeta(5)-y(3)*wbeta(6); y(4)=y(3)*wbeta(4)-y(4)*wbeta(7); y(5)=y(3)*wbeta(5)-y(5)*wbeta(8); y(6)=y(3)*wbeta(6)-y(6)*wbeta(9); y(7)=y(4)*wbeta(7)+y(5)*wbeta(8)+y(6)*wbeta(9); beta0=[k1,k2,k3,k4,k5,k6,k7,k8,k9]; beta0lb=[k1lb,k2lb,k3lb,k4lb,k5lb,k6lb,k7lb,k8lb,k9lb]; beta0ub=[k1ub,k2ub,k3ub,k4ub,k5ub,k6ub,k7ub,k8ub,k9ub]; options = optimset('Algorithm',{'levenberg-marquardt',0.0005},'MaxIter', 800,'TolX',1e-20,...; 'TolFun',1e-20,'MaxFunEvals', 2000); [beta,resnorm,residual,exitflag,output,lambda,jacobian]= lsqnonlin(... 'FunLSQ',beta0,beta0lb,beta0ub,options);J'ai mis l'ensemble des fichiers en dossier compressé. Merci à ceux qui pourront me donner un coup de main.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function res=FunLSQ(beta) [t,y]=ode45('DiffEqFun',(min(xexpvect(:, 1)):max(xexpvect(:, 1))),yexp0);
P.S: Je débute en MATLAB, désolé si le code ne respecte pas la mise en forme standard.
Partager