error with matrix for truss code
이전 댓글 표시
HI Guys,
I am working on code to analize a truss and I am getting an error with one of my matrixis
I have shown the line "%index error in this line<---------"
any help would be very appreciated!
Thanks!!!
% Define the structure properties
num_nodes = 4; % number of nodes
num_members = 3; % number of members
E = 200e9; % Young's modulus of elasticity (Pa)
A = 0.01; % cross-sectional area of each member (m^2)
L = [2 2 2]; % length of each member (m)
node_coords = [0 0; 2 0; 2 2; 0 2]; % node coordinates (m)
% Define the connectivity matrix
connectivity_matrix = [1 2; 2 3; 3 4];
% Define the external forces acting on the structure
external_forces = zeros(num_nodes, 2); % initialize to zero
external_forces(4,:) = [-5000 0]; % force of 5000 N acting on node 4 in x-direction
% Define the boundary conditions
displacement = zeros(num_nodes, 2); % initialize to zero
displacement(1,:) = [0 0]; % node 1 is fixed
% Assemble the global stiffness matrix
K_global = zeros(num_nodes); % initialize to zero K_global = zeros(2*num_nodes);
for i = 1:num_members
member_nodes = connectivity_matrix(i,:);
member_coords = node_coords(member_nodes,:);
member_length = L(i);
member_stiffness = (E*A/member_length)*[1 0 -1 0;0 0 0 0; -1 0 1 0; 0 0 0 0]
member_dofs = [2*member_nodes(1)-1 2*member_nodes(1) 2*member_nodes(2)-1 2*member_nodes(2)]
K_global(member_dofs,member_dofs) = K_global(member_dofs,member_dofs) + member_stiffness;%index error in this line<---------
end
% Apply the boundary conditions
free_dofs = setdiff(1:2*num_nodes, [1 2]); % exclude the fixed degrees of freedom
K_reduced = K_global(free_dofs, free_dofs);
external_forces_reduced = external_forces(free_dofs,:);
displacement_reduced = displacement(free_dofs,:);
% Solve for the nodal displacements
nodal_displacements_reduced = K_reduced \ (external_forces_reduced' - K_global(free_dofs,1:2)*displacement_reduced');
% Reassemble the nodal displacements
nodal_displacements = displacement;
nodal_displacements(free_dofs,:) = nodal_displacements_reduced';
% Compute the member forces
member_forces = zeros(num_members,1);
for i = 1:num_members
member_nodes = connectivity_matrix(i,:);
member_coords = node_coords(member_nodes,:);
member_length = L(i);
member_stiffness = (E*A/member_length)*[1 -1; -1 1];
member_dofs = [2*member_nodes(1)-1 2*member_nodes(1) 2*member_nodes(2)-1 2*member_nodes(2)];
member_displacements = nodal_displacements(member_dofs,:);
member_forces(i) = member_stiffness*(member_displacements(2,:) - member_displacements(1,:))';
end
% Display the results
disp('Nodal displacements (m):');
disp(nodal_displacements);
disp('Member forces (N):');
disp(member_forces);
댓글 수: 2
I don't understand how you want to save the 4x4 matrices "member_stiffness" in the big num_nodes x num_nodes matrix K_global. Maybe something like
K_global(i:i+3,i:i+3) = member_stiffness
?
V Sairam Reddy
2023년 4월 20일
Hi Jamie,
The global stiffness matrix 'K_global' is of size 4 X 4 which is 'num_nodes X num_nodes' but however the variable 'member_dofs' is having thevalues [3, 4, 5, 6].
Hence when trying to index the 'K_global' variable with 'member_dofs' variable as rows, it is exceeding the size of 'K_global' which results in the error encountered.
Please provide more context to what you are trying to achieve so that we can help you better.
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Structural Analysis에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!