2012-02-02 204 views
0

他我正在使用來自三個廠家渦輪具體參數建模的風力渦輪機 我的代碼工作是如果內的循環語句 - Matlab的

Site_speed = xlsread('test.xlsx','Sheet1'); % Wind speed data recorded on site 
air_density = xlsread('test.xlsx','Sheet2'); % Air density data recorded on site 

Turbine_parameters = xlsread('windparameters.xlsx'); % Wind turbine unit database 

Ref_wind_speed = Turbine_parameters(:,1); % Wind speed from wind turbine unit database file Turbine_parameters 
Ref_output = Turbine_parameters(:,2:4); % Power output from wind turbine unit database file Turbine_parameters 

Density_correct = (air_density./air_density_ref); 

for K = 1 : size(Ref_output, 2) 

    power_out(:,:,K) = Density_correct.* interp1(Ref_wind_speed, Ref_output(:,K), Site_speed, 'nearest'); 

% xlswrite('this_file2.xlsx', power_out(:,:,1), 'sheet1'); 
% xlswrite('this_file2.xlsx', power_out(:,:,2), 'sheet2'); 
% xlswrite('this_file2.xlsx', power_out(:,:,3), 'sheet3'); 

%% WIND TURBINE FINANCIAL ANALYSIS + OPERATIONAL EMISSIONS 

Array_supply(:,:,K) = (1-Losses) .* power_out(:,:,K) .* Turbines; 
Total_array(:,:,K) = sum(Array_supply(:)); 
Array_OM_cost(:,:,K) = sum(sum(Total_array(:,:,K) * Wind_OM)); 

% % Grid connected system with internal load 
end 

for K = 1 : size(Array_supply,3) 
    Demand = xlsread('demandtest.xlsx'); 
    if Demand >= Array_supply(:,:,K) 
     Grid(:,:,K) = Demand - Array_supply(:,:,K) 
     Income(:,:,K)= (Array_supply(:,:,K)*FIT_wind) + Array_supply(:,:,K)*Grid_cost); 
     Expences(:,:,K) = (Array_OM_cost(:,:,K)) + sum(sum((Grid(:,:,K)*Grid_cost))); 
     Profit(:,:,K) = sum(sum(Income(:,:,K))) - sum(sum(Expences(:,:,K))); 
    else 
     Income(:,:,K) = (Demand*FIT_wind) + (Demand*Xe_wind)+(Demand*Grid_cost); 
     Expences(:,:,K) = Array_OM_cost(:,:,K); 
     Profit(:,:,K) = sum(sum(Income(:,:,K))) - sum(sum(Expences(:,:,K))); 
    end 
end 

我已經證明上述所有的代碼,但我認爲錯誤從行開始 - 對於K = 1:size(Array_supply,3) 程序運行時得到的結果是一組三個矩陣(如預期的那樣),其中前兩個矩陣僅填充零(不正確) 。 此外,網格,收入和費用應該是365x 24矩陣(如需求和Array_supply) 當我嘗試並運行網格(:,:,K)時,出現一個錯誤,說Matlab無法找到它!

有沒有人有任何想法,我可能會出錯? 謝謝

回答

1

首先,在Matlab中預先分配數組總是最好的做法。如果你知道網格,收入,費用和利潤都將是一個365x24x3的矩陣,那麼你應該把它放在循環之前,並且對其他變量也這樣做。

Grid=zeros(365,24,3); 

至於你的問題,看起來你可能沒有正確計算它。在Demand=xlsread(...)聲明後放置一個斷點。需求看起來是否正確?需求必須是一個單一的變量,如果它是一個矩陣,那麼這就是你的問題。如果它是一個矩陣,則需要遍歷每個變量。有更多優雅的解決方案涉及邏輯掩碼,如果您願意,隨時查找概念。我會建議,至少在目前,你只需循環整個需​​求循環。

此外,我不認爲你正確使用你的利潤報表。它僅在每個循環中存儲單個變量,但是您要爲整個矩陣存儲它......看起來Profit最好像3x1矩陣一樣,引用它像Profit(f)而不是Profit(:, :,F)。

哦,還有一個非常小的一點,它是費用,不是費用...