If Statement block throwing array index error

4 views (last 30 days)
So I've been trying to troubleshoot a function I wrote to intake some .csv files and some constant values to calculate some tensile properties of paper. However, when the I run this block, it throws an error at the first if-statement saying:
Array indices must be positive integers or logical values.
Error in TensileAnalysis (line 75)
if length(F1a) <= length(F2a) && length(F1a) <= length(F3a) && length(F1a) <= length(F4a) && length(F1a) <=
length(F5a) && length(F1a) <= length(F6a) && length(F1a) <= length(F7a) && length(F1a) <= length(F8a) &&
length(F1a) <= length(F9a) && length(F1a) <= length(F10a)
The relevant snippet is attached below. I'm not sure where my error is, since I wrote this code in a separate function and it worked properly. Any help would be appreciated.
function res = TensileAnalysis(csv1,csv2,csv3,csv4,csv5,csv6,csv7,csv8,csv9,csv10,length,width,grammage)
%Unpacks .csv files into matrices of data.
M = readmatrix(csv1);
M2 = readmatrix(csv2);
M3 = readmatrix(csv3);
M4 = readmatrix(csv4);
M5 = readmatrix(csv5);
M6 = readmatrix(csv6);
M7 = readmatrix(csv7);
M8 = readmatrix(csv8);
M9 = readmatrix(csv9);
M10 = readmatrix(csv10);
%Unpacks force vectors.
F1 = M(:,3);
F2 = M2(:,3);
F3 = M3(:,3);
F4 = M4(:,3);
F5 = M5(:,3);
F6 = M6(:,3);
F7 = M7(:,3);
F8 = M8(:,3);
F9 = M9(:,3);
F10 = M10(:,3);
%Unpacks displacement vectors.
X1 = M(:,2);
X2 = M2(:,2);
X3 = M3(:,2);
X4 = M4(:,2);
X5 = M5(:,2);
X6 = M6(:,2);
X7 = M7(:,2);
X8 = M8(:,2);
X9 = M9(:,2);
X10 = M10(:,2);
%I cleaved the last index of each vector off, as this part does not
%contribute to the calculations or data analysis.
F1a = F1(1:end-1);
F2a = F2(1:end-1);
F3a = F3(1:end-1);
F4a = F4(1:end-1);
F5a = F5(1:end-1);
F6a = F6(1:end-1);
F7a = F7(1:end-1);
F8a = F8(1:end-1);
F9a = F9(1:end-1);
F10a = F10(1:end-1);
X1a = X1(1:end-1);
X2a = X2(1:end-1);
X3a = X3(1:end-1);
X4a = X4(1:end-1);
X5a = X5(1:end-1);
X6a = X6(1:end-1);
X7a = X7(1:end-1);
X8a = X8(1:end-1);
X9a = X9(1:end-1);
X10a = X10(1:end-1);
if length(F1a) <= length(F2a) && length(F1a) <= length(F3a) && length(F1a) <= length(F4a) && length(F1a) <= length(F5a) && length(F1a) <= length(F6a) && length(F1a) <= length(F7a) && length(F1a) <= length(F8a) && length(F1a) <= length(F9a) && length(F1a) <= length(F10a)
[X,Y,YG] = averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F1a));
elseif length(F2a) <= length(F1a) && length(F2a) <= length(F3a) && length(F2a) <= length(F4a) && length(F2a) <= length(F5a) && length(F2a) <= length(F6a) && length(F2a) <= length(F7a) && length(F2a) <= length(F8a) && length(F2a) <= length(F9a) && length(F2a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F2a));
elseif length(F3a) <= length(F1a) && length(F3a) <= length(F2a) && length(F3a) <= length(F4a) && length(F3a) <= length(F5a) && length(F3a) <= length(F6a) && length(F3a) <= length(F7a) && length(F3a) <= length(F8a) && length(F3a) <= length(F9a) && length(F3a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F3a));
elseif length(F4a) <= length(F1a) && length(F4a) <= length(F2a) && length(F4a) <= length(F3a) && length(F4a) <= length(F5a) && length(F4a) <= length(F6a) && length(F4a) <= length(F7a) && length(F4a) <= length(F8a) && length(F4a) <= length(F9a) && length(F4a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F4a));
elseif length(F5a) <= length(F1a) && length(F5a) <= length(F2a) && length(F5a) <= length(F3a) && length(F5a) <= length(F4a) && length(F5a) <= length(F6a) && length(F5a) <= length(F7a) && length(F5a) <= length(F8a) && length(F5a) <= length(F9a) && length(F5a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F5a));
elseif length(F6a) <= length(F1a) && length(F6a) <= length(F2a) && length(F6a) <= length(F3a) && length(F6a) <= length(F4a) && length(F6a) <= length(F5a) && length(F6a) <= length(F7a) && length(F6a) <= length(F8a) && length(F6a) <= length(F9a) && length(F6a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F6a));
elseif length(F7a) <= length(F1a) && length(F7a) <= length(F2a) && length(F7a) <= length(F3a) && length(F7a) <= length(F4a) && length(F7a) <= length(F5a) && length(F7a) <= length(F6a) && length(F7a) <= length(F8a) && length(F7a) <= length(F9a) && length(F7a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F7a));
elseif length(F8a) <= length(F1a) && length(F8a) <= length(F2a) && length(F8a) <= length(F3a) && length(F8a) <= length(F4a) && length(F8a) <= length(F5a) && length(F8a) <= length(F6a) && length(F8a) <= length(F7a) && length(F8a) <= length(F9a) && length(F8a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F8a));
elseif length(F9a) <= length(F1a) && length(F9a) <= length(F2a) && length(F9a) <= length(F3a) && length(F9a) <= length(F4a) && length(F9a) <= length(F5a) && length(F9a) <= length(F6a) && length(F9a) <= length(F7a) && length(F9a) <= length(F8a) && length(F9a) <= length(F10a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F9a));
elseif length(F10a) <= length(F1a) && length(F10a) <= length(F2a) && length(F10a) <= length(F4a) && length(F10a) <= length(F5a) && length(F10a) <= length(F6a) && length(F10a) <= length(F7a) && length(F10a) <= length(F8a) && length(F10a) <= length(F9a) && length(F10a) <= length(F3a)
[X,Y,YG] =averagedata(F1a,F2a,F3a,F4a,F5a,F6a,F7a,F8a,F9a,F10a,X1a,X2a,X3a,X4a,X5a,X6a,X7a,X8a,X9a,X10a,length(F10a));
end
res = TAMetric(X,Y,YG,length,width,grammage);
end
  1 Comment
Spencer Sabatino
Spencer Sabatino on 5 May 2020
Oops, I have caught my mistake. It was due to my conflicting use of the variable name length for the length of my sample and the function.
My apologies for the silly mistake.

Sign in to comment.

Answers (2)

Image Analyst
Image Analyst on 5 May 2020
  1 Comment
Spencer Sabatino
Spencer Sabatino on 5 May 2020
I have read the documentation and understand why the error is thrown, but I don't understand what the issue with my code is. Could you possibly help me with that? Thank you in advance.

Sign in to comment.


darova
darova on 5 May 2020
Your is madness. Use cell to make it simpler and shorter
fnames = {csv1 csv2 ...}
for i = 1:length(fnames)
M{i} = readmatrix(fnames{i});
F{i} = M{i}(:,3);
X{i} = M{i}(:,2);
Fa{i} = F{i}(1:end-1);
Xa{i} = X{i}(1:end-1);
end
n = cellfun(@numel,Fa);
[~,ix] = min(n);
[X,Y,YG] = averagedata(Fa,Xa,n(ix));
  1 Comment
Spencer Sabatino
Spencer Sabatino on 5 May 2020
I appreciate the suggestion for making the code better. It doesn't answer my question, but since I already resolved it, it's no worries. Thank you!

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!