MATLAB not able to make calculation - array limit

2 views (last 30 days)
I want to find the new max electricity consumption of an appartment when an EV is introduced.
Appartment is the load profile for 16 appartments (one value each minute for one year)
A is the load profile from charging for 2 vehicles.
I use this
nHousehold =size(Appartment, 2);
Appartment=525600*16 double
A=525600*2 double
for x = 1:nHousehold
App = Appartment(:, x);
for y = 1:nA
Vehicle = A(:, y);
I(x,y) = max(Vehicle.'+App)./max(App);
end
end
I get this error:
Requested 525600x525600 (2058.3GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a long time and cause MATLAB to become
unresponsive. See array size limit or preference panel for more information.
Error in RELATION (line 41)
I(x,y) = max(Vehicle.'+App)./max(App);
The output I should be a 16*2 matrix, so I wonder if I somehow can circumvent this error?
  7 Comments
Joel Schelander
Joel Schelander on 22 Mar 2021
@Jan the vectors are added, so each minute will have a new electricity consumption, where charging is included
The maximum of the two added to each other. like:
P=max(App+Vehicle)
I=P/max(App)
The output I should in this case be a 16*2 matrix, expressing the increase in the max value for all combinations

Sign in to comment.

Accepted Answer

Steven Lord
Steven Lord on 22 Mar 2021
The maximum of the sum of an element from A and an element from B (which is what I think you want, not what you're doing) is the sum of the maximum element in A and the maximum element in B.
A = randi(1000, 1, 10)
A = 1×10
940 288 123 144 841 568 480 564 263 905
B = randi(1000, 1, 10)
B = 1×10
827 892 706 954 88 247 82 9 567 334
D = A.'+B; % Makes a relatively big temporary
C1 = max(D, [], 'all')
C1 = 1894
C2 = max(A)+max(B)
C2 = 1894
whos A B C1 C2 D
Name Size Bytes Class Attributes A 1x10 80 double B 1x10 80 double C1 1x1 8 double C2 1x1 8 double D 10x10 800 double
So I think you could simplify this code a bit so it doesn't make such a huge temporary array.
%{
nHousehold =size(Appartment, 2);
Appartment=525600*16 double
A=525600*2 double
for x = 1:nHousehold
App = Appartment(:, x);
maxApp = max(App);
for y = 1:nA
Vehicle = A(:, y);
I(x,y) = max(Vehicle)+maxApp./maxApp;
end
end
%}
You could likely avoid the inner loop by calling max with a dim input.
  3 Comments
Joel Schelander
Joel Schelander on 22 Mar 2021
I dont want a matrix, but I tried
I=max(App+Vehicle)./max(App) and got the result I wanted

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!