从非零值开始启动matlab进行循环



我有下面的代码,在其中我试图从非零值开始"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

最新更新