Cleve's Corner

August 13th, 2012

Can One Hear the Shape of a Drum? Part 2, Eigenfunctions

This is the second part of a series of posts about Marc Kac's 1966 paper in the American Mathematical Monthly [1]. This part is devoted to contour plots of the eigenfunctions.

Contents

Eigenfunctions

I described the isospectral drums in part 1. Contour plots of the eigenfunctions are beautiful. Here are the first twenty. The detail increases as the frequency increases. Notice the triangles created by the ninth eigenfunction. These triangles play a central role in the next part of this article.

   % Vertices
   drum1 = [0 0 2 2 3 2 1 1 0
            0 1 3 2 2 1 1 0 0];
   drum2 = [1 0 0 2 2 3 2 1 1
            0 1 2 2 3 2 1 1 0];
   vertices = {drum1,drum2};

   % Number of eigenvalues

   eignos = 20;

   % Grid size
   ngrid = 32;

   % Compute the eigenvalues and eigenfunctions

   h = 1/ngrid;
   [x,y] = meshgrid(0:h:3);

   inpoints = (7*ngrid-2)*(ngrid-1)/2;
   lambda = zeros(eignos,2);
   V = zeros(inpoints,eignos,2);

   % Loop over the two drums

   for d = 1:2
      vs = vertices{d};
      [in,on] = inpolygon(x,y,vs(1,:),vs(2,:));
      in = xor(in,on);

      % Number the interior grid points.

      G = double(in);
      p = find(G);
      G(p) = (1:length(p))';
      grid{d} = G;

      % The discrete Laplacian

      A = delsq(G)/h^2;

      % Sparse matrix eigenvalues and vectors.

      [V(:,:,d),E] = eigs(A,eignos,0);
      lambda(:,d) = diag(E);
   end

   % Plot the eigenfunctions.

   for d = 1:2
      for k = 1:eignos
         figure(ceil(k/2))
         set(gcf,'color','white')
         subplot(2,2,2*mod(k-1,2)+d)

         % Insert the k-th eigenvector in the grid interior.

         G = grid{d};
         p = find(G);
         u = zeros(size(G));
         u(p) = V(:,eignos+1-k,d);

         % Make first eigenvector positive so its color matches the others.

         if k == 1
            u = -u;
         end

         % Insert NaN's to make the exterior disappear.

         vs = vertices{d};
         [in,on] = inpolygon(x,y,vs(1,:),vs(2,:));
         u(~in) = NaN;

         % A filled contour plot with a line on the boundary.

         s = max(abs(u(:)));
         contourf(x,y,u,s*(-1:1/4:1))
         line(vs(1,:),vs(2,:),'color','black','linewidth',2)
         title(num2str(k))
         axis([-0.1 3.1 -0.1 3.1])
         axis square off
      end
   end

Continuous solution for ninth eigenfunction.

The ninth eigenfunction of either region is the first eigenfunction of the isosceles triangle subregion, reflected to fill out the entire region. The corresponding eigenvalue of the continuous problem is $5 \pi^2$.

$$ v_9 = \sin{2 \pi x} \sin{\pi y} - \sin{\pi x} \sin{2 \pi y} $$

   v9continuous = @(x,y) sin(2*pi*x).*sin(pi*y) - sin(pi*x).*sin(2*pi*y);

   figure(gcf+1)
   set(gcf,'color','white')
   for d = 1:2
      u = v9continuous(x,flipud(y));
      subplot(2,2,d)
      vs = vertices{d};
      [in,on] = inpolygon(x,y,vs(1,:),vs(2,:));
      u(~in) = 0.5*u(~in);
      s = max(abs(u(:)));
      contourf(x,y,u,s*(-1:1/4:1))
      line(vs(1,:),vs(2,:),'color','black','linewidth',3)
      title('Continuous v9')
      axis([-0.1 3.1 -0.1 3.1])
      axis square off
   end

References


Get the MATLAB code

Published with MATLAB® 7.14

One Response to “Can One Hear the Shape of a Drum? Part 2, Eigenfunctions”

  1. Cleve Moler replied on :

    I recommend two presentations by Nick Trefethen and Timo Betcke,”Computed eigenmodes of planar regions”,

    and “Eigenmodes of drums and Physics Nobel Prizes”,
    .


MathWorks
Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He is the author of two books about MATLAB that are available online. He writes here about MATLAB, scientific computing and interesting mathematics.

Doug's picture

These postings are the author's and don't necessarily represent the opinions of MathWorks.