2d truss analysis
조회 수: 4 (최근 30일)
이전 댓글 표시
doing trusses for statics class and i keep getting this error when running. triple checked my work i do not have any negative integers
Index in position 1 is invalid. Array
indices must be positive integers or
logical values.
Error in CEE210_CP3_verification (line
70)
PosVec(j,:)=NodeP(EN,:)-NodeP(SN,:);
nNodesP =6 ;
nMembersP =9 ;
NodeP = zeros(nNodesP, 3); %Initialize memory storage
MemberP = zeros(nMembersP, 2);
%.... Input node coordinates
%Member 9 Node 3 to Node 4
NodeP(1,:) = [0,0,0];
NodeP(2,:) = [4,3,0];
NodeP(3,:) = [8,3,0];
NodeP(4,:) = [12,0,0];
NodeP(5,:) = [4,0,0];
NodeP(6,:) = [8,0,0];
MemberS(1,:) = [1,2]; %Member 1 Node 1 to Node 2
MemberS(2,:) = [1,5]; %Member 2 Node 2 to Node 3
MemberS(3,:) = [2,5]; %Member 3 Node 2 to Node 4
MemberS(4,:) = [2,3]; %Member 4 Node 2 to Node 5
MemberS(5,:) = [2,6]; %Member 5 Node 1 to Node 3
MemberS(6,:) = [6,5]; %Member 6 Node 1 to Node 4
MemberS(7,:) = [3,6]; %Member 7 Node 3 to Node 6
MemberS(8,:) = [3,4]; %Member 8 Node 3 to Node 5
MemberS(9,:) = [4,6]; %Member 9 Node 3 to Node 4
PosVecP = zeros(nMembersP, 3); %Initialize memory storage
UnitVecP = zeros(nMembersP, 3);
OppPosVecP = zeros(nMembersP, 3);
OppUnitVecP = zeros(nMembersP,3);
Memberlength=zeros(nMembersP,1);
for (j = 1 : nMembersP)
SN = MemberP(j,1); %SN = start node
EN = MemberP(j,2);
PosVecP(j,:)=NodeP(EN,:)-NodeP(SN,:);
OppPosVecP(j,:) = -PosVecP(j,:);%EN = end node
Memberlength(j,:) = norm(PosVecP(j,:));
UnitVecP(j,:) = PosVecP(j,:)./Memberlength(j,1);
OppUnitVecP(j,:) = -UnitVecP(j,:);
%Finish this section to compute the position vector, length, unit vector,
%and negative unit vector for each member in the truss.
end
%% .Create output for command window
fprintf('%s\n' , '----------------------------------------')
fprintf('%s\n' , '-------------Planar Truss---------------')
fprintf('%s\n' , '----------------------------------------')
for (i = 1 : nNodesP)
fprintf('%s%8i%8.3f%8.3f%8.3f\n',' Node: ',i, NodeP(i,:)')
end
fprintf('\n')
for (i = 1 : nMembersP)
fprintf('%s%8i%8.3f%8.3f%8.3f\n',' Unit Vector: ',i, UnitVecP(i,:)')
end
fprintf('\n\n\n')
%% .Create the plot
fig1 = figure(1); clf; grid on; axis equal; hold on;
xlabel('X'); ylabel('Y'); title('Planar Truss');
for m = 1 : nMembersP
SN = MemberP(m,1);
EN = MemberP(m,2);
X = [NodeP(SN,1); NodeP(EN,1)];
Y = [NodeP(SN,2); NodeP(EN,2)];
Z = [NodeP(SN,3); NodeP(EN,3)];
p = plot(X,Y);
set(p, 'Color', 'k', 'LineWidth', 2);
end % for m, nMembersP
scatter(NodeP(:,1),NodeP(:,2),'fill','red');
댓글 수: 0
답변 (1개)
Star Strider
2019년 3월 23일
You don’t have negative integers, however positive integers are integers greater than 0.
Here:
SN = MemberP(j,1); %SN = start node
EN = MemberP(j,2);
PosVecP(j,:)=NodeP(EN,:)-NodeP(SN,:);
your ‘SN’ and ‘EN’ values are both 0. That is not a valid MATLAB index.
댓글 수: 2
Star Strider
2019년 3월 23일
I am not certain what you are doing.
One option could be:
PosVecP(j,:) = NodeP(j,:)-NodeP(j,:);
or perhaps:
PosVecP(j,:) = EN(j,:)-SN(j,:);
I leave it to you to create the matrix you want.
참고 항목
카테고리
Help Center 및 File Exchange에서 Structural Analysis에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!