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

Torsten
Torsten 2023년 4월 5일
편집: Torsten 2023년 4월 5일
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
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에 대해 자세히 알아보기

태그

질문:

2023년 4월 5일

댓글:

2023년 4월 20일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by