vibra_poutre_exo15.m 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. close all ; clc;
  2. % Script de calcul des modes de vibration de la poutre de l'exo 15
  3. % exemple du cours modelisee par nelt elements
  4. %
  5. % fonction utilisee
  6. % plotstr : trace du maillage avec numero noeuds et elements
  7. % vibrations : resolution du probleme
  8. %
  9. % H.Oudin
  10. disp(' ');
  11. disp('modes de vibration d''une poutre appuyee - appuyee');
  12. disp('==================');
  13. global nddln nnod nddlt nelt nnode ndim
  14. global Coord Connec Typel Nprop Prop Ncl Vcl F
  15. % definition du maillage
  16. nelt = input('donner le nombre d''elements nelt ? [2]: ');
  17. if isempty(nelt) nelt=2; end
  18. L = 1;
  19. Coord=[];
  20. for j=0:nelt Coord=[Coord; j*L/nelt]; end
  21. [nnod,ndim]=size(Coord);
  22. nddln=2; nddlt=nddln*nnod;
  23. Connec=[]; nnode = 2;
  24. for j=1:nelt Connec=[Connec;[j j+1]]; end
  25. % definition du modele EF : type des elements
  26. Typel = 'poutre_keme';
  27. for i=1:nelt Typel = char('poutre_keme',Typel); end
  28. % definition des caracteristiques mecaniques elementaires (EI f) (en 1D)
  29. Nprop = ones(nelt); % pour chaque element numero de la propriete
  30. Prop=[ 21000000 210 0.78 ]; % tableau de ES EI RhoS
  31. % definition des CL en deplacement
  32. CL=[ 1 , 1 , 0 ; ... % numero du noeud, (1 ddl impose ,0 ddl libre)
  33. nelt+1 , 1 , 0 ];
  34. Ncl=zeros(1,nddlt);
  35. Vcl=zeros(1,nddlt); % deplacements imposes nuls
  36. for i=1:size(CL,1)
  37. for j=1:nddln
  38. if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1; end
  39. end
  40. end
  41. F=zeros(nddlt,1);
  42. %plotstr % trace du maillage
  43. nmode = input('combien de frequences faut-il calculer ? [3]: ');
  44. if isempty(nmode) nmode=3; end
  45. f=[]; U=[];
  46. [f,U] = feval('vibrations',nmode);
  47. disp('frequences obtenues par le modele EF');
  48. f
  49. if f(1)>f(2)
  50. ft=fliplr(f');
  51. U=fliplr(U);
  52. f=ft';
  53. end
  54. EI=Prop(1,2);RS=Prop(1,3);
  55. norme = RS*L/2;
  56. disp('en bleu les modes EF / en vert la solution analytique');
  57. taille = get(0,'ScreenSize');
  58. figure('Name','Comparaison analytique / numerique des modes de vibration de la poutre',...
  59. 'Position',[taille(3)/2.01 taille(4)/2.4 taille(3)/2 taille(4)/2])
  60. for j= 1: nmode
  61. x=[0:0.01*L:L]; y = sin(j*pi*x/L);%----- sol analytique appuyeee - appuyee
  62. fanal = (j^2)*sqrt(EI/(RS*(L^4)))*pi/2;
  63. subplot(nmode,1,j),title([int2str(j),' mode de vibration a la frequence ',...
  64. num2str(f(j),'%7.2f'),' / sol analytique ', ...
  65. num2str(fanal,'%7.2f')]),hold on
  66. plot(x,y,'g'); plot(x,-y,'g'); axis([0 L -1.2 1.2])
  67. s = sqrt(norme);%---- facteur d'echelle sur la deformee EF a partir de la norme analytique
  68. for iel = 1:nelt
  69. Pos = Coord(Connec(iel,:),:); Le=Pos(2,1)-Pos(1,1);
  70. je=(Connec(iel,1)-1)*nddln+1;
  71. x = [0:0.1:1]; x2=x.*x ; x3=x.*x2;
  72. y = s*( (1-3*x2+2*x3)*U(je,j) + Le*(x-2*x2+x3)*U(je+1,j) + ...
  73. (3*x2-2*x3)*U(je+2,j) + Le*(-x2+x3)*U(je+3,j) );
  74. x = Pos(1,1)+ x*Le;
  75. plot(x,y,'b'); plot(x,-y,'b')
  76. end
  77. end
  78. return