Bonjour,

Je débute en MATLAB et ne parviens pas à comprendre le problème auquel je suis confronté.

Je cherche à "résoudre" un système non linéaire de n équations à n inconnues, relativement simple, avec ou sans contrainte.

J'écris mes équations en définissant une fonction F:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
function [Z]=F(X)
    global tf tI yat r tauxK gamma beta theta rho omega j
    Z=zeros((tf+1)+(tf+2),1);
    for k=1:tf+1;
       Z(k,1) = X(k,1)+X((tf+1)+1+k,1)-yat(j,k)-(1-tauxK*r+r)*X(tf+1+k,1);
    end
    Z(tI,1)= Z(tI,1)-(1-tauxK*r+r)*X((tf+1)+(tf+2),1);
    Z(tf+2,1)=X((tf+1)+1,1);
    for k=1:tf
        Z((tf+2)+k,1) = X(k,1)^(-gamma)-theta*(X((tf+1)+k+1,1)+omega)^(-rho)-beta*(1+r-tauxK*r)*X(k+1,1)^(-gamma) ;  
    end
    Z(tf+1+tf+2,1) = X(tf+1,1)^(-gamma)-theta*(X(tf+1+tf+2,1)+omega)^(-rho) ;
end
Dans le cas sans contrainte, je m'en sors très bien avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[Z,fval,exitflag] = fsolve(@F,X,options);
Mais pour certaines valeurs de mes paramètres, je trouve des Z(k) négatifs. Je voudrais maintenant trouver le "meilleur" candidat pour ma solution parmi les vecteurs Z>=0 (même si formellement cela ne résout pas mon problème car Z(k)<0 signifie qu'une de mes contraintes est saturée, l'équation correspondante ne tient plus).

J'ai donc essayé de recourir à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
A=-eye(tf+1+tf+2);
b=zeros(tf+1+tf+2,1);
options = optimset('MinAbsMax',tf+1+tf+2);
[Z,fval,exitflag] = fminimax(@F,X,A,b,options);
Mais malgré tous mes efforts, le message d'erreur est invariablement :
??? Error using ==> fminimax at 215
FMINIMAX only accepts inputs of data type double.

Error in ==> Model_3_noborrowing at 72
    [Z,fval,exitflag] = fminimax(@F,X,A,b,options);
Je ne comprends pas ce qui diffère du cas précédent. J'ai aussi tenté de forcer la conversion de mes variables en double (p=double(p)) mais cela ne fonctionne pas non plus.

Quelqu'un pourrait-il m'aider ?

Je vous remercie.