Bonjour,
Je suis ingénieur en mécanique des fluides et afin de vérifier des mesures expérimentales, je dois résoudre une équation différentielle du genre : m*(d2z/dt2)+c*(dz/dt)+k*z=F.
J'ai donc décidé de résoudre cette équation sous Maple et la meilleure méthode numérique pour les problèmes de structures est l'algorithme de Newmark.
(disponible page 10 de ce lien : http://www.google.fr/url?sa=t&rct=j&...69620078,d.d2k)
J'ai donc écrit cet algorithme sous Maple mais le logiciel ne me retourne rien et je ne vois pas où est mon erreur. Pourriez-vous m'aider à identifier le problème ?
Ci joint mon code :
Code Maple : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 with(plots); with(linalg); Newmark=proc(z0,u0,F0); local gam,beta, dt, c, kg,a,b, N, i, dF, dz, du, dw, T, m, k; dt:=0.01; T:=4; N:=T/(dt); gam:=0.5; beta:=0.25; m:=0.320; k:=435; c:=2; z(0):=z0; u(0):=u0; F(0):=F0; w(0):=(1/(m))*(F0-k*z0-c*u0); t=vector(i,1); t[1,1]=0; for i from 2 to N do t(i,1)=t(i-1,1)+dt; od; kg:=k+(gam*c)/(beta*dt)+m/(beta*dt*dt); a:=m/(beta*dt)+(gam*c)/(beta); b:= (0.5*m)/(beta)+dt*((0.5*gam)/(beta)-1)*c; for i from 2 to N do dF(i):=diff(F,t)+a*u(i)+b*w(i); dz(i):=(dF(i))/(kg); du(i):=((gam*dz(i))/(beta*dt))-((gam*u(i-1))/(beta))+dt*(1-gam/(2*beta))*w(i-1); dw(i):=((du(i))/(beta*dt*dt))-((u(i-1))/(beta*dt))-((w(i-1))/(2*beta)); z(i+1)=dz(i)+z(i); u(i+1):=du(i)+u(i); w(i+1):=dw(i)+w(i); od; plot([z(i), u(i), w(i)],x=0..50,y=-50..50); end;
En tapant donc Newmark (2,1,0), Maple me retourne "Newmark(2,1,0)".
Un grand merci à celui ou celle qui peut m'aider.
(PS: au cas où, un lien matlab est disponible sur ce site :http://www.mathworks.com/matlabcentr.../newmark_int.m )
Partager