Main Content

Eigenvalues and Eigenmodes of L-Shaped Membrane

This example shows how to calculate eigenvalues and eigenvectors. The eigenvalue problem is -Δu=λu. This example computes all eigenmodes with eigenvalues smaller than 100.

Create a model and include this geometry. The geometry of the L-shaped membrane is described in the file lshapeg.

model = createpde();
geometryFromEdges(model,@lshapeg);

Set zero Dirichlet boundary conditions on all edges.

applyBoundaryCondition(model,'dirichlet', ...
                             'Edge',1:model.Geometry.NumEdges, ...
                             'u',0);

Specify the coefficients for the problem: d = 1 and c = 1. All other coefficients are equal to zero.

specifyCoefficients(model,'m',0,'d',1,'c',1,'a',0,'f',0);

Set the interval [0 100] as the region for the eigenvalues in the solution.

r = [0 100];

Create a mesh and solve the problem.

generateMesh(model,'Hmax',0.05);
results = solvepdeeig(model,r);
              Basis= 10,  Time=   0.33,  New conv eig=  0
              Basis= 11,  Time=   0.42,  New conv eig=  0
              Basis= 12,  Time=   0.44,  New conv eig=  0
              Basis= 13,  Time=   0.46,  New conv eig=  0
              Basis= 14,  Time=   0.47,  New conv eig=  0
              Basis= 15,  Time=   0.49,  New conv eig=  0
              Basis= 16,  Time=   0.50,  New conv eig=  0
              Basis= 17,  Time=   0.51,  New conv eig=  0
              Basis= 18,  Time=   0.53,  New conv eig=  1
              Basis= 19,  Time=   0.54,  New conv eig=  1
              Basis= 20,  Time=   0.55,  New conv eig=  1
              Basis= 21,  Time=   0.73,  New conv eig=  1
              Basis= 22,  Time=   0.77,  New conv eig=  3
              Basis= 23,  Time=   0.79,  New conv eig=  3
              Basis= 24,  Time=   0.82,  New conv eig=  4
              Basis= 25,  Time=   0.84,  New conv eig=  5
              Basis= 26,  Time=   0.86,  New conv eig=  6
              Basis= 27,  Time=   0.88,  New conv eig=  6
              Basis= 28,  Time=   0.90,  New conv eig=  6
              Basis= 29,  Time=   1.02,  New conv eig=  7
              Basis= 30,  Time=   1.07,  New conv eig=  7
              Basis= 31,  Time=   1.08,  New conv eig= 10
              Basis= 32,  Time=   1.10,  New conv eig= 10
              Basis= 33,  Time=   1.12,  New conv eig= 11
              Basis= 34,  Time=   1.13,  New conv eig= 11
              Basis= 35,  Time=   1.15,  New conv eig= 14
              Basis= 36,  Time=   1.17,  New conv eig= 14
              Basis= 37,  Time=   1.20,  New conv eig= 14
              Basis= 38,  Time=   1.32,  New conv eig= 14
              Basis= 39,  Time=   1.35,  New conv eig= 14
              Basis= 40,  Time=   1.36,  New conv eig= 14
              Basis= 41,  Time=   1.38,  New conv eig= 15
              Basis= 42,  Time=   1.41,  New conv eig= 15
              Basis= 43,  Time=   1.44,  New conv eig= 15
              Basis= 44,  Time=   1.46,  New conv eig= 16
              Basis= 45,  Time=   1.48,  New conv eig= 16
              Basis= 46,  Time=   1.52,  New conv eig= 16
              Basis= 47,  Time=   1.66,  New conv eig= 16
              Basis= 48,  Time=   1.72,  New conv eig= 17
              Basis= 49,  Time=   1.76,  New conv eig= 18
              Basis= 50,  Time=   1.81,  New conv eig= 18
              Basis= 51,  Time=   1.96,  New conv eig= 18
              Basis= 52,  Time=   2.08,  New conv eig= 18
              Basis= 53,  Time=   2.13,  New conv eig= 18
              Basis= 54,  Time=   2.18,  New conv eig= 21
End of sweep: Basis= 54,  Time=   2.32,  New conv eig= 21
              Basis= 31,  Time=   2.51,  New conv eig=  0
              Basis= 32,  Time=   2.57,  New conv eig=  0
              Basis= 33,  Time=   2.62,  New conv eig=  0
End of sweep: Basis= 33,  Time=   2.62,  New conv eig=  0

There are 19 eigenvalues smaller than 100.

length(results.Eigenvalues)
ans = 19

Plot the first eigenmode and compare it to the MATLAB's membrane function.

u = results.Eigenvectors;
pdeplot(model,'XYData',u(:,1),'ZData',u(:,1));

Figure contains an axes object. The axes object contains an object of type patch.

figure
membrane(1,20,9,9)

Figure contains an axes object. The axes object contains an object of type surface.

Eigenvectors can be multiplied by any scalar and remain eigenvectors. This explains the difference in scale that you see.

membrane can produce the first 12 eigenfunctions for the L-shaped membrane. Compare the 12th eigenmodes.

figure 
pdeplot(model,'XYData',u(:,12),'ZData',u(:,12));

Figure contains an axes object. The axes object contains an object of type patch.

figure 
membrane(12,20,9,9)

Figure contains an axes object. The axes object contains an object of type surface.