Está en la página 1de 11

Tarea 4

Problema 1

function [F]=F_bar(xyi,xyj,EA,Ue,eps_i_e)
co=xyj(2)-xyi(2); %Cateto opuesto
ca=xyj(1)-xyi(1); %Cateto adyacente
hip=sqrt((co^2)+(ca^2)); %Hipotenusa
cos=ca/hip;
sin=co/hip;
L=hip;
T=[cos sin 0 0;0 0 cos sin];
Ul=T*Ue;
F=(EA/L)*(Ul(2,1)-Ul(1,1))-EA*eps_i_e; %kN
end

Published with MATLAB® R2021b

1
Problema 2
function[F]=F_truss(nodos,barras,U,eps_i)
n_nodos=size(nodos,1);%Cantidad de nodos
n_elem=size(barras,1);%Cantidad de barras
n_eps_i=size(eps_i);%Cantidad de condiciones de borde
F=zeros(n_elem,1);%Vector que guardará las fuerzas internas
for i = 1:n_elem %Recorremos la cantidad de barras
nodo_i=barras(i,1); %Numero de nodo inicial de la barra i
nodo_j=barras(i,2); %Numero de nodo final de la barra i
EA=barras(i,3)*barras(i,4); % Propiedades EA de la barra i
Ue=zeros(4,1); % Almacenamos los desplazamientos nodales de la barra i
for j = 1:n_nodos
if j == nodo_i
xyi=[nodos(j,1),nodos(j,2)]; %Coordenadas nodo inicial
end
if j == nodo_j
xyj=[nodos(j,1),nodos(j,2)]; %Coordenadas nodo final
end
end
for k = 1:n_nodos
if k == nodo_i
Ue(1,1)=U(2*k-1,1); %Ux_i
Ue(2,1)=U(2*k,1); %Uy_i
end
if k == nodo_j
Ue(3,1)=U(2*k-1,1); %Ux_j
Ue(4,1)=U(2*k,1); %Uy_j
end
end
for m = 1:n_eps_i
if eps_i(m,1) == i
eps_i_e = eps_i(m,2);
else
eps_i_e = 0;
end
end
F_elem=F_bar(xyi,xyj,EA,Ue,eps_i_e);
F(i,1)=F_elem;
end
end

Published with MATLAB® R2021b

1
Problema 3
function[U]=calcTruss(nodos,barras,CB,F_ext,asen,eps_i)
n_nodos=size(nodos,1);
n_elem=size(barras,1);
n_CB=size(CB,1); %Cantidad de apoyos
n_Fext=size(F_ext,1);
n_asen=size(asen,1);
n_epsi=size(eps_i,1);
U=ones(2*n_nodos,1);
%Primero buscamos los grados de libertad activos
for i = 1:n_CB %Dejamos los grados de libertad activos como 1
Nodo=CB(i,1);
if CB(i,2)==1
U(2*Nodo-1,1)=0;
end
if CB(i,3)==1
U(2*Nodo,1)=0;
end
end
Nglf=0;
glf=zeros(2*n_nodos,1);
for i = 1:2*n_nodos
if U(i,1) == 1
Nglf=Nglf+1;
glf(i,1)=i;
end
end
%Comenzamos a armar la matriz K_ff
K=K_truss(nodos,barras);
K_ff=zeros(Nglf); %Matriz reducida

%FUERZAS EXTERNAS (MECÁNICAS)


F=zeros(2*n_nodos,1);
F_f=zeros(Nglf,1); %Vector de fuerzas reducido
if n_Fext~=0
for i = 1:n_Fext
F(F_ext(i,1),1)=F_ext(i,2);
end
end

%ASENTAMIENTOS
F_asen=zeros(2*n_nodos,1); %Kp*#p
Fasen_f=zeros(Nglf,1);
if n_asen~=0
for i = 1:n_asen
for j = 1:2*n_nodos
F_asen(j,1)=F_asen(j,1)+K(j,asen(i,1))*asen(i,2);
end
end
end

1
%FUERZAS POR CONDICIONES INICIALES #T Y #L
Ftm=zeros(2*n_nodos,1);
Ftm_f=zeros(Nglf,1);
if n_epsi~=0
for i = 1:n_elem %Toma el numero de elemento
AE=barras(i,3)*barras(i,4);
nodo_i=barras(i,1); %Nodo de inicio
nodo_j=barras(i,2); %Nodo de final
for j = 1:n_nodos
if j == nodo_i
xyi=[nodos(j,1),nodos(j,2)]; %Coordenadas nodo inicial
end
if j == nodo_j
xyj=[nodos(j,1),nodos(j,2)]; %Coordenadas nodo final
end
end
co=xyj(2)-xyi(2); %Cateto opuesto
ca=xyj(1)-xyi(1); %Cateto adyacente
hip=sqrt((co^2)+(ca^2)); %hipotenusa
cos=ca/hip;
sin=co/hip;
for k = 1:n_epsi
if i == eps_i(k,1) %eps_i(j,1) = Nº de barra
Ftm(2*nodo_i-1,1)=AE*eps_i(k,2)*(-cos);
Ftm(2*nodo_i,1)=AE*eps_i(k,2)*(-sin);
Ftm(2*nodo_j-1,1)=AE*eps_i(k,2)*cos;
Ftm(2*nodo_j,1)=AE*eps_i(k,2)*sin;
end
end
end
end
%Principio de Charles busca obtener la matriz y fuerzas reducidas
c=1;
d=1;
for i = 1:2*n_nodos %Recorre glf=vetor con grado de libertad activo f4=4
if i == glf(i,1) %identificamos si el grado de libertad está activo
if c<=Nglf
for j = 1:2*n_nodos
if j == glf(j,1)
K_ff(c,d)=K(i,j);
d=d+1;
end
end
if d==Nglf+1
if n_Fext~=0
F_f(c,1)=F(i,1);
end
if n_asen~=0
Fasen_f(c,1)=F_asen(i,1);
end
if n_epsi~=0
Ftm_f(c,1)=Ftm(i,1);
end
c=c+1;

2
d=1;
end
end
end
end
% Calculamos los desplazamientos de los grados libres
u_f=K_ff\(F_f-Fasen_f+Ftm_f);
%Agregamos desplazamientos calculados a U
s=1;
for i = 1:2*n_nodos
if U(i,1) == 1 && s<=Nglf
U(i,1)=u_f(s,1);
s=s+1;
end
end
%Agregamos asentamientos al vector de desplazamientos nodales
for i = 1:n_asen
U(asen(i,1),1)=asen(i,2);
end
end

Published with MATLAB® R2021b

3
Problema 4
function[R]=calcReactions(nodos,barras,CB,U,eps_i)
cant_nod = size(nodos,1);
cant_CB = size(CB,1); %Cantidad de apoyos
cant_elem = size(barras,1);
cant_epsi = size(eps_i,1);
cant_react = 0;
%Primero calculamos cuantas reacciones tenemos
for i = 1:cant_CB
if CB(i,2) == 1 %Comprobamos si hay reacción en X
cant_react=cant_react+1; %agregamos una reacción horizontal
end
if CB(i,3) == 1 %Comprobamos si existe reacción en Y
cant_react=cant_react+1; %agregamos una reacción vertical
%elseif CB(i,4) == 1
% cant_react=cant_react+1; %agregamos una reacción de Momento
end
end
%Calcularemos las fuerzas internas de los elementos
K=K_truss(nodos,barras);
F=K*U; % Fuerzas mecánicas y fuerzas eps
%FUERZAS POR CONDICIONES INICIALES #T Y #L
Ftm=zeros(2*cant_nod,1);
if cant_epsi~=0
for i = 1:cant_elem %Toma el numero de elemento
EA=barras(i,3)*barras(i,4);
%EI=barras(i,4);
nodo_i=barras(i,1); %Nodo de inicio
nodo_j=barras(i,2); %Nodo de final
for j = 1:cant_nod
if j == nodo_i
xyi=nodos(j,:); %Coordenadas nodo inicial
end
if j == nodo_j
xyj=nodos(j,:); %Coordenadas nodo final
end
end
co=xyj(2)-xyi(2); %Cateto opuesto
ca=xyj(1)-xyi(1); %Cateto adyacente
hip=sqrt((co^2)+(ca^2)); %hipotenusa
cos=ca/hip;
sin=co/hip;
for k = 1:cant_epsi
if i == eps_i(k,1) %eps_i(k,1) = Nº de barra
Ftm(2*nodo_i-1,1)=EA*eps_i(k,2)*(-cos);
Ftm(2*nodo_i,1)=EA*eps_i(k,2)*(-sin);
Ftm(2*nodo_j-1,1)=EA*eps_i(k,2)*cos;
Ftm(2*nodo_j,1)=EA*eps_i(k,2)*sin;
end
end
end

1
end
Fm=F-Ftm;%Fuerzas en cada grado de libertad
R=zeros(cant_react,2);
c=1;
for i = 1:cant_CB
n=CB(i,1);
rx=CB(i,2);
ry=CB(i,3);
%rz=CB(i,4);
if c<=cant_react
if rx == 1 && ry == 1
R(c,1)=round(2*n-1);
R(c,2)=Fm(2*n-1,1);
c=c+1;
R(c,1)=2*n;
R(c,2)=Fm(2*n,1);
c=c+1;
end
if rx == 1 && ry == 0
R(c,1)=round(2*n-1);
R(c,2)=Fm(2*n-1,1);
c=c+1;
end
if rx == 0 && ry == 1
R(c,1)=round(2*n);
R(c,2)=Fm(2*n,1);
c=c+1;
%elseif rx == 1 && ry == 1 && rz ==1
end
end
end
end

Published with MATLAB® R2021b

2
Problema 5
function[]=plotDeformedStructure(nodos,barras,U)
n_nodos=size(nodos,1);
nodos_def=zeros(n_nodos,2);
c=1;
%Sumamos a cada coordenada, el desplazamiento de su grado de libertad
for i = 1:n_nodos
for j=1:2
nodos_def(i,j)=nodos(i,j)+U(c,1)*10;
if c<2*n_nodos
c=c+1;
end
end
end
hold on
PlotStructure(nodos,barras,'b') %Aprovechamos la función de la tarea 2
PlotStructure(nodos_def,barras,'--r')
hold off
end

Published with MATLAB® R2021b

1
Problema 6 Tarea 4
clc
clear

format shortG

%Propiedades geométricas y de materiales del Enrejado

E = 200; %GPa

A1 = 30*10^3; %mm2
A2 = 25*10^3; %mm2
A3 = 10*10^3; %mm2

nodos = [0 0;%a 1 2
3 4;%b 3 4
6 8;%c 5 6
6 0;%d 7 8
0 8]*1000;%e 9 10

barras = [1 2 A1 E; %Elemento 1
1 4 A2 E; %Elemento 2
2 4 A1 E; %Elemento 3
2 3 A1 E; %Elemento 4
4 3 A2 E; %Elemento 5
3 5 A3 E]; %Elemento 6

%Condición de Apoyo

CB = [1 1 1; %apoyo rotulado en a
4 0 1; %apoyo desplizante en d
5 1 1;];%apoyo rotulado en e

%Solicitaciones

d_L = 20;% mm
L = 8000; %mm

F_ext = [3 200];% kN
asen = [1 0.5];% mm
eps_i = [5 d_L/L];

%Desplazamientos nodales

U = calcTruss(nodos,barras,CB,F_ext,asen,eps_i);
disp('Los desplazamientos nodales obtenidos son:')
disp(U)

%Fuerzas internas de c/elemento

1
F = F_truss(nodos,barras,U,eps_i);
disp('Las fuerzas internas obtenidas son:')
disp(F)
%Calculo de Reacciones

R = calcReactions(nodos,barras,CB,U,eps_i);
disp('Las reacciones obtenidas son:')
disp(R)
%Ploteo Estructura

plotDeformedStructure(nodos,barras,U)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%% UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%% ANALISIS ESTRUCTURAL CIV234 %%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%% POR DIEGO AVENDAÑO, CARLOS CAMPOS e ISIDORA LOBOS %%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%% diego.avendano@sansano.usm.cl %%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Los desplazamientos nodales obtenidos son:


0.5
0
3.6574
2.1044
-7.4284
14.718
0.62
0
0
0

Las fuerzas internas obtenidas son:


4293.6
100
-166.67
4126.9
-3301.5
-2476.1

Las reacciones obtenidas son:


1 -2676.1
2 -3434.8
8 3434.8
9 2476.1
10 0

2
Published with MATLAB® R2021b

También podría gustarte