barre_vibra2.m 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. clc;clear all;close all;
  2. % Methode d'approximation appliquee aux vibrations des barres
  3. % comparaison des solutions numeriques et analytique de l'exercice vibra2
  4. % Barre bi-encastree
  5. % H.Oudin
  6. %----------------------------------------------------------
  7. % donnees du probleme
  8. ES= 1 ; roS=1; L= 1;
  9. %----------------------------------------------------------
  10. %----- Methodes d'approximation sur la formulation forte
  11. %----- avec la fonction de forme x(L-x)
  12. omeg1=pi*sqrt(ES/roS/L/L); % solution analytique
  13. taille = get(0,'ScreenSize');
  14. %figure('Name','comparaison fonction de forme - premier mode',...
  15. % 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  16. %fplot(@(x)[sin(pi*x/L) , 4*x.*(L-x)],[0 L]);
  17. disp('Methodes d''approximation sur la formulation forte pour une barre bi-encastree');
  18. disp('------------------------------------------------------------------------------');
  19. disp('Methode de la valeur moyenne');
  20. f=@(x) x.*(L-x);
  21. k = 2*ES*L; m = roS*quad(f,0,L); sol = sqrt(k/m);
  22. fprintf('L''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
  23. fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
  24. disp('---------------------------------------');
  25. disp('Methode des residus ponderes avec p(x)=x');
  26. f=@(x) x.^2*(L-x);
  27. k = 2*ES*quad(@(x) x,0,L); m = roS*quad(f,0,L); sol = sqrt(k/m);
  28. fprintf('L''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
  29. fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
  30. disp('---------------------------------------');
  31. disp('Methode des residus ponderes avec p(x)=x^2');
  32. f=@(x) x.^3*(L-x);
  33. k = 2*ES*quad(@(x) x^2,0,L); m = roS*quad(f,0,L); sol = sqrt(k/m);
  34. fprintf('L''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
  35. fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
  36. disp('---------------------------------------');
  37. disp('Methode de Collocation');
  38. f=@(x) x.*(L-x); xp=0.5;
  39. while xp > 0
  40. k = 2*ES ; m = roS*f(xp) ; sol = sqrt(k/m);
  41. fprintf('Pour un point de collocation situe en %3.1f L \n',xp);
  42. fprintf('L''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
  43. fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
  44. disp('---------------------------------------');
  45. disp('pour quitter la methode de Collocation ne pas donner de nouvelle valeur');
  46. xp = input('donner une nouvelle position du point de collocation sur [0,1]: ');
  47. if isempty(xp) xp=0; end
  48. end
  49. disp('---------------------------------------');
  50. disp('Methode de galerkin');
  51. f=@(x) x.*(L-x); f2 = @(x) (x.*(L-x)).^2;
  52. k = 2*ES*quad(f,0,L); m = roS*quad(f2,0,L); sol = sqrt(k/m);
  53. fprintf('L''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
  54. fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
  55. close all;
  56. %----------------------------------------------------------
  57. close all;