ベクトル化されたコードはループを使用するよりも高速であることを知っているので、このコードでそうしようとしています。for
誰かがこれらとif
ループを改善する方法を教えてくれることを望んでいました. このプログラムは、家の電力負荷曲線を計算することを目的としており、さまざまな電化製品が日、月、年のさまざまな時間にオンまたはオフになるかどうかを考慮します。
、などはProbFanSummerWd
、ProbCellChargerSummerWd
以前のランダムな「選択」に基づいてアプライアンスがオンかオフかを決定するために使用される確率行列です。TotalLoad
結果の電力曲線です。この関数は、より大きなプログラム内で何度も繰り返され、多くの時間を消費します。
for
それらとif
ループをどのように改善できますか? それらをベクトル化に置き換えるにはどうすればよいですか?
誰かが私を助けてくれることを願っています。どうもありがとうございました。
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