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 численных значений, хранящиеся в них. Таким образом, мне нужно решить за x(1) and x(2) 99 раз и сохранить их в массивах 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

+0

Я изменил круглые скобки. Я все еще получаю ошибку, но новую. Я отредактировал комментарий. Спасибо за помощь. –

+0

Проверьте деление и умножение на L в конкатенированном выражении. Используйте 'dbstop if error', затем запустите свой код. Когда сделано 'dbclear if error'. – Oleg

ответ

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 исчезнет.