2d truss analysis
    5 views (last 30 days)
  
       Show older comments
    
 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 Comments
Answers (1)
  Star Strider
      
      
 on 23 Mar 2019
        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 Comments
  Star Strider
      
      
 on 23 Mar 2019
				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.  
See Also
Categories
				Find more on Structural Analysis 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!
