CODIGO DE MATLAB PARA RESOLVER ARMADURA EN 2D close all clear all %Escritura de datos por parte del usuario. n=input('Escribe el numero de nodos: '); b=input('Introduzca el numero de barras: '); r=input('Introduzca el numero de reacciones: '); if b+r == 2*n nnc=input('Escriba el numero de nodos con carga externa: ');
%Obtención de coordendadas de nodos, uso de un ciclo for en base al %número %de nodos. Se acomodan: número de nodos, coordenadas en x & en y en %vectores fila separados. for i=1:n [nn(i)]= input('Introduzca el numero de nodo: '); [xn(i)]= input('Coordenada en x de ese nodo: '); [yn(i)]= input('Coordenada en y de ese nodo: '); end
%Matriz de coordenadas de nodos, acomoda las %coordenadas en vectores columna asociados al número de nodo %correspondiente. coor=[nn' xn' yn'];
%Matriz de coordenadas de nodos, separadas X & Y en difere ntes %matrices o vectores columna. [coor(:,1),i_nn]=sort(coor(:,1));
for ic=1:n coor(ic,2)=xn(1,i_nn(ic)); coor(ic,3)=yn(1,i_nn(ic)); end x=coor(:,2); y=coor(:,3);
%Introducción de datos de las barras. Número de barra, nodo inicial & %final acomodados por separado en vectores fila. for ibar=1:b [kb(ibar)]=input('Introduzca el número de la barra: '); [ib(ibar)]=input('Nodo inicial : '); [jb(ibar)]=input('Nodo final : '); end
%Introducción de numero de nodo con reacciones y clasificación de estas. for ireac=1:r [kn(ireac)]=input('Número de nodo con reaccion : '); [kg(ireac)]=input('Direccion de la reaccion( 1 = X ; 2 = Y ) : '); end
%Introducción de las cargas externas, primero el nodo y las componentes %de la carga externa en X & Y, estos datos tambien son guardados en %vectores fila. for iload=1:nnc [p(iload,1)]=1; [p(iload,2)]=input('Numero de nodo con carga ');
[p(iload,3)]=input('Conponente de la carga en X: '); [p(iload,4)]=input('Conponente de la carga en Y: '); end
%Inicialización de la matríz final, cuadrada, en base al número de barras y %de reacciones (Ya que son las incógnitas a determinar). c=zeros(b+r,b+r); info=zeros(r,2);
% Matriz de coeficientes C: cosenos directores de las barras. for icosdirec=1:b k=kb(icosdirec); i=ib(icosdirec); j=jb(icosdirec); L=(sqrt((x(j)-x(i))^2 + (y(j)-y(i))^2)); c(2*i-1,k)=(x(j)-x(i))/L; c(2*i,k)=(y(j)-y(i))/L; c(2*j-1,k)=-c(2*i-1,k); c(2*j,k)=-c(2*i,k); end
%Matriz de las reaccioness. for ir=1:r c(2*kn(ir)-2+kg(ir),ir+b)=1; if kg(ir)==1 info(ir,1)=kn(ir);
else info(ir,2)=kn(ir); end end
%Creación de la matriz final, y reso lución. q=zeros(2*n,1); f=zeros(2*n,1); cinv=inv(c); for ic=1:size(p,1) q(2*p(ic,2)-1)=-p(ic,3); q(2*p(ic,2))= -p(ic,4); end
%Con la siguente fórmula se resuelve e l sistema de ecuaciones de equilibro %obtenido de los nodos. f=cinv*q;
%Final, entrega de resultados al usuario. disp('=========================') disp('Resultados ') disp('=========================') disp(' Barra - Fuerza normal ') disp('-------------------') for iesf=1:b,
if f(iesf)>0 disp([num2str(iesf),' ', num2str(f(iesf)),' Carga en tensión'])
elseif f(iesf)<0 disp([num2str(iesf),' ', num2str(f(iesf)*(-1)),' Carga en compresión']) end if f(iesf) == 0 disp([num2str(iesf),' ', num2str(f(iesf))]) end end
disp('-------------------') disp(' Reacciones ') disp('-------------------') for i_reac=b+1:2*n, if info(i_reac-b,1)~=0 nodo=info(i_reac-b,1); disp(['Reacción en X nodo ',num2str(nodo),' = ',num2str(f(i_reac))]); elseif info(i_reac-b,2)~=0 nodo=info(i_reac-b,2); disp(['Reacción en Y nodo ',num2str(nodo),' = ',num2str(f(i_reac))]); end end
else if b+r > 2*n
Gindeter= b+r-2*n; disp([' Humano tu armadura es estáticamente indeterminada de grado ', num2str(Gindeter) ,', recomiendo aplicar el protocolo hazlo tu mismo ;) ']) else disp(' Humano tu armadura es estáticamente inestable, no me hagas perder el tiempo ;) ') end end