簡體   English   中英

for循環中的If語句-Matlab

[英]If Statement within for loop - 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也是如此)當我嘗試僅運行Grid(:,:,K)時,會出現一條錯誤消息,指出Matlab無法找到它!

有誰知道我可能在哪里出錯了? 謝謝

首先,在Matlab中始終最好的做法是預先分配數組。 如果您知道網格,收入,費用和利潤都將是一個365x24x3的矩陣,則應將其放在循環之前,並對其他變量也是如此。

Grid=zeros(365,24,3);

至於您的問題,似乎您計算得不正確。 Demand=xlsread(...)語句后放置一個斷點。 需求看起來合適嗎? 需求必須是單個變量,如果是矩陣,那么這就是您的問題。 如果是矩陣,則需要遍歷每個變量。 有涉及邏輯掩碼的更優雅的解決方案,如果需要,可以隨時查找該概念。 我建議,至少暫時來說,您只需要遍歷整個需求循環即可。

另外,我認為您沒有正確使用利潤表。 它僅在每個循環中存儲一個變量,但您將其存儲在整個矩陣中……似乎Profit就像3x1矩陣一樣好用,像Profit(f)而不是Profit(:, :,F)。

哦,還有一點很重要,那就是費用,而不是費用...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM