If Statement block throwing array index error
Afficher commentaires plus anciens
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 commentaire
Spencer Sabatino
le 5 Mai 2020
Réponses (2)
Image Analyst
le 5 Mai 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 commentaire
Spencer Sabatino
le 5 Mai 2020
darova
le 5 Mai 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 commentaire
Spencer Sabatino
le 5 Mai 2020
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!