I had this laying around from a course in numerical linear algebra I taught a few years ago.
Here's a matrix whose nonzero elements describe the basic shape.
size = 50;
nw = Partition[Table[i, {i, 1, size^2}], size];
sw = Partition[Table[i, {i, size^2 + 1, 2*size^2}], size];
se = Partition[Table[i, {i, 2*size^2 + 1, 3*size^2}], size];
L = ArrayFlatten[{{nw, 0}, {sw, se}}];
{m, n} = Dimensions[L];
L = Join[{Table[0, {n + 2}]},
Map[Join[{0}, #, {0}] &, L],
{Table[0, {n + 2}]}];
If size=4
, for example, we get something like so
(* size = 4 *)
L // MatrixForm

Now, we convert this to the Laplacian.
entries[0, {_, _}] = {};
entries[k_, {i_, j_}] := Module[{goodVals},
goodVals = Select[{
{i + 1, j}, {i, j + 1}, {i - 1, j}, {i, j - 1}},
L[[Sequence @@ #]] =!= 0 &];
{k, #} -> 1 & /@ (L[[Sequence @@ #]] & /@ goodVals)];
saRules = Flatten[{Band[{1, 1}] -> -4,
MapIndexed[entries, L, {2}]}];
lap = SparseArray[saRules];
lap
is a matrix whose dimension is equal to the number of non-zero entries of L
. You're essentially looking for an eigenvector of lap
.
evs = Reverse[Eigenvectors[N[lap], 8,
Method -> {"Arnoldi", "Shift" -> 0}]];
Here's a simple visualization
ev = evs[[1]];
vib = Map[If[# > 0, ev[[#]], 0] &, L, {2}];
ListPlot3D[vib, ViewPoint -> {2.3, 2.26, 1}]

OK, let's spruce it up a bit
{m, n} = Dimensions[vib];
delete[0, {i_, j_}] := If[
(i + 1 > m || vib[[i + 1, j]] == 0 ) &&
(j + 1 > n || vib[[i, j + 1]] == 0) &&
(i - 1 < 1 || vib[[i - 1, j]] == 0) &&
(j - 1 < 1 || vib[[i, j - 1]] == 0) &&
((i + 1 > m || j + 1 > n) || vib[[i + 1, j + 1]] == 0) &&
((i - 1 < 1 || j + 1 > n) || vib[[i - 1, j + 1]] == 0) &&
((i + 1 > m || j - 1 < 1) || vib[[i + 1, j - 1]] == 0) &&
((i - 1 < 1 || j - 1 < 1) || vib[[i - 1, j - 1]] == 0),
Null, 0];
delete[x_, {_, _}] := x;
vib2 = MapIndexed[delete, vib, {2}];
ListPlot3D[vib2,
Mesh -> None, PlotStyle -> {RGBColor[0.8, 0.2, 0.2],
Specularity[White, 20]}, Lighting -> {
{"Directional", RGBColor[0, 0.4, 0.4],
{{-40, -100, 2}, {0, 0, 0}}},
{"Directional", RGBColor[0.4, 0.4, 0],
{{80, -50, 20}, {0, 0, 0}}}}, Background -> Black,
Boxed -> False, ViewPoint -> {2.3, 2.26, 1}]

lap
acting on a vector containing the cells, in order of their indices 3.vec = Eigenvectors[lap, -1]
4. Map this eigenvector back onto the grid and plot it. – Szabolcs Feb 27 at 4:56