Vector output from a for loop

2 ビュー (過去 30 日間)
Sercan Yalcin
Sercan Yalcin 2019 年 12 月 5 日
コメント済み: Sercan Yalcin 2019 年 12 月 6 日
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

採用された回答

Raj
Raj 2019 年 12 月 5 日
編集済み: Raj 2019 年 12 月 5 日
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

その他の回答 (2 件)

Walter Roberson
Walter Roberson 2019 年 12 月 5 日
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 件のコメント
Sercan Yalcin
Sercan Yalcin 2019 年 12 月 6 日
Thank you for the suggestion, i will check logical indexing out!

サインインしてコメントする。


Andrei Bobrov
Andrei Bobrov 2019 年 12 月 5 日
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);

Community Treasure Hunt

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

Start Hunting!

Translated by