使用matlab矩阵的前一个单元格中的值用于方程式

时间:2012-07-17 13:17:16

标签: matlab for-loop brute-force

您好我正在使用以下代码(暴力方法)。 “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;

1 个答案:

答案 0 :(得分:1)

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

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

  1. 没有循环的Matlab代码通常(很多)比使用循环的等效代码快得多;
  2. 带循环的代码通常更混乱,并且需要使用更多变量,而不是没有循环的等效代码。在理解代码时,杂乱是一个障碍
  3. 所以,例如,你的陈述

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

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

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

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

    n

    可以改写为

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

    对于Matlab将数组乘以标量,将乘法应用于数组的每个元素。而且,这不需要循环索引的值,例如((PV_supply*number_panels + WT_supply*number_turbines) - Demand/inverter_efficiency)*battery_charging_efficiency

    我恐怕现在必须去做一些工作,如果没有其他人这样做,我会稍后回来完成课程。如果您愿意,可以随意编辑此答案。