If Statement block throwing array index error
Mostra commenti meno recenti
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 Commento
Spencer Sabatino
il 5 Mag 2020
Risposte (2)
Image Analyst
il 5 Mag 2020
0 voti
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 Commento
Spencer Sabatino
il 5 Mag 2020
darova
il 5 Mag 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 Commento
Spencer Sabatino
il 5 Mag 2020
Categorie
Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!