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