Vector output from a for loop

3 views (last 30 days)
Sercan Yalcin
Sercan Yalcin on 5 Dec 2019
Commented: Sercan Yalcin on 6 Dec 2019
Hello everyone,
I have an hourly temperature data which covers 8760 values inside a vector. The TMP shows the temperature values however the values below in the code is just for example since i can't put 8760 values here.
I want to get PGRED results as a vector output too. However, when i run the code, although it calculates PGRED values for all TMP values, i get an answer only for the last TMP value which is 36 in this case. My question is, how can i get all the PGRED answers inside 1 vector.
Thank you for your help in advance.
for TMP =[12, 3, 36]
if TMP < 9
PGRED=0
elseif 9<=TMP & TMP<10
PGRED= TMP-9
elseif 10<=TMP & TMP<28
PGRED= 1
elseif 28<=TMP & TMP<40
PGRED= -0.083*TMP + 3.33
else 40 >= TMP
PGRED=0
end
end

Accepted Answer

Raj
Raj on 5 Dec 2019
Edited: Raj on 5 Dec 2019
TMP =[12, 3, 36];
PGRED=zeros(size(TMP));
for ii=1:length(TMP)
if TMP(ii) < 9
PGRED(ii)=0;
elseif 9<=TMP(ii) && TMP(ii)<10
PGRED(ii)= TMP(ii)-9;
elseif 10<=TMP(ii) && TMP(ii)<28
PGRED(ii)= 1;
elseif 28<=TMP(ii) && TMP(ii)<40
PGRED(ii)= -0.083*TMP(ii) + 3.33;
else %40 >= TMP(ii) % this condition is not required. Just give a default condition.
PGRED(ii)=0;
end
end

More Answers (2)

Walter Roberson
Walter Roberson on 5 Dec 2019
TMP_values = [12, 3, 36];
num_TMP = length(TMP_values);
PGRED = zeros(1, num_TMP);
for TMP_idx = 1 : num_TMP
TMP = TMP_values(TMP_idx);
if TMP < 9
PGRED(TMP_idx) = 0;
elseif 9<=TMP & TMP<10
PGRED(TMP_idx) = TMP-9;
elseif 10<=TMP & TMP<28
PGRED(TMP_idx) = 1;
elseif 28<=TMP & TMP<40
PGRED(TMP_idx) = -0.083*TMP + 3.33;
elseif 40 >= TMP
PGRED(TMP_idx) = 0;
else
error('Unexpected out of range TMP = %f', TMP)
end
end
This is not what I would recommend for this situation: I would recommend that you learn how to use logical indexing. However, I do recommend that you learn to use this pattern, of storing all of the values in a vector and indexing over the length of the vector and using the index to store the results.
  1 Comment
Sercan Yalcin
Sercan Yalcin on 6 Dec 2019
Thank you for the suggestion, i will check logical indexing out!

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 5 Dec 2019
TMP = randi([-12,45],30,4);
f = {@(x)0;@(x)x-9;@(x)1;@(x)3.33 - .083*x;@(x)0};
i = discretize(TMP,[-inf,9,10,28,40,inf]);
out = arrayfun(@(x,y)f{y}(x),TMP,i);

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!