我有下面的代码,在其中我试图从非零值开始"number_panels"one_answers"number_turbines"for循环。
更具体地说,我正在尝试3000到4000个"number_panels",间隔500个面板以及5到8个"number_turbines",具有一个涡轮机间隔即
number_of_days = 2;
for number_panels = 3000:500:4000 % range of PV panel units examined
for number_turbines = 5:8 % range of wind turbine units examined
for h=1:24 %# hours
for d = 1:number_of_days %# which day
n = h + 24*(d-1);
% hourly_deficit_1(...,..., h, d)= Demand(n)-(PV_supply(n)... %
hourly_deficit(number_panels + 1, number_turbines + 1, h,d) = hourly_annual_demand(n) - (hourly_annual_PV(n)*number_panels) - (hourly_annual_WT(n)*number_turbines);% hourly power deficit (RES supply with demand)
if hourly_deficit(number_panels + 1, number_turbines + 1, h,d)< 0 % zero out negative hourly deficit values (this is power surplus from RES)
hourly_deficit(number_panels + 1, number_turbines + 1, h,d) = 0;
end
当我这样做时,我得到的尺寸(hourly_deficit)=4001,9,24,2,而我期望并试图达到3,4,24,2的尺寸。有人知道我哪里错了吗?
变量number_panels
的值从3000开始,而不是0或1。因此,当你用该变量作为索引值对矩阵进行索引时,Matlab认为你想要3001st索引,因此给你一个3000个零的矩阵,3001st被设置为你想要的。
如果您跟随循环进入下一个循环,则number_panels
的值将变为3500。根据您的代码,您现在的索引为3501。这意味着从3002到3500的所有位置都将用零填充,3501将被设置为您给定的任何值。
同样的逻辑适用于number_turbines
。唯一的区别是,您将按照1进行索引,而不是像使用number_panels
那样按照500进行索引。
如果你想回到你期望的大小矩阵,你需要修改你调用索引值的方式。这可以通过多种方式实现。你可以在for循环中有一个计数器,也可以使用模数学。当您使用的步长不是1
时,模数数学不会很好地工作。当你的索引值是起始索引的倍数时,它也不起作用。
你必须弄清楚在这个舞台上什么最适合你。尤其是当你想要使用不是1的步长时。但对于从5到8的number_turbines
,可以使用number_turbines - 5 + 1
或更简洁的number_turbines-4
进行简单索引。
为了清楚起见,以下是您提供的代码,其中包含了必要的调整,以显示注释中提到的内容的使用情况。请注意,如果从5
以外的位置开始,则需要修改number_turbines
索引值的-4
。还要注意,现在需要对number_panels
向量进行索引,因为它不是一个循环值。
希望这能有所帮助!
number_of_days = 2;
number_panels = 3000:500:4000;
for idx_number_panels = 1:length(number_panels) % range of PV panel units examined
for number_turbines = 5:8 % range of wind turbine units examined
for h=1:24 %# hours
for d = 1:number_of_days %# which day
n = h + 24*(d-1);
% hourly_deficit_1(...,..., h, d)= Demand(n)-(PV_supply(n)... %
hourly_deficit(idx_number_panels , number_turbines -4, h,d) = hourly_annual_demand(n) - (hourly_annual_PV(n)*number_panels(idx_number_panels)) - (hourly_annual_WT(n)*number_turbines);% hourly power deficit (RES supply with demand)
if hourly_deficit(idx_number_panels, number_turbines -4, h,d)< 0 % zero out negative hourly deficit values (this is power surplus from RES)
hourly_deficit(idx_number_panels, number_turbines -4, h,d) = 0;
end
end
end
end
end