Question about for loop problem

조회 수: 6 (최근 30일)
Franziska
Franziska 2019년 9월 11일
댓글: Franziska 2019년 9월 11일
Hi Everyone I have a question about for loops:
I have a cutoff value (that is defined in another for loop, but I think it doesn't matter for my issue). I have individuals C's (Cj) between 0 and 1. Now I want for every element of Cj to check wether it is above or below the cutoff (The resulting EUI is calculated differently), and in the end I want a vector EUI, that gives me the EUI for every element of Cj. After this I want to sum up over all the EUI's.
It doesn't seem to work, can someone spot the mistake?
cutoff(i) = %definition of cutoff
Cj = linspace(0,1)
EUI = zeros(size(Cj));
for j = 1:numel(Cj)
if Cj(j)<cutoff(i)
EUI(j) = %formula;
else
EUI(j) = %formula;
end
end
EUI_total(i) = sum(EUI(j));

채택된 답변

meghannmarie
meghannmarie 2019년 9월 11일
편집: meghannmarie 2019년 9월 11일
In the last line, you are summing just the last element. Remove the j index.
EUI_total = sum(EUI);
I would vectoize this code if I were you and avoid loop. Try something like this:
cutoff(i) = %definition of cutoff
Cj = linspace(0,1);
EUI = zeros(size(Cj));
idx = Cj < cutoff(i);
EUI(idx) = formula1(Cj(idx));
EUI(~idx) = formula2(Cj(~idx));
EUI_total(i) = sum(EUI);
  댓글 수: 1
Franziska
Franziska 2019년 9월 11일
you're right, the summing up was the issue. Thank you very much!

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

추가 답변 (1개)

Matt J
Matt J 2019년 9월 11일
편집: Matt J 2019년 9월 11일
I don't see any mistakes (that's why posting your error messages and output is always a good thing), however, the whole thing can be done more efficiently with logical indexing in just a few lines
isless=(Cj<cutoff(i));
EUI(isless)= %formula;
EUI(~isless)= %formula;
result=sum(EUI)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by