|
Faculté
des Sciences Appliquées |
|
Mécanique
Rationnelle 2e candidature 2005-2006 |
Séminaire Matlab du
5/10/2012 |
1. |
Une table est animée d’un mouvement d’oscillation A.sin(wt). Une balle est initialement au repos sur la table. Le coefficient de
restitution est a. Le coefficient de restitution est défini par
la relation : On demande 3. De modéliser par Matlab le mouvement de la
table et de la balle pour les conditions initiales trouvées en 2. La modélisation des équations par Runge Kutta La condition de stop de l’intégration La
modélisation avec simulation du mouvement ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ clear global A omega ydot_initial y_initial g options = odeset('Events','event_rebond','RelTol',1e-10); omega=1;g=10;alpha=0.9; t_max1=(pi/2+0*pi)/omega; t_max2=(pi/2+2*pi)/omega; ydot_initial=(alpha*g*t_max1-g*(t_max2-t_max1)/2)/alpha; y_initial=A*sin(omega*t_max1)+g*t_max1^2/2-ydot_initial*t_max1; % Cosmétique
Graphe for A=1:2:12 % on teste
différentes valeurs de A amplitude de vibration table figure subplot(2,1,1);
title(['A.\omega.\omega/g =',num2str(A*omega*omega/g)]);subplot(2,1,2); for i=1:35 % Nombre
de rebonds if i==1 t_initial=0;y_0=y_initial; ydot_0=ydot_initial; else ydot_0 =-alpha*y(end,2)+(1+alpha)*A*omega*cos(omega*t(end)); y_0=A*sin(omega*t(end)); t_initial=t(end); end [t,y]
= ode45(@rebond_eq,[t_initial:0.15:t_initial+100],[y_0 ydot_0],options); % début du dessin subplot(2,1,2);plot(y(:,1),y(:,2));hold on;grid on subplot(2,1,1);plot(t(:),y(:,1),'r-');hold on;plot(t(:),A*sin(omega*t(:)));hold on;grid on ; end end hold off;
Retour haut de la page La modélisation de l’arrêt de
l’intégration ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ function [value,isterminal,direction] = event_rebond(t,y) global A omega ydot_initial y_initial value = y(1)-A*sin(omega*t); isterminal = 1; % Stop the integration direction = 0; % Negative direction only
Retour haut de la page La modélisation de l’équation
du mouvement ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ function z = rebond_eq(t,y); global A omega ydot_initial
y_initial g z=zeros(2,1); z(1) = y(2); z(2) = -g;
Retour haut de la page Version complète
avec animation quasi temps réel ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ clear % mov = avifile('c:\test3.avi','Compression','None','Quality',100,'fps',25) global A omega ydot_initial y_initial g omega=1;g=10;alpha=0.9; t_max1=(pi/2+0*pi)/omega; t_max2=(pi/2+2*pi)/omega; ydot_initial=(alpha*g*t_max1-g*(t_max2-t_max1)/2)/alpha; y_initial=A*sin(omega*t_max1)+g*t_max1^2/2-ydot_initial*t_max1; t_initial=0; % Cosmétique Graphe figure('NumberTitle','on','Name','Séminaire du 5/10/2012 - Projet Table
Vibrante','Renderer','OpenGL','Color','w','Position',[100 100 500 500]) subplot(2,1,1); title(['A.\omega.\omega/g
=',num2str(A*omega*omega/g)]); xlabel('Temps (s)');ylabel('y (m)');axis([0 200 -30
100]) subplot(2,1,2); title('Visualisation du mouvement'); xlabel('Temps (s)');ylabel('y (m)'); % Fin Cosmétique Graphe for A=5:2:5 % on teste différentes valeurs de A amplitude de
vibration table for i=1:35 % Nombre de rebonds if i>1 ydot_initial
=-alpha*y(end,2)+(1+alpha)*A*omega*cos(omega*t(end)); y_initial=A*sin(omega*t(end)); t_initial=t(end); end options = odeset('Events','event_rebond','RelTol',1e-10); [t,y] = ode45(@rebond_eq,[t_initial:0.15:t_initial+100],[y_initial ydot_initial],options); % début du dessin for j=2:1:max(size(t)) subplot(2,1,1); line(t(j-1:j),y(j-1:j,1)) line(t(j-1:j),A*sin(omega*t(j-1:j)),'Color','r') subplot(2,1,2,'replace');axis([-50 50
-10 100]); line(0,y(j),'Color','b','Marker','.','MarkerSize',5); line([-20 20],[A*sin(omega*t(j))
A*sin(omega*t(j))],'Color','r','LineWidth',2); drawnow; % F = getframe(gcf); % mov
= addframe(mov,F); end hold off; end end %mov = close(mov);
Retour haut de la page |