Array indices must be positive integers or logical values. This error is coming at line:while C(counter)> C(j) && abs(f)>.00001. Please help me out.

2 Ansichten (letzte 30 Tage)
D=800; d=[1 600 09 0.02 300 500; 2 500 10 0.04 100 400; 3 400 06 0.08 050 200]; g=1; P1=400; P2=300; P3=100; del_C1=.04*P1-.16*P3+2; del_C2=.08*P2-.16*P3+4; counter=1; C=15900; while C(counter)> C(j) && abs(f)>.00001 if sum(del_C1,del_C2)<0 && del_C1>del_C2 P1=P1+1; P2=P2; P3=P3-1; P=[P1;P2;P3]; f=D-sum(P); C=d(:,2)+d(:,3).*P+d(:,4).*P.*P; counter=counter+1; j=counter;

Akzeptierte Antwort

Image Analyst
Image Analyst am 23 Sep. 2018
You forgot to assign j before the loop. Fix:
D=800;
d=[1 600 09 0.02 300 500;
2 500 10 0.04 100 400;
3 400 06 0.08 050 200];
g=1;
P1=400;
P2=300;
P3=100;
del_C1=.04*P1-.16*P3+2;
del_C2=.08*P2-.16*P3+4;
counter=1;
C=15900;
j=counter;
while C(counter)> C(j) && abs(f)>.00001
if sum(del_C1,del_C2)<0 && del_C1>del_C2
P1=P1+1;
P2=P2;
P3=P3-1;
P=[P1;P2;P3];
f=D-sum(P);
C=d(:,2)+d(:,3).*P+d(:,4).*P.*P;
counter=counter+1;
j=counter;
end
end
msgbox('Done');
Also, read this link so you know how to format your code in Answers.
  1 Kommentar
Rashedul Chy
Rashedul Chy am 23 Sep. 2018

Thanks for replying sir. Can u tell me why my loop is not working. Output is showing only the initial values i assigned. Here is the full programme: D=800; d=[1 600 09 0.02 300 500; 2 500 10 0.04 100 400; 3 400 06 0.08 050 200]; g=1; P1=400; P2=300; P3=100; P=[P1;P2;P3]; del_C1=.04*P1-.16*P3+2; del_C2=.08*P2-.16*P3+4; counter=1; C=15900; j=counter; while C(counter)> C(j) && abs(f)>.00001 if sum(del_C1,del_C2)<0 && del_C1>del_C2 P1=P1+1; P2=P2; P3=P3-1; P=[P1;P2;P3]; f=D-sum(P); C=d(:,2)+d(:,3).*P+d(:,4).*P.*P; counter=counter+1; j=counter; elseif sum(del_C1,del_C2)<0 && del_C1<del_C2 P1=P1; P2=P2+1; P3=P3-1; P=[P1;P2;P3]; f=D-sum(P); C=d(:,2)+d(:,3).*P+d(:,4).*P.*P; counter=counter+1; j=counter; elseif sum(del_C1,del_C2)>0 && del_C1>del_C2 P1=P1-1; P2=P2; P3=P3+1; P=[P1;P2;P3]; f=D-sum(P); C=d(:,2)+d(:,3).*P+d(:,4).*P.*P; counter=counter+1; j=counter; elseif sum(del_C1,del_C2)>0 && del_C1<del_C2 P1=P1-1; P2=P2; P3=P3+1; P=[P1;P2;P3]; f=D-sum(P); C=d(:,2)+d(:,3).*P+d(:,4).*P.*P; counter=counter+1; j=counter; end end display(P,'Generated Power in MW') display(C,'Total Cost in $') display(counter,'Iterations numbers')

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by