matlab强力索引

时间:2012-07-13 15:22:05

标签: matlab for-loop brute-force

您好我正在使用蛮力方法来检查“面板”和“涡轮机”的可能组合

我的代码是

 for number_panels = 0:5

for number_turbines = 0:10


    for n = 1:24 % number of hours per day



deficit(n) = Demand(n) - (PV_supply(n)*number_panels) -...
 (WT_supply(n)*number_turbines);% hourly power deficit

        if deficit(n)<0

            deficit(n) = 0;

        end

我上面遇到的问题是我还没有想出这段代码的正确索引。

我想要做的是找到“number_panels”,“number_turbines”和“n”的“赤字”。就目前而言,我只能找到最后一个循环的“赤字”。 我如何编码以便我可以选择访问第n行(或“n”组,即1-24)以及“number_panels”“number_turbines”选项?


谢谢 - 为了找到每个赤字(n)值的总和,从而得到24小时期间各自的总赤字,我做了以下,在我看来能够做我想问的但是我得到的答案不正确:

 daily_deficit(number_panels + 1, number_turbines + 1) =...
 sum(deficit(number_panels + 1, number_turbines + 1,n)) –

2 个答案:

答案 0 :(得分:0)

您的问题是,您将deficit结果仅存储为值n的函数,即每天的小时数。在n周围的内部循环中,每次通过外部循环都会继续替换值,因此在运行结束时,n = 1:24 = number_panels处的number_turbines值只有deficit(number_panels+1, number_turbines+1, n) = ... disp(deficit(3+1, 4+1, 5)) = 10。

试试这个:

number_panels

最后,你可以检查给定三个指数的任何组合。我在number_panels和number_turbines中添加了值1,因为MATLAB使用了从1开始的索引。要获得特定数量的面板或涡轮机的结果,请确保在检查时添加1。

具体而言,当天5小时的3个面板和4个涡轮机:

number_turbines

编辑:为{{1}}和{{1}}的值添加1以避免0索引。

答案 1 :(得分:0)

function calcDeficit.m:

File Edit Options Buffers Tools ObjC Help                                                                              
function deficit = calcDeficit (Demand, PV_supply, WT_supply)

  % initialize the size (good practice)
  deficit = zeros(6,11,24);


  for number_panels = 0:5

    for number_turbines = 0:10

      for n = 1:24 % number of hours per day
        deficit(number_panels+1,number_turbines+1,:) = Demand(n) - (PV_supply(n)*number_panels) -...
          (WT_supply(n)*number_turbines);% hourly power deficit

        if deficit(n)<0 
          deficit(n) = 0;
        end
      end
    end
  end
return

示例电话:

Demand=randn(24,1); PV_supply=randn(24,1); WT_supply=randn(24,1); test(Demand,PV_supply,WT_supply)

您可以通过

访问Demand
Demand(panels+1,number_turbines+1,hour)