Performing calculation with multiple conditions with for loop and nested if statements

2 views (last 30 days)
I have a column of data (temperatures) and want to create a second column based on these temperatures. In Excel, it is accomplished with a simple nested if statement. My loop in Matlab, however, works for a few rows, then begins to return 0's. The conditions are:
  • If temperature (T1) is < 0, then RHCrit = 0
  • If T1 is between 0 and 20, then RHCrit = -0.00267*(T1^3)+0.160*(T1^2)-3.13*T1+100
  • If T1 is >20, then RHCrit = 80
My code right now is:
RHcrit = zeros(size(T1));
for i = 1:length(T1)
if T1(i)>0
if T1(i)<20
RHcrit(i)=-0.00267*(T1(i)^3)+0.160*(T1(i)^2)-3.13*T1(i)+100
else
RHcrit(i)=80
end
else
RHcrit(i)=0
end
end

Accepted Answer

Nicolas Schmit
Nicolas Schmit on 5 Dec 2017
This code is working fine. Are your sure you loaded T1 properly? As KSSV mentioned, you do not need a for loop to do this calculation. Using logical indexing would be more efficient.
ds = datastore('T1.txt');
data = ds.readall();
T1 = data{:,1};
RHcrit = zeros(size(T1));
for i = 1:length(T1)
if T1(i)>0
if T1(i)<20
RHcrit(i)=-0.00267*(T1(i)^3)+0.160*(T1(i)^2)-3.13*T1(i)+100;
else
RHcrit(i)=80;
end
else
RHcrit(i)=0;
end
end
  3 Comments
Kevin Zhang
Kevin Zhang on 5 Dec 2017
Okay, I think there was a bug with my original file. I copied the file retrieval portion and appended the for loop, in a new file, and it worked fine. Something was wrong with the original file I was working in.
Kevin Zhang
Kevin Zhang on 5 Dec 2017
I am an idiot. I didn't add semicolons to the statements in my for/if loops. This was what was causing all of my problems.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!