You are on page 1of 3

PROGRAMAS MTODO DEL ELEMENTO FINITO

Primer archivo, guardarlo con el nombre de data


%NMERO DE GRADOS DE LIBERTAD POR NODO, CASO UNIDIMENSIONAL
ngn=1;
%cONSTANTES ELCTICAS DE KLOS MUELLES
k=[100 200 100];

%MATRIZ DE CONECTIVIDAD
Con=[1 2;2 3;3 4];

%NMERO DE NODOS DE BORDE

nnb=2;
Cbo=zeros(nnb,1+ngn);
Cbo(1,1)=1;Cbo(1,2)=0;
Cbo(2,1)=4;Cbo(2,2)=0;

% NMERO DE NODOS CARGADOS


nnc=1;
P=zeros(nnc,1+ngn);
P(1,1)=3; P(1,2)=500;

Segundo archivo:
function ke=rigid(e,k)
% Entrada e: Nmero del elemento del que se quiere calcular la
%matriz de rigidez
%k=vector que contiene las constantes elsticas de cada uno de los
%elementos del sistema.
ke=zeros(2);
ke(1,1)=k(e);
ke(2,2)=k(e);
ke(1,2)=-k(e);
ke(2,1)=-k(e);

Tercer archivo:
function [K,F]=ensam1D(k,Con,P)
if nargin~=3;
error('Nmero de argumentos incorrecto, comprobar datos de entrada');
end
[ne,nne]=size(Con);
if ne~=length(k),
error('La matriz Con y el vector k no concuerdan, comprobar');
end
nn=max(max(Con));
ngn=length(P(1,:))-1;
ngt=nn*ngn;
F=(zeros(ngt,1));
nnc=length(P(:,1));
for i=1:nnc,
F(P(i,1)*ngn)=P(i,2);
end
K=(zeros(ngt));
for e=1:ne,
ke=rigid(e,k);
for i=1:nne*ngn,
auxi=Con(e,i);
for j=1:nne*ngn,
auxj=Con(e,j);
if auxj>=auxi,
K(auxi,auxj)=K(auxi,auxj)+ke(i,j);
else
K(auxj,auxi)=K(auxj,auxi);
end
end
end
end
K= triu(K)+triu(K,1)';
end

Cuarto archivo:
function [K,F]=cbound(K,F,Cbo)
nnc=length(Cbo(:,1));
ngn=length(Cbo(1,:))-1;
for i=1:nnc,
nn=Cbo(i,1);
F(1:nn)=F(1:nn)-K(1:nn,nn)*Cbo(i,1+ngn);
F(nn:end)=F(nn:end)-K(nn,nn:end)'*Cbo(i,1+ngn);
F(nn,1)=Cbo(i,1+ngn);
K(nn,:)=0;
K(:,nn)=0;
K(nn,nn)=1;
end
K
F

Quinto archivo:
function [forcel,forcen]=resultados(u,k,Con)
if nargin ~=3,
error('Nmero de argumentos incorrectos')
end
[ne,nne]=size(Con);
nn=max(max(Con));
ngn=1;
ngt=nn*ngn;
ue=zeros(nne*ngn,1);
forcel=zeros(ne,nne*ngn);
forcen=zeros(nn,ngn);
for e=1:ne,
ke=rigid(e,k);
for j=1:nne,
ue(j)=u(Con(e,j));
end
forcel(e,:)=(ke*ue)';
for j=1:nne,
forcen(Con(e,j))=forcen(Con(e,j))+forcel(e,j);
end
end
forcel
forcen

Sexto archivo. Guardarlo con el nombre de ejecucin


clear
clc
data;
[K,F]=ensam1D(k,Con,P);
disp('La matriz de rigidez es:')
K
disp('El vector de fuerzas globales es:')
F

You might also like