1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- clc;clear all;close all;
- %----- Methodes d'approximation sur la formulation faible
- % comparaison des solutions numeriques et analytique de l'exercice de cours 04
- % Vibration d'une barre encastree - ressort
- % H.Oudin
- %----------------------------------------------------------
- % donnees du probleme
- ES= 1 ; roS=1; L= 1;
- alpa = input('donner la valeur du rapport ES/kl ? [10]: ');
- if isempty(alpa) alpa=10; end
- %taille = get(0,'ScreenSize');
- %figure('Name','solution analytique : 3 premiers modes de vibration de la barre',...
- % 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
- for imod = 1:3 % solution analytique
- a= (2*imod-1)*pi/2+0.01;
- b=(2*imod+1)*pi/2-0.01;
- lx = fzero(@(x) tan(x)+alpa*x,[a b]);
- anal(imod)=lx*sqrt(ES/roS/L/L);
- %subplot(3,1,imod), fplot(@(x) sin(lx*x/L),[0 L],'r'),...
- %title(['barre encastree - ressort : ',num2str(imod),...
- %' ieme mode de pulsation ',num2str(anal(imod)),' Hz ' ]), grid
- end
- n=2;
- while n > 1
- K=zeros(n); M=zeros(n);
- for i=1:n
- for j=1:n
- F1 = @(x) i*j*x.^(i+j-2);F2 = @(x) x.^(i+j);
- K(i,j)= ES*(quad(F1,0,L)+(L^(i+j-1))/alpa);
- M(i,j)= roS*quad(F2,0,L);
- end
- end
- if n >= 4 nmod=3; else nmod =n; end
- [modes,omega] = eigs(K,M,nmod,'sm');
- omeg = diag(sqrt(omega));
- disp('--------------------------------------------------');
- fprintf('Methode de galerkin pour un polynome de degre %2d \n',n);
- for imod = 1:nmod
- fprintf('%2d pulsation propre : Approximation : %6.3f / analytique %6.3f\n',imod,omeg(imod),anal(imod));
- fprintf('Soit une erreur de %2.1f %%\n',100*abs(omeg(1)-anal(1))/anal(1));
- end
- disp('---------------------------------------');
- disp('pour quitter l''application ne pas donner de nouvelle valeur');
- n = input('donner le degre du polynome ? [>2]: ');
- if isempty(n) n=0; end
- end
- close all;
|