123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- close all ; clc;
- % Script de calcul des modes de vibration de la poutre de l'exo 15
- % exemple du cours modelisee par nelt elements
- %
- % fonction utilisee
- % plotstr : trace du maillage avec numero noeuds et elements
- % vibrations : resolution du probleme
- %
- % H.Oudin
- disp(' ');
- disp('modes de vibration d''une poutre appuyee - appuyee');
- disp('==================');
- global nddln nnod nddlt nelt nnode ndim
- global Coord Connec Typel Nprop Prop Ncl Vcl F
- % definition du maillage
- nelt = input('donner le nombre d''elements nelt ? [2]: ');
- if isempty(nelt) nelt=2; end
- L = 1;
- Coord=[];
- for j=0:nelt Coord=[Coord; j*L/nelt]; end
- [nnod,ndim]=size(Coord);
- nddln=2; nddlt=nddln*nnod;
- Connec=[]; nnode = 2;
- for j=1:nelt Connec=[Connec;[j j+1]]; end
- % definition du modele EF : type des elements
- Typel = 'poutre_keme';
- for i=1:nelt Typel = char('poutre_keme',Typel); end
- % definition des caracteristiques mecaniques elementaires (EI f) (en 1D)
- Nprop = ones(nelt); % pour chaque element numero de la propriete
- Prop=[ 21000000 210 0.78 ]; % tableau de ES EI RhoS
- % definition des CL en deplacement
- CL=[ 1 , 1 , 0 ; ... % numero du noeud, (1 ddl impose ,0 ddl libre)
- nelt+1 , 1 , 0 ];
- Ncl=zeros(1,nddlt);
- Vcl=zeros(1,nddlt); % deplacements imposes nuls
- for i=1:size(CL,1)
- for j=1:nddln
- if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1; end
- end
- end
- F=zeros(nddlt,1);
- %plotstr % trace du maillage
- nmode = input('combien de frequences faut-il calculer ? [3]: ');
- if isempty(nmode) nmode=3; end
- f=[]; U=[];
- [f,U] = feval('vibrations',nmode);
- disp('frequences obtenues par le modele EF');
- f
- if f(1)>f(2)
- ft=fliplr(f');
- U=fliplr(U);
- f=ft';
- end
- EI=Prop(1,2);RS=Prop(1,3);
- norme = RS*L/2;
- disp('en bleu les modes EF / en vert la solution analytique');
- taille = get(0,'ScreenSize');
- figure('Name','Comparaison analytique / numerique des modes de vibration de la poutre',...
- 'Position',[taille(3)/2.01 taille(4)/2.4 taille(3)/2 taille(4)/2])
- for j= 1: nmode
- x=[0:0.01*L:L]; y = sin(j*pi*x/L);%----- sol analytique appuyeee - appuyee
- fanal = (j^2)*sqrt(EI/(RS*(L^4)))*pi/2;
- subplot(nmode,1,j),title([int2str(j),' mode de vibration a la frequence ',...
- num2str(f(j),'%7.2f'),' / sol analytique ', ...
- num2str(fanal,'%7.2f')]),hold on
- plot(x,y,'g'); plot(x,-y,'g'); axis([0 L -1.2 1.2])
- s = sqrt(norme);%---- facteur d'echelle sur la deformee EF a partir de la norme analytique
- for iel = 1:nelt
- Pos = Coord(Connec(iel,:),:); Le=Pos(2,1)-Pos(1,1);
- je=(Connec(iel,1)-1)*nddln+1;
- x = [0:0.1:1]; x2=x.*x ; x3=x.*x2;
- y = s*( (1-3*x2+2*x3)*U(je,j) + Le*(x-2*x2+x3)*U(je+1,j) + ...
- (3*x2-2*x3)*U(je+2,j) + Le*(-x2+x3)*U(je+3,j) );
- x = Pos(1,1)+ x*Le;
- plot(x,y,'b'); plot(x,-y,'b')
- end
- end
- return
|