MATLAB Answers

use previous element in 5 dimensional matrix for equation in current cell

2 views (last 30 days)
Andrew Alkiviades
Andrew Alkiviades on 27 Jul 2012
Hi I have a 5 dimensional matrix as shown in the code below. What I am trying to do is find the "battery_capacity" shown in the "if function" what uses amongst other variables, the "battery_capacity" value of the previous cell in the loop (i.e h-1). I know the "battery_capacity" at the first cell which is "battery_capacity(:,:,:,1,1).
The relevant part of the code is below and I get the error "Subscript indices must either be real positive integers or logicals."
I believe its due to the (h-1) format which I can't really find a solution to. Also I need to be able to separate the days and thats why I have the hours and days as two separate dimensions.
% 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=1:24 %# hours
battery_capacity(:,:,1,1) = max_battery_capacity*number_batteries;
for d = 1:number_of_days %# which day
n = h + 24*(d-1);
% hourly_deficit_1(...,..., h, d)= Demand(n)-(PV_supply(n)... %
battery_capacity(idx_number_panels , number_turbines + 1,number_batteries, h,d) = battery_capacity(idx_number_panels , number_turbines + 1,number_batteries, h-1,d)+...
(hourly_total_RES(idx_number_panels, number_turbines + 1,number_batteries, h,d)-hourly_annual_demand(n))*charging_efficiency;code
end
Thank you

  0 Comments

Sign in to comment.

Answers (1)

Kevin Claytor
Kevin Claytor on 27 Jul 2012
"The relevant part of the code is below and I get the error "Subscript indices must either be real positive integers or logicals.""
Yes, you have h ranging from 1:24, and call h-1 (ranges from 0->23) Matlab matrix indices start at 1 (not 0 as in C), so trying to access an element indexed by 0 is not allowed. To avoid this, a quick solution is to start at 2 instead of 1; (Example loops through the values of a vector (1D matrix if you will) x, and adds the previous value to the current one.)
x = [45, 34, 14, 65, 12]
for ii = 2:5
fprintf('ii = %d \t x(ii) + x(ii - 1) = %d', ii, x(ii)-x(ii-1))
end

  2 Comments

Andrew Alkiviades
Andrew Alkiviades on 27 Jul 2012
Thanks Kevin. I have tried your suggestion (if Ive understood correctly this is to start the loop for "h" from 2:24? This gives me the error "Index exceeds matrix dimensions" now
Andrew Alkiviades
Andrew Alkiviades on 27 Jul 2012
also do you agree with the following code for the very first element "battery_capacity(:,:,:,1,1) = 5;" ?

Sign in to comment.

Sign in to answer this question.


Translated by