public abstract class OneParticleKernel extends java.lang.Object
This class is abstract and doesn't provide the actual kernel function; this is left to subclasses. Rather, this class provides conversion routines from the kernel function to matrix elements of the operator, and for approximately finding its spectral data.
To that end, the following orthonormal system of piecewise constant bumps is used as a basis: \[ \varphi_j (x) = \begin{cases} h^{-1/2} \quad & \text{if } -R + j h < x < -R+(j+1)h , \\ 0 & \text{otherwise} , \end{cases} \] with \(j=0,\ldots,N-1\), where \(R>0\) is a given "cutoff", \(N\) the number of basis elements, and \(h=2R/N\). All approximation results for the eigenvectors, the spectrum, etc. of the operator will depend on these approximation parameters \(R\) and \(N\).
Constructor and Description |
---|
OneParticleKernel() |
Modifier and Type | Method and Description |
---|---|
RealMatrix |
asRealMatrix(int n,
double cutoff)
Compute a matrix approximation of this operator, in the basis described above.
|
protected void |
checkPlausibility(EigenDecomposition ed,
int n)
Check whether an eigen-decomposition of this operator is plausible,
namely, whether its lowest eigenfunction decays at the end of the interval \([-R,R]\).
|
void |
disableEVCheck()
Disable the plausibility check of decaying eigenfunctions for this kernel.
|
EigenDecomposition |
findEigendec(int n,
double cutoff)
Compute an approximate eigen-decomposition of this operator, in the basis described above.
|
double |
findLowestEigenvalue(int n,
double cutoff)
Approximate the lowest eigenvalue of this operator, using the basis described above.
|
RealVector |
findLowestEigenvector(int n,
double cutoff)
Approximate the eigenfunction for the lowest eigenvalue of this operator, in the basis described above.
|
double[] |
findSpectrum(int n,
double cutoff)
Approximate the spectrum of this operator, in the basis described above.
|
abstract double |
kernelValue(double theta,
double eta)
Evaluates the kernel \( K(\theta,\eta) \) at a given position \( \theta,\eta \).
|
protected double |
matrixElement(int i,
int j,
int n,
double cutoff)
Retrieve the matrix element of this kernel between two basis vectors.
|
public OneParticleKernel()
public RealMatrix asRealMatrix(int n, double cutoff)
n
- number of basis vectorscutoff
- the "cutoff" \(R\)protected void checkPlausibility(EigenDecomposition ed, int n)
ed
- the eigen-decomposition to verifyn
- number of basis vectorsjava.lang.RuntimeException
- if the matrix has complex eigenvaluesjava.lang.RuntimeException
- if the lowest eigenfunction does not decaydisableEVCheck()
,
findEigendec(int, double)
public void disableEVCheck()
checkPlausibility(org.apache.commons.math3.linear.EigenDecomposition, int)
will then be disabled for all method calls.public EigenDecomposition findEigendec(int n, double cutoff)
n
- number of basis vectorscutoff
- the "cutoff" \(R\)public double findLowestEigenvalue(int n, double cutoff)
n
- number of basis vectorscutoff
- the "cutoff" \(R\)public RealVector findLowestEigenvector(int n, double cutoff)
n
- number of basis vectorscutoff
- the "cutoff" \(R\)public double[] findSpectrum(int n, double cutoff)
n
- number of basis vectorscutoff
- the "cutoff" \(R\)public abstract double kernelValue(double theta, double eta)
theta
- first argument of the kerneleta
- second argument of the kernelprotected double matrixElement(int i, int j, int n, double cutoff)
i
- index of the first basis vectorj
- index of the second basis vectorn
- number of basis vectorscutoff
- the "cutoff" \(R\)