Azzera filtri
Azzera filtri

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

1 visualizzazione (ultimi 30 giorni)
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,'.')

Risposta accettata

Walter Roberson
Walter Roberson il 15 Lug 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 Commenti
sookyung Kang
sookyung Kang il 20 Lug 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 il 20 Lug 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?

Accedi per commentare.

Più risposte (1)

Tanmay Das
Tanmay Das il 15 Lug 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 Commento
sookyung Kang
sookyung Kang il 16 Lug 2020
Modificato: sookyung Kang il 16 Lug 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.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by