how to identify the mistakes in loop in the given following code?
Mostrar comentarios más antiguos
I have to find q, n value and TC. we need to find the these three values in iteration way. How to solve it?
clc
clear all
pr=7;
p=2500;
D=1600;
z=4;
zr=4;
m=10;
hr=5;
h1=12;
h2=11;
h3=13;
cL=4;
c=20;
c0=2;
c1=3;
c2=2;
ce=15;
k=0.1;
alpha=0.1;
beta=0.9;
u=1-alpha+alpha.*beta;
s=250;
A=110;
g0=15;
g1=20;
theta1=1;
theta2=0.6;
w0=0.3;
w1=0.2;
TC1=inf
q=1:10:191
n=1:1:20
j=1;
l=1;
for i=1:length(q)
n=sqrt((D.*zr.*m+s+c.*g0+(A.*((q(i).*h2)/2))))/(q(i).*(((hr+cL.*k).*((D.*q(i))/(m.*p)))+((h1.*q(i)).*((1/2)-(((2.*u-1).*D)/(2.*p.*u))-D))+(D.*ce.*g1.*theta1)+(ce.*((w1.*(1-(((2.*u-1).*D)./(2.*D.*u))).*q(i))-(q(i)./2)).*theta2)));
q=sqrt((2.*D.*(zr.*m+s+g0.*(c+n(i).*ce.*theta1)+A+n(i).*h3))./(n(i).^2.*(((hr+cL.*k).*(D./m.*p))+(h1.*(1-(((2.*u-1).*D)./(2.*p.*u)))+(ce.*(w1.*(2-(((2.*u-1).*D)./(p.*u))-1).*theta2))))));
N(i+1)=n;
Q(i+1)=q;
j=j+1;
end
N
Q
z1=1;
for z=2:1:20
if ((N(z)~=N(z-1)) | Q(z)~=Q(z-1))
z1=z1+1;
else
break
end
end
z1
j=1;
for i=1:20
Q=Q(i);
N=N(i);
TC1=(pr.*D)+(z.*(m.*D./N(i).*Q(i)))+((hr+cL.*k).*(D.*N(i).*Q(i)./2.*m.*p))+(h1.*(1-(((2.*u-1).*D)./(2.*p.*u))).*N(i).*Q(i))-(h1.*N(i).*Q(i)/2)+(s.*D./N(i).*Q(i))+(D.*A./N(i).*Q(i))+(D.*h3./Q(i))+(D.*h2./2.*N(i))+((D./u).*(c0+(c1.*alpha)+(c0.*alpha)+(c2.*(1-beta).*alpha)))+((c.*D./N(i).*Q(i)).*(g0+g1.*N(i).*Q(i)))+(((D.*ce.*N(i).*theta1)./(N(i).*Q(i))).*(g0+g1.*N(i).*Q(i)))+((w0+w1.*(((1-(((2.*u-1).*D)./(2.*p.*u))).*N(i).*Q(i))-(N(i).*Q(i)/2))).*ce.*theta2);
TC(i)=TC1;
j=j+1;
end
round(TC)
for m=2:5
if(TC1 >=TC)
TC1=TC;
else
ansn = m+1;
break
end
end
round(TC)
6 comentarios
Ghazwan
el 10 de Oct. de 2022
you have this line
n=1:1:20
Then, in the for loop, you are giving it new values.
M.Rameswari Sudha
el 10 de Oct. de 2022
Adam Danz
el 10 de Oct. de 2022
Please edit your content and format your code. This will improve readability and will make it easy to copy blocks of code.
Jan
el 10 de Oct. de 2022
@Adam Danz: Solved. I've explained formatting 1200 times and gave up finally. It is less work to format the code by my own.
Thanks @Jan
@M.Rameswari Sudha, I ran your formatted code to reveal the error message.
Jan
el 10 de Oct. de 2022
@M.Rameswari Sudha: Codes like this must fail:
for i=1:20
Q=Q(i);
N=N(i);
...
end
In the first iteration the arrays Q and N are set to the scalar value of their first elements. Then there is no 2nd element in Q and N in the next iteration. The same problem here:
for i=1:length(q)
n = sqrt((D.*zr.*m+s+c.*g0+(A.*((q(i) ...
q = ... n(i) ...
% Now q and n are scalars and in the 2nd iteration "q(i)" and "n(i)" will fail.
end
By the way, the code can be made much more readable. Comapre
j = 1;
for i=1:length(q)
n=sqrt((D.*zr.*m+s+c.*g0+(A.*((q(i).*h2)/2))))/(q(i).*(((hr+cL.*k).*((D.*q(i))/(m.*p)))+((h1.*q(i)).*((1/2)-(((2.*u-1).*D)/(2.*p.*u))-D))+(D.*ce.*g1.*theta1)+(ce.*((w1.*(1-(((2.*u-1).*D)./(2.*D.*u))).*q(i))-(q(i)./2)).*theta2)));
q=sqrt((2.*D.*(zr.*m+s+g0.*(c+n(i).*ce.*theta1)+A+n(i).*h3))./(n(i).^2.*(((hr+cL.*k).*(D./m.*p))+(h1.*(1-(((2.*u-1).*D)./(2.*p.*u)))+(ce.*(w1.*(2-(((2.*u-1).*D)./(p.*u))-1).*theta2))))));
N(i+1)=n;
Q(i+1)=q;
j=j+1;
end
with
R = (2 * u - 1) * D;
S = R / (2 * p * u);
for i = 1:length(q)
N(i+1) = sqrt(D * zr * m + s + c * g0 + A * q(i) * h2 / 2) / ...
(q(i) * ((hr + cL * k) * D * q(i) / (m * p) + ...
h1 * q(i) * (0.5 - S - D) + ...
D * ce * g1 * theta1 + (ce * q(i) * (w1 * (1 - R / (2 * D * u)) - ...
0.5) * theta2)));
Q(i+1) = sqrt((2 * D * (zr * m + s + g0 * (c + n(i) * ce * theta1) + A + ...
n(i) * h3)) / (n(i)^2 * ((hr + cL * k) * D / m * p + ...
h1 * (1 - S) + (ce * w1 * (1 - 2 * S) * theta2))));
end
j = 1 + length(q);
Respuestas (1)
Adam Danz
el 10 de Oct. de 2022
for i=1:length(q)
n=sqrt((D.*zr.*m+s+c.*g0+(A.*((q(i).*h2)/2))))/(q(i).*(((hr+cL.*k).*((D.*q(i))/(m.*p)))+((h1.*q(i)).*((1/2)-(((2.*u-1).*D)/(2.*p.*u))-D))+(D.*ce.*g1.*theta1)+(ce.*((w1.*(1-(((2.*u-1).*D)./(2.*D.*u))).*q(i))-(q(i)./2)).*theta2)));
% ^ ^ .... (and more)
q=sqrt((2.*D.*(zr.*m+s+g0.*(c+n(i).*ce.*theta1)+A+n(i).*h3))./(n(i).^2.*(((hr+cL.*k).*(D./m.*p))+(h1.*(1-(((2.*u-1).*D)./(2.*p.*u)))+(ce.*(w1.*(2-(((2.*u-1).*D)./(p.*u))-1).*theta2))))));
% ^ oops!
N(i+1)=n;
Q(i+1)=q;
j=j+1;
end
You're indexing q(i) assuming q is a vector which is the correct assumption on the first iteration of the loop. But then you're overwriting q and replacing the vector with a scalar. So when you index q(i) and i>1, you get an indexing error.
Categorías
Más información sobre Mathematics en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!