2013-04-27 46 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错误就会消失。