barre_approx_exo4.m 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. clc;clear all;close all;
  2. %----- Methodes d'approximation sur la formulation faible
  3. % comparaison des solutions numeriques et analytique de l'exercice de cours 04
  4. % Vibration d'une barre encastree - ressort
  5. % H.Oudin
  6. %----------------------------------------------------------
  7. % donnees du probleme
  8. ES= 1 ; roS=1; L= 1;
  9. alpa = input('donner la valeur du rapport ES/kl ? [10]: ');
  10. if isempty(alpa) alpa=10; end
  11. %taille = get(0,'ScreenSize');
  12. %figure('Name','solution analytique : 3 premiers modes de vibration de la barre',...
  13. % 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  14. for imod = 1:3 % solution analytique
  15. a= (2*imod-1)*pi/2+0.01;
  16. b=(2*imod+1)*pi/2-0.01;
  17. lx = fzero(@(x) tan(x)+alpa*x,[a b]);
  18. anal(imod)=lx*sqrt(ES/roS/L/L);
  19. %subplot(3,1,imod), fplot(@(x) sin(lx*x/L),[0 L],'r'),...
  20. %title(['barre encastree - ressort : ',num2str(imod),...
  21. %' ieme mode de pulsation ',num2str(anal(imod)),' Hz ' ]), grid
  22. end
  23. n=2;
  24. while n > 1
  25. K=zeros(n); M=zeros(n);
  26. for i=1:n
  27. for j=1:n
  28. F1 = @(x) i*j*x.^(i+j-2);F2 = @(x) x.^(i+j);
  29. K(i,j)= ES*(quad(F1,0,L)+(L^(i+j-1))/alpa);
  30. M(i,j)= roS*quad(F2,0,L);
  31. end
  32. end
  33. if n >= 4 nmod=3; else nmod =n; end
  34. [modes,omega] = eigs(K,M,nmod,'sm');
  35. omeg = diag(sqrt(omega));
  36. disp('--------------------------------------------------');
  37. fprintf('Methode de galerkin pour un polynome de degre %2d \n',n);
  38. for imod = 1:nmod
  39. fprintf('%2d pulsation propre : Approximation : %6.3f / analytique %6.3f\n',imod,omeg(imod),anal(imod));
  40. fprintf('Soit une erreur de %2.1f %%\n',100*abs(omeg(1)-anal(1))/anal(1));
  41. end
  42. disp('---------------------------------------');
  43. disp('pour quitter l''application ne pas donner de nouvelle valeur');
  44. n = input('donner le degre du polynome ? [>2]: ');
  45. if isempty(n) n=0; end
  46. end
  47. close all;