How to fix invalid array indexing ?
Show older comments
Hi guys im trying to colect all outputs tables that are created in-array. Here is my code :
clear;
clc;
H = 5;
L = 15;
Ns = 2;
Nb = 1;
PortalHeight = H;
Bayspan = L;
NumberStory = Ns;
NumberBay = Nb;
% Variable1
h = [0.8,1.00,1.20,1.40,1.6,1.80];
% Variable2
Lss = [2.00,2.40,2.80,3.20,3.60,4.00];
% Variable3
Nss = [2,3,4];
% Definition
Var1HeightofTrussBeam = h;
Var2LengthSpecialSegment = Lss;
Var3NumberSpecialSegment = Nss;
Totalvariant = zeros(numel(Var1HeightofTrussBeam)*numel(Var2LengthSpecialSegment)*numel(Var3NumberSpecialSegment),1);
Xbase = zeros(1,length(Totalvariant));
Zbase = zeros(1,length(Totalvariant));
Xcol = zeros(1,length(Totalvariant));
Zcol = zeros(1,length(Totalvariant));
Xos = zeros(1,length(Totalvariant));
Zos = zeros(1,length(Totalvariant));
Xss = zeros(1,length(Totalvariant));
Zss = zeros(1,length(Totalvariant));
X = zeros(1,length(Totalvariant));
Z = zeros(1,length(Totalvariant));
jointbase = zeros(1,length(Totalvariant));
jointcolumn = zeros(1,length(Totalvariant));
jointordinarysegment = zeros(1,length(Totalvariant));
jointtopordinarysegment = zeros(1,length(Totalvariant));
jointbottomordinarysegment = zeros(1,length(Totalvariant));
jointspecialsegment = zeros(1,length(Totalvariant));
jointtopspecialsegment = zeros(1,length(Totalvariant));
jointbottomspecialsegment = zeros(1,length(Totalvariant));
ijk = 0
for i = 1:numel(h)
for j = 1:numel(Lss)
for k = 1:numel(Nss)
ijk = ijk+1
%% Base(base)
Xbase(ijk) = L*(0:NumberBay);
Zbase(ijk) = repelem(0,1,length(Xbase));
%% Column(col)
Xcolumn = L*(0:NumberBay);
Zcolumn = repelem(H*(1:NumberStory),1,length(Xcolumn));
Xbotbeam = L*(0:NumberBay);
Zbotbeam = repelem((H*(1:NumberStory)-h(i)),1,length(Xbotbeam));
% replicate [X] to be the same size as [Z] for plotting:
Xcol(ijk) = repmat([Xcolumn,Xbotbeam],1,NumberStory);
Zcol(ijk) = [Zcolumn,Zbotbeam];
%% Ordinary Segment
% calculate span length of ordinary segment
Los = (L-Lss(j))/2;
Nos = Los/h(i);
Nos = round(Nos);
los = Los/Nos;
assert(logical(los*Nos*2+Lss(i)==15),"span must be 15m");
% top and bottom joint of ordinary segment(os)
XTopOrdinarySegment = reshape([los*(1:Nos),(L/2+Lss(j)/2)+los*(0:Nos-1)].'+L*(0:(NumberBay-1)),1,[]);
XBottomOrdinarySegment = XTopOrdinarySegment;
ZTopOrdinarySegment = repelem(H*(1:NumberStory),1,2*Nos*NumberBay);
ZBottomOrdinarySegment = repelem(H*(1:NumberStory)-h(i),1,2*Nos*NumberBay);
% replicate [X] to be the same size as [Z] for plotting:
Xos(ijk) = repmat([XTopOrdinarySegment,XBottomOrdinarySegment],1,NumberStory);
Zos(ijk) = [ZTopOrdinarySegment,ZBottomOrdinarySegment];
%% Special Segment
% calculate span length of special segment
lss = Lss(j)/Nss(k);
% top and bottom joint of special segment(ss)
XTopSpecialSegment = reshape((lss*(0:Nss(k))+L/2-Lss(j)/2).'+L*(0:(NumberBay-1)),1,[]);
XBottomSpecialSegment = XTopSpecialSegment;
ZTopSpecialSegment = repelem(H*(1:NumberStory),1,length(XTopSpecialSegment));
ZBottomSpecialSegment = repelem(H*(1:NumberStory)-h(i),1,length(XBottomSpecialSegment));
% replicate [X] to be the same size as [Z] for plotting:
Xss(ijk) = repmat([XTopSpecialSegment,XBottomSpecialSegment],1,NumberStory);
Zss(ijk) = [ZTopSpecialSegment,ZBottomSpecialSegment];
%% Plot Joint
X(ijk) = [Xbase,Xcol,Xos,Xss];
Z(ijk) = [Zbase,Zcol,Zos,Zss];
scatter(X,Z,'filled'),grid on
%% Name Joint
jointbase(ijk) = table((1:numel(Xbase))',Xbase(ijk)',Zbase(ijk)','VariableNames',{'ID','X','Z'});
jointcolumn(ijk) = table((max(jointbase(ijk).ID)+1:numel(Xcol(ijk))+max(jointbase(ijk).ID))',Xcol(ijk)',Zcol(ijk)','VariableNames',{'ID','X','Z'});
jointordinarysegment(ijk) = table((max(jointcolumn(ijk).ID)+1:numel(Xos(ijk))+max(jointcolumn(ijk).ID))',Xos(ijk)',Zos(ijk)','VariableNames',{'ID','X','Z'});
jointtopordinarysegment(ijk) = jointordinarysegment(ijk)(ismember(jointordinarysegment(ijk).Z,Zcolumn),:);
jointbottomordinarysegment(ijk) = jointordinarysegment(ijk)(ismember(jointordinarysegment(ijk).Z,Zbotbeam),:);
jointspecialsegment(ijk) = table((max(jointbottomordinarysegment(ijk).ID)+1:numel(Xss(ijk))+max(jointbottomordinarysegment(ijk).ID))',Xss(ijk)',Zss(ijk)','VariableNames',{'ID','X','Z'});
jointtopspecialsegment(ijk) = jointspecialsegment(ijk)(ismember(jointspecialsegment(ijk).Z,Zcolumn),:);
jointbottomspecialsegment(ijk) = jointspecialsegment(ijk)(ismember(jointspecialsegment(ijk).Z,Zbotbeam),:);
end
end
end
%check angle
%anglespecialsegment = (Lss(1)/Nss(1))/h(1);
Error : Error: File: cobadoang4.m Line: 107
Column: 32
Invalid array indexing.
Here I give the example of table result one variant when h(1), Lss(1),Nss(1) :

1 Comment
Accepted Answer
More Answers (0)
Categories
Find more on Solver Outputs and Iterative Display in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


