_____________________________________________________________

Asesorías en Matemáticas, Física e Ingeniería

Principal -  Estudiantes  -  Empresas  -  Publicaciones  -  Quiénes somos  -  Contacto

_____________________________________________________________

Algoritmo en MATLAB para diseño y Análisis de armaduras

Por: Carlos Armando De Castro P.

El siguiente algoritmo en MATLAB es útil para analizar cualquier armadura simple con elementos conectados por pasadores.

 

function [Fuerzas, Esfuerzos, Deformaciones, Maximo_Esfuerzo]=armaduras

%**************************************************************************
%Elaborado por Carlos A. De Castro.
%Análisis Numérico.
%**************************************************************************

%Lectura del número de nodos:

n=input('Número de nodos de la estructura: ');

%**************************************************************************
%Llenado de la matriz topológica:
%**************************************************************************

%Nodos de unión:
%---------------

['Si los nodos están conectados escriba 1, si no están conectados escriba 0.']

for i=1:n;
    for j=i+1:n;
        topologica(i,j)=input(['Nodo ' num2str( i ) ' con nodo ' num2str(j) ' : ']);
        topologica(j,i)=topologica(i,j);
    end
end

%Nodos con apoyos:
%-----------------

['Si el nodo no tiene apoyo escriba 0, si tiene un apoyo horizontal de patín escriba 1, si tiene un apoyo vertical de patín escriba 2, si tiene un apoyo fijo escriba 3.']

for i=1:n;
    topologica(i,n+1)=input(['Apoyo en el nodo ' num2str(i) ': ']);
end

reacc=0;
for i=1:n;
    switch topologica(i,n+1)
        case 0;
            reacc=reacc;
            case 1;
            reacc=reacc+1;
        case 2;
            reacc=reacc+1;
        case 3;
            reacc=reacc+2;
        end
end

%**************************************************************************
%Llenado de la matriz de ángulos:
%**************************************************************************

['Escribir ángulos en radianes']
for i=1:n;
    for j=i+1:n;
        if topologica(i,j)==1;
            angulos(i,j)=input(['Ángulo del nodo ' num2str(j) ' respecto al nodo ' num2str(i) ': ']);
            angulos(j,i)=angulos(i,j)+pi;
        end
    end
end

%**************************************************************************
%Lectura de las cargas:
%**************************************************************************

['Cargas verticales positivas hacia abajo, cargas horizontales positivas hacia la izquierda.']
for i=1:n;
    if topologica(i,n+1)==0;
        Fx(i)=input(['Carga horizontal en el nodo ' num2str(i) ': ']);
        Fy(i)=input(['Carga vertical en el nodo ' num2str(i) ': ']);
    else
        Fx(i)=0;
        Fy(i)=0;
    end
end

for i=1:n;
    b(2*i-1,1)=Fx(i);
end

for i=1:n;
    b(2*i,1)=Fy(i);
end

%**************************************************************************
%Llenado de la matriz de coeficientes A:
%**************************************************************************

%Barras de la estructura. Diagonal superior:
%-------------------------------------------

k=1;
m=1;
for i=1:n;
    for j=i+1:n;
        if topologica(i,j)==1
            A(2*k-1,m)=cos(angulos(i,j));
            A(2*k,m)=sin(angulos(i,j));
            m=m+1;
        end
    end
k=k+1;
end

%Diagonal inferior:
%------------------

k=1;
m=1;
for i=1:n;
    p=0;
        for j=i+1:n;
            if topologica(i,j)==1
                p=p+1;
                A(2*k-1+2*p,m)=-A(2*k-1,m);
                A(2*k+2*p,m)=-A(2*k,m);
                m=m+1;
        end
end
k=k+1;
end

%Nodos con apoyo:
%----------------

L=length(A(1,:));
k=1;
for i=1:n;
    if topologica(i,n+1)~=0
        switch topologica(i,n+1);
            case 1;
                A(2*i,L+k)=1;
                k=k+1;
            case 2;
                A(2*i-1,L+k)=1;
                k=k+1;
            case 3;
                A(2*i,L+k+1)=1;
                A(2*i-1,L+k)=1;
                k=k+2;
            end
    end
end
%**************************************************************************
%Solución del sistema:
%**************************************************************************

if det(A)~=0
X=A^-1*b;

for i=1:length(X)-reacc;
    Fuerzas(i)=X(i);
end

for i=1:reacc;
    Reacciones(i)=X(length(X)-(reacc-i));

end
%**************************************************************************
%Lectura de las propiedades del material:
%**************************************************************************

E=input('Módulo de Young del material E= ');
Ar=input('Área transversal de las barras Ar= ');
Sy=input('Esfuerzo de fluencia del material Sy= ');

Esfuerzos=1/Ar*Fuerzas;
Deformaciones=Esfuerzos/E;

%**************************************************************************
%Valores máximos de las fuerzas:
%**************************************************************************

Maximo_Esfuerzo=Esfuerzos(1);
for i=2:n;
if abs(Esfuerzos(i))>abs(Maximo_Esfuerzo)
Maximo_Esfuerzo=Esfuerzos(i);
end
end

w=0;
i=1;
while i<=n && w==0;
if abs(Esfuerzos(i))
    i=i+1;
else
    w=1;
end
end

if w==0
['El material es adecuado.']
else
['El material es inadecuado. El esfuerzo supera el límite elástico.']
end

%**************************************************************************
%**************************************************************************
else
('La estructura es estáticamente indeterminada.')
end