34drum.mws

Partial Differential Equations PowerTool

by Dr. Jim Herod

Section 7.6: Vibrations of a Circular Drum

Maple Packages used in Section 7.6

>    restart:

>    with(plots):

Warning, the name changecoords has been redefined

>   

     

A standard problem to be presented in a course on solving classical partial differential equations by the technique of separation of variables is that of a vibrating circular membrane. Here, we treat the simple case in which the initial conditions are independent of theta .  We recall the wave equation

                    diff(r*diff(u(t,r,theta),r),r)/r+diff(u(t,r,theta),`$`(theta,2))/(r^2)   = 1/(c^2)   diff(u,`$`(t,2)) .

Except, in this simplified case with the initial conditions independent of theta , we can drop the second term of the left side. Thus, we have

                  diff(r*diff(u(t,r),r),r)/r    = 1/(c^2)   diff(u,`$`(t,2)) .

Boundary conditions will be

          u(t, a) = 0, because the sides of the drum are nailed down,

          u(0, r) = f(r), which is the initial displacement,

and      diff(u,t) (0, r) = g(r), which is the initial velocity.

     At this point in our study of partial differential equations, we know to start by separation of variables. Assume that

               u(t, r) = T(t) R(r).

Using this assumption in the partial differential equation leads to

          1/r  (r R ') ' T = 1/(c^2)   R T '',

which, in turn, leads to the two ordinary differential equations

          (r R ') ' + lambda^2  r R = 0, with  R(a) = 0

and

          T '' + lambda^2   c^2  T = 0.

We consider the equation in R first. This equation leads to the Bessel functions and, in view of the physical requirement that solutions stay bounded, we use only R(r) = BesselJ( lambda  r ). By now, we should know how to check to see that these functions really are solutions for the ordinary differential equation in R.

>    R:=r->BesselJ(0,lambda*r);

R := proc (r) options operator, arrow; BesselJ(0,lambda*r) end proc

 

>    diff(r*diff(R(r),r),r)+lambda^2*r*R(r);
simplify(%);

-BesselJ(1,lambda*r)*lambda-r*(BesselJ(0,lambda*r)-1/lambda/r*BesselJ(1,lambda*r))*lambda^2+lambda^2*r*BesselJ(0,lambda*r)

0

>   

To meet the boundary condition, recall that we use the zero's of the Bessel function. Let's prepare about 10 of them. Take a  to be 1 for specificity.

>    c:=1;
for n from 1 to 10 do
    zero[n]:=evalf(BesselJZeros(0,n))/c;
end do;
n:='n';

c := 1

zero[1] := 2.404825558

zero[2] := 5.520078110

zero[3] := 8.653727913

zero[4] := 11.79153444

zero[5] := 14.93091771

zero[6] := 18.07106397

zero[7] := 21.21163663

zero[8] := 24.35247153

zero[9] := 27.49347913

zero[10] := 30.63460647

n := 'n'

>   

Now, we should find that the following functions satisfy the differential equation and the boundary conditions. We draw graphs of the first five of these.

>    R:=(n,r)->BesselJ(0,zero[n]*r);

R := proc (n, r) options operator, arrow; BesselJ(0,zero[n]*r) end proc

>    plot([seq(R(n,r),n=1..5)],r=0..c);

[Maple Plot]

>   

     The equation in T is familiar. It leads to sines and cosines. Solutions for

                   T '' + lambda^2   c^2  T = 0,

or, in this case,

                   T '' + zero[n]^2   c^2  T = 0

are      a[n]  cos( zero[n]  c t)  +   b[n]   sin( zero[n]  c t).

Product solutions are

>    u:=(t,r)->R(n,r)*(a[n]*cos(zero[n]*c*t)+b[n]*sin(zero[n]*c*t));

u := proc (t, r) options operator, arrow; R(n,r)*(a[n]*cos(zero[n]*c*t)+b[n]*sin(zero[n]*c*t)) end proc

>   

We verify that these satisfy the partial differential equation.

>    1/r*diff(r*diff(u(t,r),r),r)-1/c^2*diff(u(t,r),t,t):
simplify(%);

0

>   

We now make sums of these solutions.

>    u:=sum(R(n,r)*(a[n]*cos(zero[n]*c*t)+b[n]*sin(zero[n]*c*t)),n=1..10);

u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...
u := BesselJ(0,2.404825558*r)*(a[1]*cos(2.404825558*t)+b[1]*sin(2.404825558*t))+BesselJ(0,5.520078110*r)*(a[2]*cos(5.520078110*t)+b[2]*sin(5.520078110*t))+BesselJ(0,8.653727913*r)*(a[3]*cos(8.653727913...

>   

The initial condition asks that

          f(r) = u(0, r) = sum(R(n,r)*a[n],n = 1 .. 10)   and that  g(r) = diff(v,t) (0, r) =   sum(R(n,r)*zero[n]*c*b[n],n = 1 .. 10)  .

We compute these as fourier coefficients.

           a[n]  = int(f(r)*R(n,r)*r,r = 0 .. 1)/int(R(n,r)^2*r,r = 0 .. 1)    and     zero[n]*c*b[n]  = int(g(r)*R(n,r)*r,r = 0 .. 1)/int(R(n,r)^2*r,r = 0 .. 1)    

We do a specific example and watch the drum vibrate. We'll take f(r) = 1- r^2  and g(r) = 0. For this example, take c = 1. In this case, all the  b coefficients will be zero.

>    f:=r->r^2-1;
c:=1;

f := proc (r) options operator, arrow; r^2-1 end proc

c := 1

>    for n from 1 to 10 do
     a[n]:=int(f(r)*R(n,r)*r,r=0..1)/int(R(n,r)^2*r,r=0..1);
     b[n]:=0:
end do;
n:='n';

a[1] := -1.108022262

b[1] := 0

a[2] := .1397775052

b[2] := 0

a[3] := -.4547647069e-1

b[3] := 0

a[4] := .2099090194e-1

b[4] := 0

a[5] := -.1163624313e-1

b[5] := 0

a[6] := .7221175738e-2

b[6] := 0

a[7] := -.4837871926e-2

b[7] := 0

a[8] := .3425679000e-2

b[8] := 0

a[9] := -.2529529971e-2

b[9] := 0

a[10] := .1930146611e-2

b[10] := 0

n := 'n'

>   

Check to see how well this fits.

>    u:=(t,r)->sum(R(n,r)*(a[n]*cos(zero[n]*c*t)+b[n]*sin(zero[n]*c*t)),
     n=1..10);

u := proc (t, r) options operator, arrow; sum(R(n,r)*(a[n]*cos(zero[n]*c*t)+b[n]*sin(zero[n]*c*t)),n = 1 .. 10) end proc

>   

To separate the plots, we offset the graph of f by 0.007.

>    plot([u(0,r),f(r)+.007],r=-1..1,color=[black,red]);

[Maple Plot]

>   

Of course, this should really be a graph in 3 dimensions.

>    plot3d([r,theta,u(0,r)],r=0..1,theta=-Pi..Pi,coords=cylindrical,
    axes=normal, scaling=constrained);

[Maple Plot]

Now, we do an animation.

>    animate3d([r,theta,u(t,r)],r=0..1,theta=-Pi..Pi,t=0..4,
   coords=cylindrical,axes=normal, frames=40);

[Maple Plot]

>   

In this final example, we take the initial distribution to be zero, but give the disk a whack. That is, we take f(r) = 0 and g(r) not zero.

>    f:=r->0;
g:=r->r^2-1;

f := 0

g := proc (r) options operator, arrow; r^2-1 end proc

>    for n from 1 to 10 do
     a[n]:=int(f(r)*R(n,r)*r,r=0..1)/int(R(n,r)^2*r,r=0..1);
     b[n]:=int(g(r)*R(n,r)*r,r=0..1)/int(R(n,r)^2*r,r=0..1)/
               (zero[n]*c);
end do;
n:='n';

a[1] := 0.

b[1] := -.4607495368

a[2] := 0.

b[2] := .2532165350e-1

a[3] := 0.

b[3] := -.5255130638e-2

a[4] := 0.

b[4] := .1780167123e-2

a[5] := 0.

b[5] := -.7793387758e-3

a[6] := 0.

b[6] := .3995988144e-3

a[7] := 0.

b[7] := -.2280763154e-3

a[8] := 0.

b[8] := .1406706911e-3

a[9] := 0.

b[9] := -.9200472443e-4

a[10] := 0.

b[10] := .6300543188e-4

n := 'n'

>    animate3d([r,theta,u(t,r)],r=0..1,theta=-Pi..Pi,t=0..Pi,
   coords=cylindrical,orientation=[45,70],axes=none, frames=40);

[Maple Plot]

>   

>   

>   

There are further investigations that can be done at this point. For example, we might strike the drum at a point different from the center, so that the initial value is not independent of theta . We leave these separation of variable problems, however to consider numerical methods.

EMAIL: herod@math.gatech.edu   or   jherod@tds.net

URL: http://www.math.gatech.edu/~herod

Copyright ©  2003  by James V. Herod

All rights reserved