Индексация грубой силы в Matlab

Привет, я работаю с методом грубой силы, чтобы изучить возможные комбинации «панелей» и «турбин».

Мой код

 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». В нынешнем виде я могу найти только «дефицит» для последнего цикла for. Как я могу закодировать так, чтобы у меня была возможность доступа к 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)) –

person user643469    schedule 13.07.2012    source источник
comment
Если вы опубликуете синтаксически правильный фрагмент Matlab, некоторые из нас вырежут и вставят его и посмотрим, сможем ли мы запустить его и выяснить вашу проблему. То, что вы опубликовали, не является синтаксически правильным. Я, вероятно, не единственный SOer, слишком праздный, чтобы внести основные исправления в ваш код в интересах помощи вам. Сделайте себе одолжение, внесите эти исправления самостоятельно.   -  person High Performance Mark    schedule 13.07.2012
comment
Привет, спасибо за совет, хотя я не совсем уверен, в чем проблема. Помимо указания размера Demand, PV_supply и WT_supply, которые работают 24x1, что еще требуется с точки зрения информации? а какие проблемы к тому что я показал выше?   -  person user643469    schedule 13.07.2012
comment
Я новичок, поэтому мне определенно нужны все советы / рекомендации, которые я могу получить. Благодарность!   -  person user643469    schedule 13.07.2012


Ответы (2)


функция 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(panels+1,number_turbines+1,hour)
person vextorspace    schedule 13.07.2012

Ваша проблема в том, что вы сохраняете результат deficit как функцию только от значения n, количества часов в день. Во внутреннем цикле вокруг n вы каждый раз заменяете значения во внешних циклах, поэтому в конце прогона у вас есть только значение для n = 1:24 при number_panels = 5 и number_turbines = 10.

Попробуй это:

deficit(number_panels+1, number_turbines+1, n) = ...

Таким образом, в конце вы можете проверить любую комбинацию по трем индексам. Я добавил значение 1 к number_panels и number_turbines, потому что MATLAB использует индексы, основанные на 1. Чтобы получить результаты для определенного количества панелей или турбин, не забудьте добавить 1 при проверке.

Конкретно для 3 панелей и 4 турбин в 5 час дня:

disp(deficit(3+1, 4+1, 5))

EDIT: добавлено 1 к значениям number_panels и number_turbines, чтобы избежать индексации 0.

person aardvarkk    schedule 13.07.2012