2013-04-27 105 views
1

我有以下功能:Fsolve與變量從其他陣列

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 

這裏,L,Kc1,Kc2,Kc3 and Kc4是其中已經存儲在他們99點的數值陣列。因此,我需要99次解決x(1) and x(2)並將它們存儲在陣列O2和N2中。對於這一點,代碼:

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 

理想的情況下,我應該通過求解這些方程已經得到了陣列O2和N2。但是,當我運行我的程序時,出現以下錯誤:

??? 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. 

有人知道錯在哪裏嗎?提前致謝。

+1

我計數6輸入到F(),但你傳遞7個輸入,包括額外的x0。檢查括號。 – Oleg 2013-04-27 17:27:58

+0

我改了括號。我仍然收到一個錯誤,但一個新的。我編輯了評論。謝謝您的幫助。 – 2013-04-27 17:50:49

+0

在連接表達式中檢查除法和乘以L.使用'dbstop if error',然後運行你的代碼。當完成'dbclear如果錯誤'。 – Oleg 2013-04-27 18:43:33

回答

1

變化

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 

現在f一定規模[2 x 1]代替[1 x 2]的,和你的vertcat錯誤就會消失。