??? Index Exceeds Matrix Dimensions (NEW TO MATLAB)

I am trying to make the script read through 12 sheets, then calculate the average of 5 numbers (for all 22 subjects, for all 12 sheets), and then write a 22x48 matrix that contains the averages on a new spreadsheet. When I run through the script, I get the index exceeds matrix dimensions message. I am assuming this means that what I specified is too large for the matrix to be written. How do I fix this issue?
% Read in a loop of all 12 sheets
n = 12;
j = 0;
B = [];
for k = 1:n;
A = xlsread('ABC.xls',k);
% Loop for all 22 subjects
c = 0;
for i = 1:22;
B(i,j+1) = (A(5+c,8) + A(6+c,8) + A(7+c,8) + A(10+c,8) + A(11+c,8))/5
B(i,j+2) = (A(25+c,8) + A(26+c,8) + A(27+c,8) + A(21+c,8) + A(22+c,8))/5
B(i,j+3) = (A(7+c,8) + A(8+c,8) + A(11+c,8) + A(12+c,8) + A(17+c,8))/5
B(i,j+4) = (A(4+c,8) + A(5+c,8) + A(9+c,8) + A(10+c,8) + A(15+c,8))/5
c = c + 32;
end
j = j + 4;
k = k + 1;
end
%Write the matrix into a separate excel spreadsheet
xlswrite('ABC Output.xls',B);

1 commentaire

Jan
Jan le 27 Mar 2012
Please read the "Markup help" link to learn how to format your code.

Connectez-vous pour commenter.

Réponses (2)

Geoff
Geoff le 27 Mar 2012
I would say it's due to the line:
c = c + 32;
The largest row index you have is A(27+c,8). The value of c gets up to '0 + 21*32' = 672 rows. Does A contain at least 672+27 rows? Does A contain at least 8 columns?
Also, don't increment 'k' at the end of the k-loop. It won't do anything, due to the way the for-loop works but it's not a good idea. If you want every second value of k, then loop:
for k = 1:2:n

1 commentaire

Christina
Christina le 27 Mar 2012
There are 705 rows (22 subjects x 32 channels + 1 row for headings) and 8 columns. I am trying to get the script to look for specific channels that repeat after set of 32.

Connectez-vous pour commenter.

Jan
Jan le 27 Mar 2012
It is useless and confusing to increase the loop counter inside the loop:
for k = 1:n;
...
k = k + 1; % <- omit this line
end
The best method to solve such problems is the debugger. Type this:
dbstop if error
in the command line (or use the debug menu in the editor accordingly). Then start your program. If an error occurs, Matlab stops and you can inspect the values of the variables in the command window.

Catégories

En savoir plus sur Scripts dans Centre d'aide et File Exchange

Tags

Question posée :

le 27 Mar 2012

Community Treasure Hunt

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

Start Hunting!

Translated by