您好我正在使用以下代码(暴力方法)。 “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;
答案 0 :(得分:1)
这是一个扩展评论,只是对您问题的部分内容的回答,但我认为它也与您最近的其他问题相关。
将Matlab视为一种数组处理语言很有帮助,计算的自然“单位”是一个数组而不是许多其他语言中的标量。如果你发现自己编写循环来迭代数组的元素停止并思考,那么在没有循环的情况下,可能会有一种更“自然”的方式来表达相同的计算。循环并没有什么绝对的错误,但过度依赖它们可能会产生两种有害影响:
所以,例如,你的陈述
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
。
我恐怕现在必须去做一些工作,如果没有其他人这样做,我会稍后回来完成课程。如果您愿意,可以随意编辑此答案。