# How to solve 'Index exceeds matrix dimensions.' error?

3 views (last 30 days)
Christine King on 13 Jan 2021
Answered: Bobby Fischer on 14 Jan 2021
for t = 1:990
%Kinetic model
Qs(t) = Qsmax*Cs(t)/(Ks+Cs(t))*(1-exp(-t/td)); %the error start from here
Qolim(t) = Qomax*Co(t)/(Ko+Co(t))*Ki/(Ki+Ce(t));
Qslim(t) = ucr/Yoxxs;
A = Qolim(t)/Yos;
Qsox(t) = min(min(Qs(t),Qslim(t)),A);
Qsred(t) = Qs(t)-Qsox(t);
Qeup(t) = Qemax*(Ce(t)/(Ke+Ce(t)))*(Ki/(Ki+Ce(t)));
B = (Qolim(t)-Qsox(t)*Yos)*Yeo;
Qeox(t) = min(Qeup(t),B);
Qepr(t) = Qsred(t)*Yes;
u(t) = (Qsox(t)*Yoxxs)+(Qsred(t)*Yredxs)+(Qeox(t)*Yxe);
Qc(t) = (Qsox(t)*Yoxcs)+(Qsred(t)*Yredcs)+(Qeox(t)*Yce);
Qo(t) = (Qsox(t)*Yos)+(Qeox(t)*Yeo);
RQ(t) = Qc(t)/Qo(t);
F(t) = F(t)*exp(a-t);
%Dynamic model
dCs(t) = (F(t)/60/V(t)*(So-Cs(t)))-(((u(t)/Yoxxs)+(Qepr(t)/Yes)+Qm)*Cx(t));
dCo(t) = (-Qo(t)*Cx(t))+(kLao(t)/60*(Coo-Co(t)))-(F(t)/60/V(t)*Co(t));
dCe(t) = ((Qepr-Qeox)*Cx(t))-(F(t)/60/V(t)*Ce(t));
dCx(t) = (u(t)*Cx(t))-(F(t)/60/V(t)*Cx(t));
dV(t) = F(t)/60;
kLao(t) = (113*(Fa/60/AR)^0.25)/60;
Cs(t) = Cs(t)+dCs*0.06;
Co(t) = Co(t)+dCo*0.06;
Ce(t) = Ce(t)+dCe*0.06;
Cx(t) = Cx(t)+dCx*0.06;
V(t) = V(t)+dV*0.06;
end
Christine King on 14 Jan 2021
%Variable declaration (initial condition)
Cx = 15; %Biomass concentration
Cs = 7; %Glucose concentration
V = 50; %Volume
So = 325; %Feed concentration
tf = 1:0.06:990; %final time 16.5hr = 990min, save data every 3.6s
Vfer = 100; %Volume of fermentator
Co = 7.54; %Oxygen concentration
Ce = 0; %Ethanol concentration
F = 0; %Feed rate
Fa = 100; %Air feed rate
td = 1; %Time delay
kLao = 0; %total volumetric mass transfer coefficient
a = 0
%Parameters in fermentation model
Ke = 0.1;
Ko = 9.6e-5;
Ki = 3.5;
Ks = 0.612;
Yoxxs = 0.585;
Yredxs = 0.05;
Yos = 0.3857;
Yeo = 1.1236;
Yes = 0.4859;
Yxe = 0.7187;
Yoxcs = 0.5744;
Yredcs = 0.462;
Yce = 0.645;
Qemax = 3.967e-3;
Qomax = 4.25e-3;
Qsmax = 0.04905;
Qm = 5e-4;
ucr = 3.5e-3;
So = 325;
Coo = 0.006; %Co*
AR = 12.56;
%Initial condition
dV = 0; %dV/dt
dCs = 0; %dCs/dt
dCo = 0; %dCo/dt
dCe = 0; %dCe/dt
dCx = 0; %dCx/dt
%Fermentation process
for t = 0:length(tf)
%Kinetic model
Qs(t+1) = Qsmax*Cs(t+1)/(Ks+Cs(t+1))*(1-exp(-t/td));
Qolim(t+1) = Qomax*Co(t+1)/(Ko+Co(t+1))*Ki/(Ki+Ce(t+1));
Qslim(t+1) = ucr/Yoxxs;
A = Qolim(t+1)/Yos;
Qsox(t+1) = min(min(Qs(t+1),Qslim(t+1)),A);
Qsred(t+1) = Qs(t+1)-Qsox(t+1);
Qeup(t+1) = Qemax*(Ce(t+1)/(Ke+Ce(t+1)))*(Ki/(Ki+Ce(t+1)));
B = (Qolim(t+1)-Qsox(t+1)*Yos)*Yeo;
Qeox(t+1) = min(Qeup(t+1),B);
Qepr(t+1) = Qsred(t+1)*Yes;
u(t+1) = (Qsox(t+1)*Yoxxs)+(Qsred(t+1)*Yredxs)+(Qeox(t+1)*Yxe);
Qc(t+1) = (Qsox(t+1)*Yoxcs)+(Qsred(t+1)*Yredcs)+(Qeox(t+1)*Yce);
Qo(t+1) = (Qsox(t+1)*Yos)+(Qeox(t+1)*Yeo);
RQ(t+1) = Qc(t+1)/Qo(t+1);
F(t+1) = F(t+1)*exp(a-t);
%Dynamic model
dCs(t+1) = (F(t+1)/60/V(t+1)*(So-Cs(t+1)))-(((u(t+1)/Yoxxs)+(Qepr(t+1)/Yes)+Qm)*Cx(t+1));
dCo(t+1) = (-Qo(t+1)*Cx(t+1))+(kLao(t+1)/60*(Coo-Co(t+1)))-(F(t+1)/60/V(t+1)*Co(t+1));
dCe(t+1) = ((Qepr-Qeox)*Cx(t+1))-(F(t+1)/60/V(t+1)*Ce(t+1));
dCx(t+1) = (u(t+1)*Cx(t+1))-(F(t+1)/60/V(t+1)*Cx(t+1));
dV(t+1) = F(t+1)/60;
kLao(t+1) = (113*(Fa/60/AR)^0.25)/60;
Cs(t+1) = Cs(t)+dCs*0.06;
Co(t+1) = Co(t)+dCo*0.06;
Ce(t+1) = Ce(t)+dCe*0.06;
Cx(t+1) = Cx(t)+dCx*0.06;
V(t+1) = V(t)+dV*0.06;
end
Sorry, this is the full code I had written with all the parameters. Can help me solving this issue?

Bobby Fischer on 14 Jan 2021
Hi, there was a bunch of things to correct. Don't know if the result still has some value because I don't know what I was working with.
clear
%Variable declaration (initial condition)
Cx(1) = 15; %Biomass concentration
Cs(1) = 7; %Glucose concentration
V(1) = 50; %Volume
So = 325; %Feed concentration
tf = 1:0.06:990; %final time 16.5hr = 990min, save data every 3.6s
Vfer = 100; %Volume of fermentator
Co(1) = 7.54; %Oxygen concentration
Ce(1) = 0; %Ethanol concentration
F(1)= 0; %Feed rate %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fa = 100; %Air feed rate
td = 1; %Time delay
kLao(1) = 0; %total volumetric mass transfer coefficient
a = 0;
%Parameters in fermentation model
Ke = 0.1;
Ko = 9.6e-5;
Ki = 3.5;
Ks = 0.612;
Yoxxs = 0.585;
Yredxs = 0.05;
Yos = 0.3857;
Yeo = 1.1236;
Yes = 0.4859;
Yxe = 0.7187;
Yoxcs = 0.5744;
Yredcs = 0.462;
Yce = 0.645;
Qemax = 3.967e-3;
Qomax = 4.25e-3;
Qsmax = 0.04905;
Qm = 5e-4;
ucr = 3.5e-3;
So = 325;
Coo = 0.006; %Co*
AR = 12.56;
%Initial condition
dV = 0; %dV/dt
dCs(1) = 0; %dCs/dt
dCo(1) = 0; %dCo/dt
dCe(1) = 0; %dCe/dt
dCx(1) = 0; %dCx/dt
%Fermentation process
for t = 1:length(tf)-1
%Kinetic model
Qs(t+1) = Qsmax*Cs(t)/(Ks+Cs(t))*(1-exp(-t/td));
Qolim(t+1) = Qomax*Co(t)/(Ko+Co(t))*Ki/(Ki+Ce(t));
Qslim(t+1) = ucr/Yoxxs;
A = Qolim(t+1)/Yos;
Qsox(t+1) = min(min(Qs(t+1),Qslim(t+1)),A);
Qsred(t+1) = Qs(t+1)-Qsox(t+1);
Qeup(t+1) = Qemax*(Ce(t)/(Ke+Ce(t)))*(Ki/(Ki+Ce(t)));
B = (Qolim(t+1)-Qsox(t+1)*Yos)*Yeo;
Qeox(t+1) = min(Qeup(t+1),B);
Qepr(t+1) = Qsred(t+1)*Yes;
u(t+1) = (Qsox(t+1)*Yoxxs)+(Qsred(t+1)*Yredxs)+(Qeox(t+1)*Yxe);
Qc(t+1) = (Qsox(t+1)*Yoxcs)+(Qsred(t+1)*Yredcs)+(Qeox(t+1)*Yce);
Qo(t+1) = (Qsox(t+1)*Yos)+(Qeox(t+1)*Yeo);
RQ(t+1) = Qc(t+1)/Qo(t+1);
F(t+1) = F(t)*exp(a-t); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Dynamic model
dCs(t+1) = (F(t+1)/60/V(t)*(So-Cs(t)))-(((u(t+1)/Yoxxs)+(Qepr(t+1)/Yes)+Qm)*Cx(t));
dCo(t+1) = (-Qo(t+1)*Cx(t))+(kLao(t)/60*(Coo-Co(t)))-(F(t+1)/60/V(t)*Co(t));
dCe(t+1) = ((Qepr(t+1)-Qeox(t+1))*Cx(t))-(F(t+1)/60/V(t)*Ce(t)); %%%%%%%%%%%%%%%%%%%%%%%
dCx(t+1) = (u(t+1)*Cx(t))-(F(t+1)/60/V(t)*Cx(t));
dV(t+1) = F(t+1)/60;
kLao(t+1) = (113*(Fa/60/AR)^0.25)/60;
Cs(t+1) = Cs(t)+dCs(t+1)*0.06;
Co(t+1) = Co(t)+dCo(t+1)*0.06;
Ce(t+1) = Ce(t)+dCe(t+1)*0.06;
Cx(t+1) = Cx(t)+dCx(t+1)*0.06;
V(t+1) = V(t)+dV(t+1)*0.06;
end
whos
figure(1)
clf
hold on
plot(tf,Ce,'b')
plot(tf,Co,'r')
plot(tf,Cs,'g')
plot(tf,Cx,'y')
legend('Ce','Co','Cs','Cx')
figure(2)
clf
hold on
plot(tf,Qs,'b')
plot(tf,Qslim,'y')
plot(tf,Qsox,'g')
plot(tf,Qsred,'r')
legend('Qs','Qslim','Qsox','Qsred')