필터 지우기
필터 지우기

for loop doesn't seem to loop

조회 수: 4 (최근 30일)
Andrew Alkiviades
Andrew Alkiviades 2012년 7월 3일
Hi I have the following code
for i = 1:8760
A = [PVtech(i,:) WTtech(i,:)];
b = demand(i);
f = [CRF*PVtechcost(i,:).*PVcap(i,:)./PVtech(i,:) CRF*WTtechcost(i,:).*WTcap(i,:)./WTtech(i,:)];
x(i) = linprog(f, A,b,[], [], lb);
end
I am trying to optimise linprog over the 8760 data set but I can't seem to get the loop going for each row. therefore when I run it is get a size of A to be 1x30 (when it should be 8760 by 30) Does anyone see where I have coded wrongly ?
thank you

채택된 답변

Ryan
Ryan 2012년 7월 3일
You're not specifying the row of A that you are writing the data to, so each loop it just places [PVtech(i,:) WTtech(i,:)] into the first row of A.
Try:
for m = 1:8760
A(m,:) = [PVtech(m,:) WTtech(m,:)];
b = demand(m);
f = [CRF*PVtechcost(m,:).*PVcap(m,:)./PVtech(m,:) CRF*WTtechcost(m,:).*WTcap(m,:)./WTtech(m,:)];
x(m) = linprog(f, A,b,[], [], lb);
end
  댓글 수: 1
Sean de Wolski
Sean de Wolski 2012년 7월 3일
same with x I believe.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Thomas
Thomas 2012년 7월 3일
편집: Thomas 2012년 7월 3일
use ii instead of i since i is built into matlab for complex numbers
for ii=1:8760
ii % to show which loop you are in
A(ii,:)=[PVtech(ii,:) WTtech(ii,:)];
You also might have to change your
x(ii,:) = linprog(f, A(ii,:),b,[], [], lb)
Though I do feel that your program was running right just that you were only seeing the last A which will be 1x30 since it was being overwritten.
to see if you are going through the loop
just output ii
  댓글 수: 2
Andrew Alkiviades
Andrew Alkiviades 2012년 7월 3일
Still no luck! the ii output returns - 1 the size of A is still (1,30) and the size of b is still (1,1) A should be (8760x30) and b should be 8760x1
Ryan
Ryan 2012년 7월 3일
Are you sure that you are showing us everything that is happening in the code? Doing something simplified such as:
for ii = 1:8760
A(ii,:) = 1;
end
returns an 8760x1 vector for me.

댓글을 달려면 로그인하십시오.


Andrew Alkiviades
Andrew Alkiviades 2012년 7월 3일
Thanks guys - I have made the changes you suggest,
I now get, from the code below, two rows of A so I have a size(A) = (2,30) where A should in fact be 8760x30
I don't see why the loop doesn't go through all the 8760 rows as it is
for i = 1:8760
A(i,:) = [PVtech(i,:) WTtech(i,:)];
b = demand(i);
f = [CRF*PVtechcost(i,:).*PVcap(i,:)./PVtech(i,:) CRF*WTtechcost(i,:).*WTcap(i,:)./WTtech(i,:)];
%options == optimset('LargeScale', 'off', 'Simplex', 'on');
x(i,:) = linprog(f, A,b,[], [], lb,[])
end

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by