0

我对代码进行了以下更改,但仍然在调用“if 语句”的行上出现“索引超出矩阵尺寸”错误,并且我要从 2:25 开始循环“h”。我仍然知道如何在当前维度方程表达式中使用前一维度中的元素

  number_of_days = 3;
number_of_hours = 24*number_of_days;
number_panels = 1:5;


for idx_number_panels = 1:length(number_panels) % range of PV panel units examined

for number_turbines = 0:1 % range of wind turbine units examined

    for number_batteries = 1:2 % range of battery units examined


        for h=2:25 %# hours
               battery_capacity(:,:,:,1,1) = max_battery_capacity*number_batteries;

            for d = 1:number_of_days %# which day

                n = h + 24*(d-1);



                if   (max_battery_capacity*number_batteries) - (battery_capacity(idx_number_panels, number_turbines+1 ,number_batteries, h-1,d)*number_batteries) >0

                    storage_availability(idx_number_panels, number_turbines+1 ,number_batteries, h,d) =  (max_battery_capacity*number_batteries) - (battery_capacity(idx_number_panels, number_turbines+1 ,number_batteries, h-1,d)) ;

                else


                    storage_availability(idx_number_panels, number_turbines+1 ,number_batteries, h,d) = 0;


                end
4

2 回答 2

2

让我们以小时为单位来看看这个。

for h = 1:24
    battery_capacity(1) = initial_battery_capacity*number_batteries

    if hourly_total_RES(h) > hourly_annual_demand(n), % battery charging
        battery_capacity(h) = battery_capacity(h-1);
    else
        battery_capacity(h) = battery_capacity(h-1);
    end
end

首先,if 语句的两边和写的一样。我假设您的实际代码对以前的数据进行了某种处理。如果没有,那就有问题了。

如果您切换日期和小时循环的顺序,它还可能使代码更容易思考。对我来说,一次查看一天中的所有时间比查看每天的第一个小时,然后是每天的第二个小时更有意义......

至于索引,一个明确的错误是您battery_capacity(h-1)在循环的第一次迭代中索引。也就是说,当h是 1 时,您定义battery_capacity(1)然后尝试查看battery_capacity(0),这可能是引发错误的原因。

要解决此问题,您可以检查 if h == 1,但我认为更优雅的方法是在进入该循环之前循环h = 2:24并设置。battery_capacity(1)看看这段代码是否有效:

for d = 1:number_of_days
    battery_capacity(1) = initial_battery_capacity*number_batteries
    for h = 2:24
        if hourly_total_RES(h) > hourly_annual_demand(n), % battery charging
            battery_capacity(h) = battery_capacity(h-1);
        else
            battery_capacity(h) = battery_capacity(h-1);
        end
    end
end
于 2012-07-26T17:42:26.220 回答
0

据我了解,最后两个维度分别存储小时和天。因此,要将第一天的值设置为 hour=1(我假设这意味着一天的午夜开始):

battery_capacity(:,:,:,1,1) = 2;    %# 2kWh

这将为2所有“面板”、所有“涡轮机”和所有“电池”设置值。

我假设您已经在代码中的某个位置预先分配了矩阵。


对于它的价值,我认为您battery_capacity在代码中第一次提到的地方有错字(缺少h参数)

于 2012-07-26T17:29:27.083 回答