0% ont trouvé ce document utile (0 vote)
216 vues5 pages

Programmation MATLAB pour éléments finis

Ce document présente plusieurs exemples de codes MATLAB pour la résolution d'éléments finis linéaires à barres et à ressorts. Il contient des codes pour calculer la matrice de rigidité d'éléments à 2 et 3 nœuds, l'assemblage manuel et symbolique de matrices de rigidité globales, et la résolution de problèmes aux valeurs propres et aux charges appliquées.

Transféré par

Med Zakaria Hamid
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
216 vues5 pages

Programmation MATLAB pour éléments finis

Ce document présente plusieurs exemples de codes MATLAB pour la résolution d'éléments finis linéaires à barres et à ressorts. Il contient des codes pour calculer la matrice de rigidité d'éléments à 2 et 3 nœuds, l'assemblage manuel et symbolique de matrices de rigidité globales, et la résolution de problèmes aux valeurs propres et aux charges appliquées.

Transféré par

Med Zakaria Hamid
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Barre 2n

clc
clear
disp ('matrice de rigidité d''un élément barre à 2nouds ')
%Element linéaire .......u(x)=ax+b
syms x E S x1 x2 L real
N1=(x-x2)/(x1-x2) % N1=L0(x) premier point
N2=(x-x1)/(x2-x1) % N2=L1(x) deuxieme point
N=[N1 N2]
% l'origine peut etre prise n'importe ou
valx1=input('abscisse du noeud 1: ')
valx2=input('abscisse du noeud 2: ')
N=subs(N,{x1,x2},{valx1,valx2})
B=diff(N,x)
ke=E*S*int(B'*B,x,valx1,valx2)

Jordan

clc
clear
%disp('résolustion du systeme [A]{x}={b] par la méthode de gauss jordan ')
A=[1 1 6;-1 2 9;1 -2 3]
b=[7 2 10]'
input(' donner la matrice A')
input(' donner la matrice b')
disp('matrice augumentée')
Ab=[A,b]
[m,n]=size(Ab);
disp('transformation de gauss-jordan')
for k=1:m
ligne=k ;
Ab(k,:)=Ab(k,:)/Ab(k,k);
for i=1:m
if i~=k
ligne= i ;
Ab(i,:)=Ab(i,:)-Ab(i,k)*Ab(k,:);
end
end
end
Ab
x=Ab(:,n)
tp élément finis
clc
clear
%tp n1 systeme 3 ressort
%donées entrée
k1=100; %valeurs des rigisités n/m
k2=200; %nbr des de noeuds total
k3=k1
p=500;
n_el=3
n_nod=4
nd_nod=1
nd_tot=n_nod*nd_nod
tab_nod=[1 2;2 3;3 4]
tab_dof=[1 2;2 3;3 4]
%matrices de rigidité élémentaires 2*2
Kelem=[1 -1;-1 1]
K1e=k1*Kelem
K2e=k2*Kelem
K3e=k3*Kelem
% matrice de rigidité golabal nd_tot-nd tot
%assemblage manuel 1 : construction d'une tableau de zéroes de dim
%(nd_tot-nd_tot)
KG=zeros (nd_tot)
% remplissage de la matrice du ressort 1 ddl 1et2
K1=KG % initialisatio de K1 par le tableau KG
K1([1 2],[1 2])=K1e
% remplissage de la matrice du ressort 2 ddl 1et2
K2=KG % initialisatio de K3 par le tableau KG
K2([2 3],[2 3])=K2e
% remplissage de la matrice du ressort 1 ddl 1et2
K3=KG % initialisatio de K3 par le tableau KG
K3([3 4],[3 4])=K3e % affectaton de k3e au
%initialisation de K2 et par le tableau kG
%assemblage : somme des 3 matrices
KG=K1+K2+K3
%application des conditions limites aux déplacements
% ddl effectifs (libres) : u2 et u3
dl_fix=[1 4]
cl=[0 0]
dl_lib=[2 3]%setdiff dof's,dl _fix
charge=[0 p]
¨%vecteur des efforts globeaux( nd_tot*1)
FG=zeros (nd_tot,1)
%condtion aux limites u1=0 , u4=0 : ddl effectifs
FG(dl_lib)=charge
UG=zeros (nd_tot,1)
Keff=KG(dl_lib,dl_lib)
Feff=FG(dl_lib)
Ueff=Keff\Feff
Reac=KG(dl_fix,dl_lib)*Ueff

Tpelment
clc
clear
syms k1 k2 k3 k4 real
rig=[k1 k2 k3 k4]
rignum=100*[1 2 3 4]
kelem=[1 -1;-1 1]
tab_nod=[4 2;2 3;3 5;2 1] %table des neuds des éléménts
nel=size(tab_nod,1) % nbr d'élément du modele
n_nod=5 %nbr des noeuds total
%stiffnes :
k=sym(zeros(n_nod)) % matrice de rigidité gmobale déclaré symbolique
élémentaire a cause de rigi éléménrtaire
for e=1:nel;
disp('element')
disp(e)
el_dof=tab_nod(e,:)
ke=rig(e)*kelem
k(el_dof,el_dof)=k(el_dof,el_dof)+ke
end
KG=k=subs(KG,rig,rignum)
det(KGnum)
tp united
%programme de la recherche de la racine xarré d'un mombre
%par la méthode de newton raphson
%entrer des données
c=input ('donner la valeur de c: ')
eps=input ('donner la valeur de eps: ');
imax=input ('donner la valeur de imax=')
format long
% initialisation de la racine
x0=input ('donner la valeur de x0');
i=1;
while (i<=imax)
etape=i
x=0.5*(x0+c/x0); %algorithme de N-R
err=abs(x-x0)
if(err<=eps)%critere d'arret
disp('le processus a converger apres K étape')
K=i
disp('et la racine rechercheé est')
x
return
end % fin de if
i=i+1 ; % incrémentation de i.........>
% vérification de la racine
x0=x %le x trouvé joue le role de x0
end %fin de while

élément finis 3noeuds


clc
clear
disp ('matrice de rigidité d''un élément barre à 2nouds ')
%Element linéaire .......u(x)=ax+b
syms x E S x1 x2 x3 L real
N1=((x-x2)*(x-x3))/((x1-x2)*(x1-x3)) % N1=L0(x) premier point
N2=((x-x1)*(x-x3))/((x2-x1)*(x2-x3)) % N2=L1(x) deuxieme point
N3=((x-x1)*(x-x2))/((x3-x1)*(x3-x2)) % N3=L2(x) 3 point
N=[N1 N2 N3]
% l'origine peut etre prise n'importe ou
valx1=input('abscisse du noeud 1: ')
valx2=input('abscisse du noeud 2: ')
valx3=input('abscisse du noeud 3: ')
N=subs(N,{x1,x2,x3},{valx1,valx2,valx3})
B=diff(N,x)
ke=E*S*int(B'*B,x,valx1,valx3)

CADRE2M

clc
clear
disp('26/04/2016')
%====================modele
nnod=3; % nombere de noeds total
nnod_el=2; % nbr de noeud par noeud
ndl_nod=2; % nbr de ddls par neuds
nd1_el=nnod_el*ndl_nod ; % nbr ddl par elm
nddl=nnod*ndl_nod;
ddls=[1:nddl] % nbr ddl total
tabnod=[1 2;2 3;1 3] ;% tab de connectivité
tabdl=[1:4;3:6;1 2 5 6]; % nbrs ddls par élément
nel=size(tabnod,1) ;
cord=[0 0;2 0;0 1] ;
x=cord(:,1)' ;
y=cord(:,2)' ;
%======================= donnes =======
E=2e10;
S=5e-4;
L=1;
ES=E*S;
mat=[1 -1;-1 1];
%======================traitement ========
disp(' ')
KG=zeros(nddl) % matrice de rigidité global (nddl*nddl)
UG=zeros(nddl,1) ; %vecteu de déplacement
fG=zeros(nddl,1) ; % vecteurs des chargement
%========= assemblage======
for e=1:nel ;
Element=e ;
n1=tabnod(e,1) ; % noeud 1 de lelemnt e
n2=tabnod(e,2) ; % noeud 2 ,,,,,,
ddle=tabdl(e,:) ; % ddls de lelemt
dye=y(n2)-y(n1) ;
dxe=x(n2)-x(n1) ;
Le=sqrt(dxe^2+dye^2) ; % longeur de l'élémént
c=dxe/Le ; % cos phi
s=dye/Le ; % sin phi
T=[c s 0 0;0 0 c s] ; % matrice de transformation local global
kel=(ES/Le)*mat ; % matrice éléménrtaire dans le repere local
keg=T'*kel*T ; % matrice élémentaire dans le repere global
KG(ddle,ddle)=KG(ddle,ddle)+keg; % assemblage de Kg
end
KG=KG
% ===============résolution============
dfix=[1 2 4 5] % cl
dlib=setdiff(ddls,dfix) %dl libre
Kred=KG(dlib,dlib) % matrice de rigidité
dchar=[3 6]
FG(dchar)=[4000000 2000000]
Fred=FG(dlib)
dep1=Kred\Fred'
UG(dlib)=dep1
fG=KG*UG
tic
reac1=fG(dfix)
toc
tic
reac2=KG(dfix,dlib)*UG(dlib)
toc
disp(' ')
disp(' ')
disp(' ------------------resultats --------- --------')
disp(' ')
disp(' ')
disp(' ddl délplcement efforts ')
disp(' --- ---------- ------- ')
format short g
resu=[ddls' UG fG];
disp(resu)
xdep=UG(1:2:nddl)
ydep=UG(2:2:nddl)
for i=1:nnod
xmod(i)=x(i)+xdep(i)
ymod(i)=y(i)+ydep(i)
end
xmod ;
ymod ;
clf
for e=1:nel
n1=tabnod(e,1)
n2=tabnod(e,2)
plot([x(n1) x(n2)],[y(n1) y(n2)],'--b')
hold on
plot([x(n1) x(n2)],[y(n1) y(n2)],'ok')
plot([xmod(n1) xmod(n2)],[ymod(n1) ymod(n2)],'-r')
plot([xmod(n1) xmod(n2)],[ymod(n1) ymod(n2)],'oy')

end
xlabel('axe x')
ylabel('axe y')
axis('equal')
legend('structure initilae','noeud initial' ,'structure déformé','nouveau
noeud')
grid on
grid minor

Vous aimerez peut-être aussi