2012-07-26 199 views
0

我已經對代碼進行了以下更改,但仍然在調用「if語句」的行上出現「索引超出矩陣維度」錯誤,並且我將循環從2開始的「h」 :25。我仍然有淨想通了,我怎麼能在目前的維公式表達五維矩陣操作

number_of_days = 3; 
number_of_hours = 24*number_of_days; 
number_panels = 1:5; 


for idx_number_panels = 1:length(number_panels) % range of PV panel units examined 

for number_turbines = 0:1 % range of wind turbine units examined 

    for number_batteries = 1:2 % range of battery units examined 


     for h=2:25 %# hours 
       battery_capacity(:,:,:,1,1) = max_battery_capacity*number_batteries; 

      for d = 1:number_of_days %# which day 

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



       if (max_battery_capacity*number_batteries) - (battery_capacity(idx_number_panels, number_turbines+1 ,number_batteries, h-1,d)*number_batteries) >0 

        storage_availability(idx_number_panels, number_turbines+1 ,number_batteries, h,d) = (max_battery_capacity*number_batteries) - (battery_capacity(idx_number_panels, number_turbines+1 ,number_batteries, h-1,d)) ; 

       else 


        storage_availability(idx_number_panels, number_turbines+1 ,number_batteries, h,d) = 0; 


       end 
+0

我似乎仍然當我使用「H」,而不是在那裏我得到了同樣的錯誤「H-1」 – user643469 2012-07-27 18:08:27

回答

0

使用元素從以前的尺寸從我的理解,最後兩個維度分別存儲小時和一天。因此,要設置在小時= 1第一天的值(我想這意味着當天午夜開始):

battery_capacity(:,:,:,1,1) = 2; %# 2kWh 

這將設置值2所有「板」和所有的「渦輪」和所有「電池」。

我假設你已經在你的代碼中預先分配了矩陣。


爲了什麼它的價值,我覺得你有一個錯字,你先在代碼中提到battery_capacity(存在丟失h參數)

+0

是的,我想你明白我的問題謝謝。我仍然得到錯誤「下標索引必須是真正的正整數或邏輯」。在「battery_capacity(idx_number_panels,number_turbines + 1,number_batteries,h,d)=」行上。在if語句中。 – user643469 2012-07-26 17:32:56

+0

我認爲我得到的錯誤是由於我使用的h-1格式。但是,由於您在回答中提到的第1天第1小時的battery_capacity設置爲等於2,我不明白爲什麼會出現這種情況。我試圖實現的是在等於2時啓動battery_capacity,然後根據「if語句」使用等式繼續其餘時間的等式 – user643469 2012-07-26 17:37:59

+0

@ user643469:請參閱Andrew的答案,他提出了一些優點 – Amro 2012-07-26 17:50:49

2

讓我們來看看這只是個小時。

for h = 1:24 
    battery_capacity(1) = initial_battery_capacity*number_batteries 

    if hourly_total_RES(h) > hourly_annual_demand(n), % battery charging 
     battery_capacity(h) = battery_capacity(h-1); 
    else 
     battery_capacity(h) = battery_capacity(h-1); 
    end 
end 

首先,if語句的雙方書面相同。我假設你的實際代碼對以前的數據做了某種工作。如果不是,那是一個問題。

如果您切換日期和小時循環的順序,它也可能使代碼更容易思考。對我來說,一次查看一天中的所有時間比每天看第一個小時,然後每天的第二個小時更有意義...

至於索引,一個確定的錯誤是您在循環的第一次迭代中索引battery_capacity(h-1)。也就是說,當h爲1時,您可以定義battery_capacity(1),然後嘗試查看battery_capacity(0),這可能是拋出錯誤的原因。

爲了解決這個問題,你可以檢查,看看是否h == 1,但我認爲一個更優雅的方式將遍歷h = 2:24並進入了循環之前設置battery_capacity(1)。看看此代碼的工作:

for d = 1:number_of_days 
    battery_capacity(1) = initial_battery_capacity*number_batteries 
    for h = 2:24 
     if hourly_total_RES(h) > hourly_annual_demand(n), % battery charging 
      battery_capacity(h) = battery_capacity(h-1); 
     else 
      battery_capacity(h) = battery_capacity(h-1); 
     end 
    end 
end 
+0

所有好評+1 – Amro 2012-07-26 17:50:02

+0

謝謝安德魯我已經嘗試過你的建議,但我仍然在if語句中得到同樣的錯誤「索引超出矩陣尺寸。 」 – user643469 2012-07-26 18:09:10

+0

Andrew,我想我需要保持日期維度,因爲我需要能夠每天訪問其他參數。如果我刪除一天的維度,我將能夠訪問365天的24小時插槽。即1:24,25:48等等? – user643469 2012-07-26 22:51:37