Solve "Index exceeds the number of array elements (1)", "Vectors must be the same length." errors

1 view (last 30 days)
I'd like to solve those problems from under coding using A, B, and C relationships. If equation error can't be fixed, "B(i+1)=B(i)+((h.*q)/(k*T*E))*C(i)" can be used.
a = 0;
b = 1;
n = 110;
k = 8.61733*10^(-5);
T = 300 ;
q = 1.60218*10^(-19);
E = 8.8542*10^(-12)
x= linspace(a,b,n);
h= x(2)-x(1);
A = zeros(size(x));
B = zeros(size(x));
for i = 0:n-1
A(0)=3;
B(0)=1;
C(i)=2*x(i)+3;
A(i+1)=A(i)-h.*B(i)-(0.5.*h.^2*q.*C(i))./(k*T*E);
B(i+1)=B(i)+((h.*q)/(k*T*E))*0.5*(C(i)+C(i+1));%equation error
end
plot(transpose(x),A,'.')

Accepted Answer

Walter Roberson
Walter Roberson on 15 Jul 2020
a = 0;
b = 1;
n = 110;
k = 8.61733*10^(-5);
T = 300 ;
q = 1.60218*10^(-19);
E = 8.8542*10^(-12)
x= linspace(a,b,n);
h= x(2)-x(1);
A = zeros(size(x));
B = zeros(size(x));
A(0+1)=3;
B(0+1)=1;
for i = 0:n-1
C(i+1)=2*x(i+1)+3;
A(i+1+1)=A(i+1)-h.*B(i+1)-(0.5.*h.^2*q.*C(i+1))./(k*T*E);
B(i+1+1)=B(i+1)+((h.*q)/(k*T*E))*0.5*(C(i+1)+C(i+1+1));
end
plot(transpose(x),A,'.')
  12 Comments
sookyung Kang
sookyung Kang on 20 Jul 2020
Yes. And no. I need to figure out that C equation by comparing theoretical equation as I didn't put this code.
Walter Roberson
Walter Roberson on 20 Jul 2020
Which theoretical equation are you comparing to, and which result from your program are you comparing it to?
How do you know when you have reached and adequate solution?

Sign in to comment.

More Answers (1)

Tanmay Das
Tanmay Das on 15 Jul 2020
Hi,
I have the understanding that you are facing trouble in indexing of arrays. Unlike C++ or Python, indexing starts from 1 in MATLAB. So if you write A(0), then it will throw error. The following code may be useful for your understanding:
a = 0;
b = 1;
n = 110;
k = 8.61733*10^(-5);
T = 300 ;
q = 1.60218*10^(-19);
E = 8.8542*10^(-12)
x= linspace(a,b,n);
h= x(2)-x(1);
A = zeros(size(x));
B = zeros(size(x));
A(1)=3;
B(1)=1;
C = 2*x + 3
for i = 1:n-1
A(i+1)=A(i)-h.*B(i)-(0.5.*h.^2*q.*C(i))./(k*T*E);
B(i+1)=B(i)+((h.*q)/(k*T*E))*0.5*(C(i)+C(i+1));%equation error
end
plot(transpose(x),A,'.')
Also please note that similar operations on each element of array can be done at once in MATLAB and do not require to run a loop like in case of C.
C = 2*x + 3
Hope that helps!
  1 Comment
sookyung Kang
sookyung Kang on 16 Jul 2020
Edited: sookyung Kang on 16 Jul 2020
Thanks for your reply.
But no it is not correct. It doesn't reflect C value as I could see same graph.
I've followed Walter Roberson's coding. Now I'm in the situation to fix the ploting graph as loop structure and x length are different.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!