Если заявление в течение цикла - Matlab - PullRequest
0 голосов
/ 02 февраля 2012

Его я работаю над моделированием ветровой турбины с использованием специфических параметров турбины от трех производителей. Мой код

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: размер (Array_supply, 3) Результаты, которые я получаю при запуске программы, представляют собой набор из трех матриц (как и ожидалось), где первые две заполняются только нулями (неверно). Также матрицы, доходы и расходы должны быть 365x24 матрицы (как и спрос и Array_supply) Когда я пытаюсь запустить Grid (:,:, K), появляется сообщение о том, что Matlab не может его найти !!

Кто-нибудь знает, где я мог пойти не так? Спасибо

1 Ответ

1 голос
/ 02 февраля 2012

Прежде всего, в Matlab всегда рекомендуется предварительно распределять массивы.Если вы знаете, что Grid, Income, Expenses и Profit будут представлять собой матрицу 365x24x3, то вам следует поместить это перед циклом, и сделать то же самое для других переменных.

Grid=zeros(365,24,3);

Что касается вашегопроблема, кажется, что вы не правильно рассчитываете это.Поставьте точку останова после оператора Demand=xlsread(...).Правильно ли выглядит спрос?Спрос должен быть одной переменной, если это матрица, то это ваша проблема.Если это матрица, вам нужно перебрать каждую переменную.Существуют более элегантные решения с использованием логических масок, если хотите, смело ищите концепцию.Я собираюсь предположить, что, по крайней мере, на данный момент вы просто просматриваете весь цикл спроса.

Кроме того, я не думаю, что вы правильно используете свои отчеты о прибыли.Он хранит только одну переменную в цикле, но вы сохраняете ее для всей матрицы ... Кажется, что Profit будет так же хорошо обслуживаться как матрица 3x1, ссылаясь на нее как Profit (f) вместо Profit (:,:, f).

О, и очень незначительный момент, это расходы, а не расходы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...