If Statement block throwing array index error
Show older comments
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
on 5 May 2020
Answers (2)
Image Analyst
on 5 May 2020
0 votes
This error is thoroughly discussed in the FAQ: https://matlab.fandom.com/wiki/FAQ#.22Subscript_indices_must_either_be_real_positive_integers_or_logicals..22
1 Comment
Spencer Sabatino
on 5 May 2020
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
on 5 May 2020
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!