1

J'ai la fonction suivante:fsolve avec des variables d'autres tableaux

function F = F(x,L,Kc1,Kc2,Kc3,Kc4) 
F=[(2*L*x(1)^2)/Kc1 + L*x(1)*x(2)/Kc3 + x(1)+ (x(1)*Kc4/L)^0.5 - (2*(0.235)); (2*L*(x(2)^2))/Kc2 + x(2)+ L*x(1)*x(2)/Kc3 -2*(0.765)]; 
end 

Ici, L,Kc1,Kc2,Kc3 and Kc4 sont des tableaux qui ont déjà 99 valeurs numériques stockées en eux. Ainsi, j'ai besoin de résoudre pour x(1) and x(2) 99 fois et les stocker dans les tableaux O2 et N2. Pour cela, le code est:

x0=[-5 -5]; 
O2=zeros(1,99); 
N2=zeros(1,99); 
for i=1:1:99 
    x=fsolve(@(x)F(x,L(i),Kc1(i),Kc2(i),Kc3(i),Kc4(i)),x0); 
    O2(i)=x(1); 
    N2(i)=x(2); 
end 

Idéalement, je devrais avoir obtenu les tableaux O2 et N2 en résolvant ces équations. Cependant, lorsque j'exécute mon programme, j'obtiens l'erreur suivante:

??? Error using ==> vertcat 
CAT arguments dimensions are not consistent. 

Error in ==> F at 2 
F=[(2*L*(x(1)^2))/Kc1 + L*x(1)*x(2)/Kc3 + x(1)+ (x(1)*Kc4/L)^0.5 - (2*(0.235)); (2*L*(x(2)^2))/Kc2 + 
x(2)+ L*x(1)*x(2)/Kc3 -2*(0.765)]; 

Error in ==> @(x)F(x,L(i),Kc1(i),Kc2(i),Kc3(i),Kc4(i)) 


Error in ==> fsolve at 254 
      fuser = feval(funfcn{3},x,varargin{:}); 

Error in ==> Air_equilibriuw at 76 
    x=fsolve(@(x)F(x,L(i),Kc1(i),Kc2(i),Kc3(i),Kc4(i)),x0); 

Caused by: 
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue. 

Est-ce que quelqu'un sait ce qui ne va pas? Merci d'avance.

+1

Je compte 6 entrées à F(), mais vous passez 7 entrées dont le x0 supplémentaire. Vérifiez les parenthèses. – Oleg

+0

J'ai changé les parenthèses. Je reçois toujours une erreur, mais une nouvelle. J'ai modifié le commentaire. Merci pour l'aide. –

+0

Vérifiez la division et la multiplication par L dans l'expression concaténée. Utilisez 'dbstop if error', puis exécutez votre code. Lorsque c'est fait 'dbclear if error'. – Oleg

Répondre

1

changement

function F = F(x,L,Kc1,Kc2,Kc3,Kc4) 
    F=[(2*L*x(1)^2)/Kc1 + L*x(1)*x(2)/Kc3 + x(1)+ (x(1)*Kc4/L)^0.5 - (2*(0.235)); (2*L*(x(2)^2))/Kc2 + x(2)+ L*x(1)*x(2)/Kc3 -2*(0.765)]; 
end 

à

function F = F(x,L,Kc1,Kc2,Kc3,Kc4) 
    F=[(2*L*x(1)^2)/Kc1 + L*x(1)*x(2)/Kc3 + x(1)+ (x(1)*Kc4/L)^0.5 - (2*(0.235)), (2*L*(x(2)^2))/Kc2 + x(2)+ L*x(1)*x(2)/Kc3 -2*(0.765)]; 
end 

maintenant F sera de taille [2 x 1] au lieu de [1 x 2], et votre erreur vertcat disparaîtra.

Questions connexes