I know vectorized code is faster than using loops, so I've been trying to so with this code. I was hoping someone could show me how to improve these for and if loops. The program is meant to calculate the power load curve of a house, taking into account whether the different appliances are switch on or switch off at different hours of day, month, and year.
The ProbFanSummerWd, ProbCellChargerSummerWd, etc. are probability matrices used to decide if the appliance is on or off based on a previous random "choose"; TotalLoad is the resultant power curve.
This function is repeated many times within a larger program and consumes much time.
How could I improve those for and if loops? How can I replace them with vectorization?
I hope someone will help me. Thank you very much.
HourCount = 0;
for DayYear = 1:size(Season,2) %LOOP - ONE YEAR
if Season(DayYear) == 1 %LOOP - SUMMER SEASON
if WeekDay(DayYear)>=1 && WeekDay(DayYear)<=5 %SUMMER WEEKDAY
for Hour = 1:24 %LOOP - ONE DAY
HourCount = HourCount+1;
for h = 1:NumHouse %LOOP - HOUSE
Choose = rand(1); %CellCharger
if Choose <= ProbCellChargerSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowCellCharger;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByCellCharger;
end
Choose = rand(1); %Fan
if Choose <= ProbFanSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowFan;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByFan;
end
Choose = rand(1); %Fridge
if Choose <= ProbFridgeSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowFridge;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByFridge;
end
Choose = rand(1); %Heater
if Choose <= ProbHeaterSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowHeater;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByHeater;
end
Choose = rand(1); %Iron
if Choose <= ProbIronSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowIron;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByIron;
end
Choose = rand(1); %LampKitchen
if Choose <= ProbLampKitchenSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowLampKitchen;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByLampKitchen;
end
Choose = rand(1); %LampRoom
if Choose <= ProbLampRoomSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowLampRoom;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByLampRoom;
end
Choose = rand(1); %Radio
if Choose <= ProbRadioSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowRadio;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByRadio;
end
Choose = rand(1); %TV20
if Choose <= ProbTvSummerWd(Hour)
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ PowTv;
else
TotalLoad(1,HourCount) = TotalLoad(1,HourCount)+ StandByTv;
end
end
end