poutre_approx_exo9.m 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. clc;clear all;close all;
  2. % comparaison des solutions numeriques et analytique de l'exercice de cours exo9
  3. % Vibration d'une poutre encastree - appuyee
  4. % H.Oudin
  5. %----------------------------------------------------------
  6. % donnees du probleme
  7. EI= 1 ; roS=1; L= 1;
  8. % solution analytique pour le premier mode
  9. lx1 = fzero(@(x) tan(x)-tanh(x),[pi/2+.1 3*pi/2-.1]);
  10. omeg1=(lx1^2)*sqrt(EI/roS/(L^4));
  11. aa = (cos(lx1)+cosh(lx1))/(sin(lx1)+sinh(lx1));
  12. mode1 = @(x) -cos(lx1*x/L)+cosh(lx1*x/L)+aa*(sin(lx1*x/L)-sinh(lx1*x/L));
  13. disp('---------------------------------------');
  14. disp('Methode de Galerkin a un parametre');
  15. % Methode de Galerkin a un parametre (formulation forte)
  16. % avec les fonctions de forme w1 = x^2(L-x)(3L-2x) et w2 = x^3(L-x)(4L-3x)
  17. w1 = @(x) ((x.^2).*(L-x)).*(3*L-2*x);
  18. k(1,1) = 48*EI*quad(w1,0,L);
  19. w1w1 = @(x) (((x.^2).*(L-x)).*(3*L-2*x)).*(((x.^2).*(L-x)).*(3*L-2*x));
  20. m11 = roS*quad(w1w1,0,L);
  21. w1 = @(x) (((x.^2).*(L-x)).*(3*L-2*x))/sqrt(m11);
  22. m(1,1)= m11;
  23. sol = sqrt(k(1,1)/m11);
  24. disp('---------------------------------------');
  25. fprintf('Pour W1 l''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
  26. fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
  27. %sol*sol
  28. w2 = @(x) ((x.^3).*(L-x)).*(4*L-3*x);
  29. k(2,2) = EI*quad(@(x) (((x.^3).*(L-x)).*(4*L-3*x)).*(360*x-168*L),0,L);
  30. w2w2 = @(x) (((x.^3).*(L-x)).*(4*L-3*x)).*(((x.^3).*(L-x)).*(4*L-3*x));
  31. m22 = roS*quad(w2w2,0,L); m(2,2) = m22;
  32. w2 = @(x) (((x.^3).*(L-x)).*(4*L-3*x))/sqrt(m22);
  33. sol = sqrt(k(2,2)/m22);
  34. disp('---------------------------------------');
  35. fprintf('Pour W2 l''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
  36. fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
  37. %sol*sol
  38. taille = get(0,'ScreenSize');
  39. figure('Name','comparaison des fonctions de forme et du premier mode',...
  40. 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  41. hold on
  42. fplot(mode1,[0 L],'r'); fplot(w1,[0 L],'b');fplot(w2,[0 L],'g'),...
  43. ,legend('sol. analytique en rouge , fonction W1 en bleu ,et W2 en vert '), grid
  44. pause(1);
  45. disp('---------------------------------------');
  46. disp('---------------------------------------');
  47. disp('Methode de Galerkin a deux parametres');
  48. disp('---------------------------------------');
  49. % La solution analytique pour le second mode
  50. lx2 = fzero(@(x) tan(x)-tanh(x),[3*pi/2+.1 5*pi/2-.1]);
  51. omeg2=(lx2^2)*sqrt(EI/roS/(L^4));
  52. aa = (cos(lx2)+cosh(lx2))/(sin(lx2)+sinh(lx2));
  53. mode2 = @(x) -cos(lx2*x/L)+cosh(lx2*x/L)+aa*(sin(lx2*x/L)-sinh(lx2*x/L));
  54. %----- Méthode de Galerkin a 2 parametres
  55. k(1,2) = EI*quad(@(x) (((x.^2).*(L-x)).*(3*L-2*x)).*(360*x-168*L),0,L);
  56. k(2,1) = 48*EI*quad(@(x) ((x.^3).*(L-x)).*(4*L-3*x),0,L);
  57. %disp('matrice K');k
  58. w1w2 = @(x) (((x.^2).*(L-x)).*(3*L-2*x)).*(((x.^3).*(L-x)).*(4*L-3*x));
  59. m(1,2) = roS*quad(w1w2,0,L); m(2,1)= m(1,2);
  60. %disp('matrice M'); m
  61. [modes,omega] = eigs(k,m,2,'sm');
  62. omeg = diag(sqrt(omega));
  63. fprintf('L''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',omeg(1),omeg1);
  64. fprintf('Soit une erreur de %2.1f %%\n',100*abs(omeg(1)-omeg1)/omeg1);
  65. fprintf('L''approximation de la seconde pulsation propre est %6.3f / analytique %6.3f\n',omeg(2),omeg2);
  66. fprintf('Soit une erreur de %2.1f %%\n',100*abs(omeg(2)-omeg2)/omeg2);
  67. Z1 = @(x) -5.58*modes(1,1)*(((x.^2).*(L-x)).*(3*L-2*x))-...
  68. 5.58*modes(2,1)*((x.^3).*(L-x)).*(4*L-3*x);
  69. Z2 = @(x) -33.5*modes(1,2)*(((x.^2).*(L-x)).*(3*L-2*x))-...
  70. 33.5*modes(2,2)*((x.^3).*(L-x)).*(4*L-3*x);
  71. figure('Name','comparaison Analytique / Galerkin pour les deux modes ',...
  72. 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  73. hold on
  74. fplot(mode1,[0 L],'r');fplot(mode2,[0 L],'r'); fplot(Z1,[0 L],'b');fplot(Z2,[0 L],'b'),...
  75. ,legend('sol. analytique en rouge , Approximation en bleu '), grid