1

您好我正在使用以下代码(蛮力方法)。“PV_supply”、“WT_supply”和“Demand”为 48x1 尺寸。我要做的是计算 48 行中每一行的“Energy_battery”值。然而,要做到这一点,我需要在每一行的计算中使用前一行的“Energy_battery”值,我还没有弄清楚如何编码,并希望对此有所帮助。因此,第 1 行中的“Energy_battery”等式将第 1 行中的“Energy_battery”值用于等式等

我的代码是:

for number_panels = 0:5

for number_turbines = 0:3


    for h=1:24 %# hours

        for d = 1:number_of_days %# which day

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

 Energy_battery(number_panels + 1, number_turbines + 1,1,1) = 100;

Energy_battery(number_panels + 1, number_turbines + 1,n+1,1) =...
Energy_battery(number_panels + 1, number_turbines + 1,h,1)  + ...
((PV_supply(n)*number_panels + WT_supply(n)*number_turbines) - ...   
Demand(n)/inverter_efficiency)*battery_charging_efficiency;
4

1 回答 1

1

这是一个扩展评论,只是对您部分问题的回答,尽管我认为它也与您最近的其他问题有关。

将 Matlab 视为一种数组处理语言会很有帮助,计算的自然“单元”是一个数组,而不是许多其他语言中的一个标量。如果您发现自己编写循环来迭代数组的元素并停下来思考,那么可能会有一种更“自然”的方式来表达没有循环的相同计算。循环没有绝对的问题,但过度依赖循环会产生 2 个有害影响:

  1. 没有循环的 Matlab 代码通常比有循环的等价代码快得多;
  2. 与没有循环的等效代码相比,带有循环的代码通常更混乱,并且需要使用更多的变量。混乱是理解代码的障碍

因此,例如,您的陈述

Energy_battery(number_panels + 1, number_turbines + 1,1,1) = 100;

可以完全从循环嵌套中取出并重写为

Energy_battery(:,:,1,1) = 100;

现在,对于您的大部分代码,如果我理解正确,您希望根据您拥有的其他向量的元素中Energy_battery(:,:,n+1,1)的值更新每个元素。首先,让我们整理一下Energy_battery(:,:,n,1)n

((PV_supply(n)*number_panels + WT_supply(n)*number_turbines) - Demand(n)/inverter_efficiency)*battery_charging_efficiency

可以改写为

((PV_supply*number_panels + WT_supply*number_turbines) - Demand/inverter_efficiency)*battery_charging_efficiency

对于 Matlab,将数组乘以标量会将乘法应用于数组的每个元素。同样,这不需要对索引值进行循环,例如n.

恐怕我现在得去做点功课,晚点回来完成课程,如果没有其他人做的话。如果您愿意,请随时编辑此答案。

于 2012-07-17T13:52:11.810 回答