Help, please! Index exceeds array bounds
Show older comments
Hello! I'm trying to simulate the dynamic of some variables (concentration and temperature, basically). However, I keep receiving the same error message over and over again (index exceeds array bounds). I tried to change the order of the code and even erased the line relating to the error (Tr(i+1)). But then, the program displayed the same error for other lines. I would appreciate if someone could give a hand on this. Thank you!!!!
V(1)=Vo; %m³
h(1)=2*(2*Vo/pi)^(1/3); %m
Ca(1)=5; %kmol/m³
Cb(1)=0; %kmol/m³
Cc(1)=0; %kmol/m³
Cd(1)=0; %kmol/m³
Cw(1)=30.7; %kmol/m³
Tr(1)=300; %K
t(1)=0; %s
for i=1:300
V(i+1)=V(i)+dt*(ve);
h(i+1)=h(i)+dt*(ve/A);
kd(i)=ko*exp(E*(1/273-1/Tr(i)));
Kc(i)=10^(3885.44/Tr(i));
wa(i)=Ca(i)/(Ca(i)+Cb(i)+Cc(i)+Cd(i)+Cw(i));
Cpm(i)=wa(i)*Cpa+(1-wa(i))*Cp;
Tcw2=Tr(i)-(Tr(i)-Tcw1)*exp(-UA/(mcw*Cp));
dt1=Tr(i)-Tcw1;
dt2=Tr(i)-Tcw2;
dtml=(dt2-dt1)/log(dt2/dt1);
Tr(i+1)=Tr(i)+dt*(ve*Cpe*(Te-Tref)/(Cpm(i)*V(i))-UA*dtml(i)/(rho*Cpm(i)*V(i))-dHd*kd(i)*Ca(i)*Cb(i)/(rho*Cpm(i))-dHi*kd(i)*Cc(i)*Cd(i)/(rho*Cpm(i)*Kc(i)));
Ca(i+1)=Ca(i)+dt*(kd(i)*(Cc(i)*Cd(i)/Kc(i)-Ca(i)*Cb(i))-ve*Ca(i)/V(i));
Cb(i+1)=Cb(i)+dt*(ve/V(i)*(Cbe-Cb(i))+kd(i)*(Cc(i)*Cd(i)/Kc(i)-Ca(i)*Cb(i)));
Cc(i+1)=Cc(i)+dt*(kd(i)*(Ca(i)*Cb(i)-Cc(i)*Cd(i)/Kc(i))-ve*Cc(i)/V(i));
Cd(i+1)=Cd(i)+dt*(kd(i)*(Ca(i)*Cb(i)-Cc(i)*Cd(i)/Kc(i))-ve*Cd(i)/V(i));
Cw(i+1)=Cw(i)+dt*(ve/V(i)*(Cwe-Cw(i)));
t(i+1)=i;
end
Answers (1)
Walter Roberson
on 24 Jun 2018
Vo = rand * 10;
dt = 1/100;
ve = rand * 50;
A = rand * 100;
ko = rand;
E = 10^3;
Cpa = rand * 10;
Cp = rand * 11;
Tcw1 = rand * 7;
UA = randn();
mcw = rand * 13;
Cpe = rand * 9;
Te = randn();
Tref = sqrt(2);
rho = 0.12345;
dHd = rand;
dHi = rand;
Cbe = rand;
Cwe = rand;
V(1)=Vo; %m³
h(1)=2*(2*Vo/pi)^(1/3); %m
Ca(1)=5; %kmol/m³
Cb(1)=0; %kmol/m³
Cc(1)=0; %kmol/m³
Cd(1)=0; %kmol/m³
Cw(1)=30.7; %kmol/m³
Tr(1)=300; %K
t(1)=0; %s
for i=1:300
V(i+1)=V(i)+dt*(ve);
h(i+1)=h(i)+dt*(ve/A);
kd(i)=ko*exp(E*(1/273-1/Tr(i)));
Kc(i)=10^(3885.44/Tr(i));
wa(i)=Ca(i)/(Ca(i)+Cb(i)+Cc(i)+Cd(i)+Cw(i));
Cpm(i)=wa(i)*Cpa+(1-wa(i))*Cp;
Tcw2=Tr(i)-(Tr(i)-Tcw1)*exp(-UA/(mcw*Cp));
dt1=Tr(i)-Tcw1;
dt2=Tr(i)-Tcw2;
dtml(i)=(dt2-dt1)/log(dt2/dt1); %CHANGED
Tr(i+1)=Tr(i)+dt*(ve*Cpe*(Te-Tref)/(Cpm(i)*V(i))-UA*dtml(i)/(rho*Cpm(i)*V(i))-dHd*kd(i)*Ca(i)*Cb(i)/(rho*Cpm(i))-dHi*kd(i)*Cc(i)*Cd(i)/(rho*Cpm(i)*Kc(i)));
Ca(i+1)=Ca(i)+dt*(kd(i)*(Cc(i)*Cd(i)/Kc(i)-Ca(i)*Cb(i))-ve*Ca(i)/V(i));
Cb(i+1)=Cb(i)+dt*(ve/V(i)*(Cbe-Cb(i))+kd(i)*(Cc(i)*Cd(i)/Kc(i)-Ca(i)*Cb(i)));
Cc(i+1)=Cc(i)+dt*(kd(i)*(Ca(i)*Cb(i)-Cc(i)*Cd(i)/Kc(i))-ve*Cc(i)/V(i));
Cd(i+1)=Cd(i)+dt*(kd(i)*(Ca(i)*Cb(i)-Cc(i)*Cd(i)/Kc(i))-ve*Cd(i)/V(i));
Cw(i+1)=Cw(i)+dt*(ve/V(i)*(Cwe-Cw(i)));
t(i+1)=t(i)+dt; %CHANGED
end
1 Comment
Image Analyst
on 24 Jun 2018
Matteus's "Answer" moved here because it's actually a comment to Walter rather than an answer to the original question. Matteus, if your question is answered by Walter then please click the "Accept this Answer" link to give him credit for it.
Thank you so much, Walter. About the random values, they were already a part of the code that I didn't show. I really just had forgotten about the "(i)" in the dtml line.
But seriously, thank you!!!!!!!!!!!!!
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!