Código de Matlab:
%% -----------------Armaduras 2D Por el Método de
Rigideces----------------
% _Programa Desarrollado con fines académicos_
%% Importación de Datos
% El programa se apoya en un formato universal de excel, de
donde se
% extraerá la mayoría de la información necesaria para la
solución del
% mismo.
format shortg
DATA=xlsread('[Link]',1); %Información de
BARRAS
DATA_Nodos=xlsread('[Link]',2); %Información de
NODOS
%% Extracción de Información
COORD=DATA_Nodos(:,[2 3]); %Ubicación de nodos
UNION_Barras=DATA(:,[2 3]); %Uniones de nodos
(barras)
GDL=DATA(:,10:13); %Grados de Libertad
por barra
Incl_rel=DATA(:,14); %Inclinaciones
relativas de apoyos inclinados
%% Inicio del Algortimo - Información Preliminar
%Información Básica
n_Barras=size(DATA,1);
n_GDL=size(COORD,1)*2;
%Inputs básicos
n_GDL_libres=input('Por favor ingrese el numero de grados de
libertad libres :');
Vfuerzas=input('Ingrese vector de fuerzas en los gdl libres :');
Settle=input('Ingrese el vector de asentamientos :');
%Asentamientos en GDL_rest
n_GDL_Rest=n_GDL-n_GDL_libres;
F_gld_rest=input('Ingrese el vector de fuerzas en los gdl
rest :');
%Prealocating Arrays
Kloc=zeros(4,4,n_Barras); %Matriz local x
barra
Ke=zeros(4,4,n_Barras); %Matriz transformada
x barra
T=zeros(4,4,n_Barras); %Transformada de
barra
K=zeros(n_GDL); %Matriz de rigidez
global
F_INT=zeros(4,1,n_Barras); %Matriz de Fuerzas
Internas
F=zeros(n_Barras,1); %Vector de F.
Internas
%% Desarrollo del algoritmo - Cálculo de Matriz de Rigidez
global
%X1=DATA(:,4);Y1=DATA(:,5);X2=DATA(:,6);Y2=DATA(:,7);E=DATA(:,8)
;A=DATA(:,9);ID=DATA(:,1);
%Desarrollo de matrices locales
INCL=input('Existen apoyos inclinados? (0:no 1:si):');
for i=1:n_Barras
[Ke(:,:,i),T(:,:,i),Kloc(:,:,i)] =
rigidez_barra(DATA(i,4),DATA(i,5),DATA(i,6), ...
DATA(i,7),DATA(i,8),DATA(i,9),DATA(i,1));
end
%%Para apoyo inclinado
if INCL==1
Dec1=input('Que barras desea corregir');
for i=Dec1
[Ke(:,:,i), T(:,:,i),
Kloc(:,:,i)]=rgz_ap_incl(DATA(i,4),DATA(i,5),DATA(i,6), ...
DATA(i,7),DATA(i,8),DATA(i,9),DATA(i,1),Incl_rel(i,1));
end
for i=1:n_Barras
K=agregar_barra(Ke(:,:,i),GDL(i,:),K);
end
%% Cálculos adicionales
% Determinación de Desplazamientos
D1=sol_desplazamientos(K,n_GDL,n_GDL_libres,Vfuerzas,Settle);
%GDL libres
D=[D1;zeros(n_GDL_Rest,1)+Settle'];
%General
% Determinación de las Reacciones en los GDL restringidos
R=reacciones(K,D1);
R=R+F_gld_rest;
%Considerando fuerzas en nodos
% Determinación de Fuerzas Internas
for i=1:n_Barras
F_INT(:,:,i)= Fuer_Int(Kloc(:,:,i),T(:,:,i),GDL(i,:),
D);
F(i)=F_INT(1,1,i);
%Vector de F_int
end
else %Para situaciones normales
for i=1:n_Barras
K=agregar_barra(Ke(:,:,i),GDL(i,:),K);
end
%% Cálculos adicionales
% Determinación de Desplazamientos
D1=sol_desplazamientos(K,n_GDL,n_GDL_libres,Vfuerzas,Settle);
%GDL libres
D=[D1;zeros(n_GDL_Rest,1)+Settle'];
%General
% Determinación de las Reacciones en los GDL restringidos
R=reacciones(K,D1);
R=R+F_gld_rest;
%Considerando fuerzas en nodos
% Determinación de Fuerzas Internas
for i=1:n_Barras
F_INT(:,:,i)= Fuer_Int(Kloc(:,:,i),T(:,:,i),GDL(i,:), D);
F(i)=F_INT(1,1,i);
%Vector de F_int
end
end