# Enforcing Boundary Conditions While Using Arnoldi To Find Eigenvalues Of Matrix Representation Of Laplacian

See bottom for amendment

Good day. I want to compute an estimate of the spectrum for a free particle inside a tetrahedral box defined by these coordinates

{{0, 0, 0}, {Sqrt[2]*Pi Sqrt[2]*Pi , 0}, {Sqrt[2]*Pi ,  0, Pi}, {0, Sqrt[2]*Pi, Pi}}


These coordinates define a special type of tetrahedron called a K tetrahedron which is a space-filling polytope. One can analytically solve the Schrödinger equation for a particle trapped inside a K tetrahedron and obtain the following spectrum

(1/4)(3 (l^2 + m^2 + n^2) - 2 l m - 2 ln - 2 m n)


where h has been set to 1, mass has been set to 1/2 and l, m, and n are distinct positive integers greater than 0. I can with acceptable accuracy recover the above spectrum using Mathematica's built in NDEigensystem

{vals, funs} = NDEigensystem[{Laplacian[u[x, y, z], {x, y, z}], DirichletCondition[u[x, y, z] == 0,True]}, u[x, y, z], {x, y, z} \[Element] Tetrahedron[{{0, 0, 0}, {Sqrt[2] \[Pi], Sqrt[2] \[Pi],
0}, {Sqrt[2] \[Pi], 0, \[Pi]}, {0, Sqrt[2] \[Pi], \[Pi]}}], 6];


which yield these eigenvalues

{5.00162, 8.75828, 8.75844, 10.012, 13.0255, 14.0321}


I can do the same for a particle inside a regular tetrahedron with Dirichlet boundary conditions in which the wave function vanishes at the boundaries of the tetrahedral box.

In practice what I'm doing is somewhat different and this is where I need help. I have a matrix representation of a Laplacian defined inside and on the boundary of a K tetrahedron. If I go and solve the eigenvalue problem as shown below

Sort[Eigenvalues[N[Laplace], -6, Method -> "Arnoldi"]]


the ratio of the eigenvalues from this spectrum doesn't approximately match the spectrum given by NDEigensystem as I increase the level of refinement of my simplicial approximation to the K tetrahedron. For a refinement level of 20 the above Eigenvalues code yields

{1.21463*10^-16, 0.0122572, 0.0122572, 0.016151, 0.0318139, 0.0436401}


while for a refinement level of 30 the above code yields

{-1.17871*10^-16, 0.00643495, 0.00643495, 0.00851534, 0.0168769,0.0231838}.


As one can see the ratios of the lowest eigenvalues were are not even close to the ratio of the eigenvalues produced by NDEigensystem.

This is because Arnoldi is the finding eigenvalues which correspond to eigenvectors which do not vanish on the boundary of my discretized tetrahedron. Is there a simple way in Mathematica to find the approximate eigenvalues of a matrix whose corresponding eigenvectors satisfy some boundary condition? In this case that condition would be that the eigenvector vanishes on the boundary/vertices of my discretized K tetrahedron. Before anyone asks I know for sure that my discretized Laplacian is correct because if I diagonalize it using the known analytical eigenfunctions of the K tetrahedron I get even more accurate results then NDEigensystem.

Thanks I look forward to your help.

I can make my situation more clear. I have a sparse symmetric matrix. I only want to find eigenvectors which satisfy a certain boundary condition which takes the form of the the eigenvector having some of elements fixed to zero. The general form of this eigenvector is expressed below

eigenvector = Table[x1[aa], {aa, 1, Length[vertices]}];
Table[eigenvector[[PositionOfBoundaryVertices[[ii]]]] = 0, {ii, 1,


Length[PositionOfBoundaryVertices]}]

where x1[aa] is a list of variables which can be any number. Does anyone know how to make Mathematica find a list of eigenvectors which respect a vanishing boundary condition as is illustrated in the above line of code? If Mathematica can't do it natively does anyone know a package or other eigenvalue finder which does have this feature which allows you to set boundary conditions?

Thanks

• This will be my one and only bump. – Daniel Berkowitz 2 days ago
• What do you mean by "I have a matrix representation of a Laplacian defined inside and on the boundary of a K tetrahedron. "? Have you already imposed the required b.c. in Laplace? – xzczd 2 days ago
• Have you seen this, The Arnoldi method is just EigenSystem[...., Metod->Arnoldi] have a look at how the boundary conditions are dealt with in that post. – user21 1 hour ago