12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- clc;clear all;close all;
- % comparaison des solutions numeriques et analytique de l'exercice de cours exo9
- % Vibration d'une poutre encastree - appuyee
- % H.Oudin
- %----------------------------------------------------------
- % donnees du probleme
- EI= 1 ; roS=1; L= 1;
- % solution analytique pour le premier mode
- lx1 = fzero(@(x) tan(x)-tanh(x),[pi/2+.1 3*pi/2-.1]);
- omeg1=(lx1^2)*sqrt(EI/roS/(L^4));
- aa = (cos(lx1)+cosh(lx1))/(sin(lx1)+sinh(lx1));
- mode1 = @(x) -cos(lx1*x/L)+cosh(lx1*x/L)+aa*(sin(lx1*x/L)-sinh(lx1*x/L));
- disp('---------------------------------------');
- disp('Methode de Galerkin a un parametre');
- % Methode de Galerkin a un parametre (formulation forte)
- % avec les fonctions de forme w1 = x^2(L-x)(3L-2x) et w2 = x^3(L-x)(4L-3x)
- w1 = @(x) ((x.^2).*(L-x)).*(3*L-2*x);
- k(1,1) = 48*EI*quad(w1,0,L);
- w1w1 = @(x) (((x.^2).*(L-x)).*(3*L-2*x)).*(((x.^2).*(L-x)).*(3*L-2*x));
- m11 = roS*quad(w1w1,0,L);
- w1 = @(x) (((x.^2).*(L-x)).*(3*L-2*x))/sqrt(m11);
- m(1,1)= m11;
- sol = sqrt(k(1,1)/m11);
- disp('---------------------------------------');
- fprintf('Pour W1 l''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
- fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
- %sol*sol
- w2 = @(x) ((x.^3).*(L-x)).*(4*L-3*x);
- k(2,2) = EI*quad(@(x) (((x.^3).*(L-x)).*(4*L-3*x)).*(360*x-168*L),0,L);
- w2w2 = @(x) (((x.^3).*(L-x)).*(4*L-3*x)).*(((x.^3).*(L-x)).*(4*L-3*x));
- m22 = roS*quad(w2w2,0,L); m(2,2) = m22;
- w2 = @(x) (((x.^3).*(L-x)).*(4*L-3*x))/sqrt(m22);
- sol = sqrt(k(2,2)/m22);
- disp('---------------------------------------');
- fprintf('Pour W2 l''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',sol,omeg1);
- fprintf('Soit une erreur de %2.1f %%\n',100*abs(sol-omeg1)/omeg1);
- %sol*sol
- taille = get(0,'ScreenSize');
- figure('Name','comparaison des fonctions de forme et du premier mode',...
- 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
- hold on
- fplot(mode1,[0 L],'r'); fplot(w1,[0 L],'b');fplot(w2,[0 L],'g'),...
- ,legend('sol. analytique en rouge , fonction W1 en bleu ,et W2 en vert '), grid
- pause(1);
- disp('---------------------------------------');
- disp('---------------------------------------');
- disp('Methode de Galerkin a deux parametres');
- disp('---------------------------------------');
- % La solution analytique pour le second mode
- lx2 = fzero(@(x) tan(x)-tanh(x),[3*pi/2+.1 5*pi/2-.1]);
- omeg2=(lx2^2)*sqrt(EI/roS/(L^4));
- aa = (cos(lx2)+cosh(lx2))/(sin(lx2)+sinh(lx2));
- mode2 = @(x) -cos(lx2*x/L)+cosh(lx2*x/L)+aa*(sin(lx2*x/L)-sinh(lx2*x/L));
- %----- Méthode de Galerkin a 2 parametres
- k(1,2) = EI*quad(@(x) (((x.^2).*(L-x)).*(3*L-2*x)).*(360*x-168*L),0,L);
- k(2,1) = 48*EI*quad(@(x) ((x.^3).*(L-x)).*(4*L-3*x),0,L);
- %disp('matrice K');k
- w1w2 = @(x) (((x.^2).*(L-x)).*(3*L-2*x)).*(((x.^3).*(L-x)).*(4*L-3*x));
- m(1,2) = roS*quad(w1w2,0,L); m(2,1)= m(1,2);
- %disp('matrice M'); m
- [modes,omega] = eigs(k,m,2,'sm');
- omeg = diag(sqrt(omega));
- fprintf('L''approximation de la premiere pulsation propre est %6.3f / analytique %6.3f\n',omeg(1),omeg1);
- fprintf('Soit une erreur de %2.1f %%\n',100*abs(omeg(1)-omeg1)/omeg1);
- fprintf('L''approximation de la seconde pulsation propre est %6.3f / analytique %6.3f\n',omeg(2),omeg2);
- fprintf('Soit une erreur de %2.1f %%\n',100*abs(omeg(2)-omeg2)/omeg2);
- Z1 = @(x) -5.58*modes(1,1)*(((x.^2).*(L-x)).*(3*L-2*x))-...
- 5.58*modes(2,1)*((x.^3).*(L-x)).*(4*L-3*x);
- Z2 = @(x) -33.5*modes(1,2)*(((x.^2).*(L-x)).*(3*L-2*x))-...
- 33.5*modes(2,2)*((x.^3).*(L-x)).*(4*L-3*x);
- figure('Name','comparaison Analytique / Galerkin pour les deux modes ',...
- 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
- hold on
- fplot(mode1,[0 L],'r');fplot(mode2,[0 L],'r'); fplot(Z1,[0 L],'b');fplot(Z2,[0 L],'b'),...
- ,legend('sol. analytique en rouge , Approximation en bleu '), grid
|