Error Message Index out of bounds

I have the code below and am getting the following error.
Attempted to access C(2); index out of bounds because numel(C)=1.
any ideas why?
h=0.1 ;
k1=0.005;
k2=0.005;
k3=0.1 ;
t=[0:h:200] ;
E(1)=10;
S(1)=100;
C(1)=0;
P(1)=0;
for i=1:numel(t)-1
%E
e1=(k2*C(i)+k3*C(i)-k1*E(i)*S(i));
e2=k2*[C(i)+(h*e1/2)]+k3*[C(i)+(h*e1/2)]-k1*[E(i)+(h*e1/2)]*[S(i)+(h*e1/2)]
e3=k2*[C(i)+(h*e2/2)]+k3*[C(i)+(h*e2/2)]-k1*[E(i)+(h*e2/2)]*[S(i)+(h*e2/2)]
e4= k2*[C(i)+(h*e3)]+k3*[C(i)+(h*e3)]-(k1*[E(i)+(h*e3)]*[S(i)+(e3*h)])
end
plot(t,e)

1 commentaire

Matt J
Matt J le 11 Fév 2014
Modifié(e) : Matt J le 11 Fév 2014
In future, please highlight your code and apply the
formatting button, as I have just done for you now.

Connectez-vous pour commenter.

Réponses (2)

Matt J
Matt J le 11 Fév 2014

0 votes

any ideas why?
Yes. C is a scalar, but you are indexing it in your loop at many C(i) as if it were a vector. You must decide what C is really supposed to be.

2 commentaires

Kyle
Kyle le 11 Fév 2014
i was just trying to indicate that the initial value for C is zero ( and the same for E S and P). is that not a valid way of going about it? do u have any suggestions on how to correctly code that?
Matt J
Matt J le 11 Fév 2014
Modifié(e) : Matt J le 11 Fév 2014
But your loop doesn't refer only to the initial value of C, it refers to other C(i) too, which you have not supplied.

Connectez-vous pour commenter.

Kyle
Kyle le 11 Fév 2014
so the for loop actually had additional equations. ( i had thought, that if i isolated a set of the equations, i could figure out the concept of the code, w.o making it tedious . obviously that was incorrect.) the code is running now. but i keep getting "NaN" for a ton of my output. any idea why?
h=0.1 ; k1=0.005; k2=0.005; k3=0.1 ;
t=[0:h:200];
E(1)=10;
S(1)=100;
C(1)=0;
P(1)=0;
for i=1:numel(t)-1
%E
e1=(k2*C(i)+k3*C(i)-k1*E(i)*S(i));
e2= k2*[C(i)+(h*e1/2)]+k3*[C(i)+(h*e1/2)]-k1*[E(i)+(h*e1/2)]*[S(i)+(h*e1/2)];
e3= k2*[C(i)+(h*e2/2)]+k3*[C(i)+(h*e2/2)]-k1*[E(i)+(h*e2/2)]*[S(i)+(h*e2/2)];
e4= k2*[C(i)+(h*e3)]+k3*[C(i)+(h*e3)]-(k1*[E(i)+(h*e3)]*[S(i)+(e3*h)]);
E(i+1)=E(i)+(e1+2*e2+2*e3+e4)/6;
% For S
s1=k2*C(i) -k1*E(i)+S(i);
s2=k2*[C(i)+(h*s1/2)]-k1*[E(i)*(h*s1/2)]*[S(i)*(h*s1/2)] ;
s3=k2*[C(i)+(h*s2/2)]-k1*[E(i)*(h*s2/2)]*[S(i)*(h*s2/2)];
s4=k2*[C(i)+(h*s3)]-k1*[E(i)*(h*s3)]*[S(i)*(h*s3)];
S(i+1)=S(i)+(s1+2*s2+2*s3+s4)/6;
% For C
c1=k1*E(i)*S(i)-k2*C(i)-k2*C(i)-k3*C(i);
c2=[k1*[E(i)+(h*c1)]*[S(i)*(h*c1/2)]]-[k2*[C(i)*(h*c1/2)]]-[k2*[C(i)*(h*c1/2)]]-[k3*[C(i)*(h*c1/2)]];
c3=[k1*[E(i)+(h*c2)]*[S(i)*(h*c2/2)]]-[k2*[C(i)*(h*c2/2)]]-[k2*[C(i)*(h*c2/2)]]-[k3*[C(i)*(h*c2/2)]];
c4=[k1*[E(i)*(h*c3)]*[S(i)*(h*c3)]]-[k2*[C(i)*(h*c3)]]-[k2*[C(i)*(h*c3)]]-[k3*[C(i)*(h*c3)]];
C(i+1)=C(i)+(c1*2*c2+2*c3+c4);
%For P
p1= k3*C(i)
p2=k3*[C(i)*(h*p1/2)];
p3=k3*[C(i)*(h*p2/2)];
p4=k3*[C(i)*(h*p3)];
P(i+1)=P(i)+(p1*2*p2+2*p3+p4)
end
plot(t,E)
hold on
plot(t,C)
plot(t,P)
plot(t,S)

2 commentaires

Use
>>dbstop if naninf
to see where they are being introduced.
Image Analyst
Image Analyst le 11 Fév 2014
Modifié(e) : Image Analyst le 11 Fév 2014
Your numbers are overflowing. Just look at some of them - they're huge. Eventually you reach infinity. What are you doing? Are you sure those are the right equations?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Mathematics dans Centre d'aide et File Exchange

Tags

Question posée :

le 11 Fév 2014

Modifié(e) :

le 11 Fév 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by