Quelques calculs autour de la membrane vibrante
Partant de l'equation des ondes,
ou
est le laplacien, il s'agit d'apprendre a manipuler Maple en vue d'experimenter autour de la "resolution" de l'equation des ondes sur une membrane circulaire (un tambour). Le principe du calcul est le suivant :
1. l'equation se separe en temps, ramenant ainsi l'etude a la recherche de fonctions propres du laplacien ;
2. la partie en espace se separe en coordonnees polaires, la partie angulaire est elementaire, la partie radiale s'exprime a l'aide des fonctions de Bessel ;
3. etant donnees des conditions initales (F(R)=0 au bord, qu'on prendra en R=1, et F(t), ainsi que
donnes en t=0 comme fonctions de r,
, il reste a developper la solution generale sur la base des fonctions propres.
Le temps ne permettra pas d'aborder ce dernier point. L'objectif de la seance (qui est meme peut-etre un peu optimiste) est de parvenir a afficher l'animation d'un des modes propres. Le but est de decouvrir le systeme "par immersion", en alternant manipulations simples et recherches dans l'aide en ligne.
1. Exprimer l'equation des ondes en coordonnes polaires et effectuer la separation en temps.
> F:=f(r,theta,t);
> wave_eq:=linalg[laplacian](F,[r,theta,z],coords=cylindrical)-diff(F,t,t);
> eval(subs(F=A(r,theta)*T(t),wave_eq));
> expand(%/A(r,theta)/T(t));
> time_part:=numer(select(has,%,t)-lambda^2);
> space_part:=numer(select(has,%%,r)+lambda^2);
2. Resoudre la partie temporelle.
> sol_time:=dsolve(time_part,T(t));
3. Separer la partie spaciale en parties angulaire et radiale.
> eval(subs(A(r,theta)=phi(r)*U(theta),space_part));
> expand(%/phi(r)/U(theta));
> polar_part:=numer(select(has,%,theta)+kappa^2);
> radius_part:=numer(select(has,%%,r)-kappa^2);
4. Resoudre la partie angulaire et deduire de la physique une contrainte sur les valeurs du parametre.
> dsolve(polar_part,U(theta));
> assume(kappa,integer);
5. Resoudre la partie radiale. La physique impose que la solution soit reguliere a l'origine. Par definition, la fonction
de Bessel est reguliere a l'origine pour
entier. Verifier que c'est la seule solution possible a une constante multiplicative pres.
> dsolve(radius_part,phi(r));
> dsolve(radius_part,phi(r),series);
Ce developpement montre que l'espace des solutions regulieres a l'origine est de dimension 1.
> sol_radius:=eval(subs(BesselY=0,%%));
La fonction csgn a pour effet de renvoyer |
|, il suffit donc de se restreindre a
. De meme, changer
en
change le signe de BesselJ, on peut donc se contenter du cas
positif.
6. Exploiter la condition aux limites F(R)=0 en R=1. (Il existe miraculeusement une fonction BesselJZeros).
> sol_lambda:=BesselJZeros(kappa,nu);
> sol_radius:=BesselJ(kappa,sol_lambda*r);
7. Animer en fonction du temps la partie radiale pour un mode propre particulier.
> plots[animate](subs(kappa=2,nu=3,sol_radius*cos(sol_lambda*t)),r=0..1,t=0..2*Pi/subs(kappa=2,nu=3,sol_lambda),frames=10);
8. Animer ce mode propre en trois dimensions.
> plots[animate3d]([r,theta,subs(kappa=2,nu=3,sol_radius*cos(sol_lambda*t)*cos(kappa*theta))],r=0..1,theta=0..2*Pi,t=0..2*Pi/subs(kappa=2,nu=3,sol_lambda),coords=cylindrical,frames=20);
>