Package com.polytechnik.utils
Class EVXData
java.lang.Object
com.polytechnik.utils.EVXData
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionEVXData
(int neq, double wL, double sL, double[] psiL, double wH, double sH, double[] psiH, double[] psi0, double[] ev, double[] psik_at_x0, double s0, double o_o, double x0) -
Method Summary
Modifier and TypeMethodDescriptionprivate static EVXData
_getEVXDataFromEVStates
(int n, double[] evS, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M, double x0) static double[]
convertMatrFromBtoQ_Basis
(int n, double[] matrB, double[] eVB, double[] G) Given b_i=\sum_k eVB_{ik} Q_k and <b_i b_j>=1, <Q_k Q_l>=G_{lk}, then Q_k = \sum_l <Q_k Q_l> eVB_lk and given a matrix matrB=<b_i|f|b_j> the matrix <Q_k|f|Q_s> = \sum_{l,i,j,m} G_{kl} eVB_il <b_i|f|b_j> eVB_jm G_{ms}.static double[]
convertMatrFromQtoB_Basis
(int n, double[] matrQ, double[] eVB) Calculate eV matrQ eV^T.static double[]
convertMatrFromQtoB_Basis
(int n, double[] matrQ, double[] basis, int nd, int basis_offset) Transorm quadratic form matrix to new basis.static double[]
convertPsiFromBtoQ_Basis
(int n, double[] psiB, double[] eVB) static double[]
convertPsiFromBtoQ_Basis
(int nb, double[] psiB, int nq, double[] basis, int basis_offset) Calculate l=0..nq-1: psiQ[l]=sum_{k=0..nb-1} psiB[k]*basis[l+k*nq+basis_offset]static double[]
convertPsiFromQtoB_Basis
(double[] psiQ, double[] eVB, int nd, int basis_offset, double[] QQt, int ldQQ) Calculates eVB (ndxldQQ) x QQT (ldQQxldQQ) x psiQ.static double[]
convertPsiFromQtoB_Basis
(int n, double[] psiQ, double[] eVB, double[] QQt) Calculate eVB G psiQ.static double[]
getBasisABProjections
(int n, double[] basisA, double[] QQ, double[] basisB) Calculate basisA QQ basisB^T.double[]
Return all eigenvalues.static EVXData
A warapper to convertLebesgueQuadratureWithEVData
toEVXData
object.static EVXData
getEVXDataFromQQ
(int n, double[] QQf, double[] QQa, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M) Calculate EVXData from two matrices.static EVXData
getEVXDataFromQQfDiagQQa
(int n, double[] QQf, double[] QQa, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M) Calculate EVXData from two matrices, assuming the QQa is diagonal.double[]
getFPsi
(double[] FQQ) Calculates <psik|FQQ|psik> for all eigenvectors.double
getFPsi
(int ind_lev, double[] FQQ) Return a single diagonal matrix element <psi_{ind_lev}|FQQ|psi_{ind_lev}>.double
getFPsiPsi
(int ind_lev, double[] psi, double[] FQQ) Calculates <psi_{ind_lev}|FQQ|psi> for a given eigenvectorind_lev
and wavefunction |psi>.double
getFPsiPsi
(int i, int j, double[] FQQ) Calculates <psi_i|FQQ|psi_j>.double[]
getLambdaFPsi
(double[] FQQ) Return lambda[k]*<psik|FQQ|psik> for all eigenvectors.static double[]
getMSign
(double[] a) Make the highest order coefficient of sign=1.static double[]
getMSign
(double[] a, double sign) Make the highest order coefficient of specific sign.double[]
getPsi
(int ind_lev) Return given eigenvector.double[]
getPsiAt
(double[] Qbasis_distribution) Calculate all eigenvectors at given distribution of basis functions.double[]
getPsiAveraged
(double[] QQ, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M) Calculates <psik|QQ|1>.static double[]
getPsiFromBasis
(int ind, double[] basis, int n) Extract psi from basis.static double[]
getPsiFromBasis
(int ind, double[] basis, int n, int basis_offset) Extract psi from basis.double
getRNat
(double[] Qbasis_distribution) Calculate RN interpolation at given distribution of basis functions.static double[]
getSymEVDiagT
(int n, double[] QQv, double[] QQt, EVSolver MEV) Solve generalised eigenvalues problem, assuming QQt is diagonal.static void
matchEVXData
(EVXData a, EVXData b, boolean flag_psicheck, boolean flag_check_valuesAt_x0, double eps) static void
matchEVXData
(EVXData a, EVXData b, boolean flag_psicheck, double eps) static void
matchEVXData
(EVXData a, EVXData b, double eps) static void
test_orthogonality
(String txt, int n, double[] basis, double[] QQi, double[] QQt, double eps) Test orthogonality unit test.
-
Field Details
-
sL
public final double sL -
sH
public final double sH -
wL
public final double wL -
wH
public final double wH -
s0
public final double s0 -
o_o
public final double o_o -
x0
public final double x0 -
psiL
public final double[] psiL -
psiH
public final double[] psiH -
psi0
public final double[] psi0 -
ev
public final double[] ev -
psik_at_x0
public final double[] psik_at_x0 -
neq
public final int neq
-
-
Constructor Details
-
EVXData
public EVXData(int neq, double wL, double sL, double[] psiL, double wH, double sH, double[] psiH, double[] psi0, double[] ev, double[] psik_at_x0, double s0, double o_o, double x0)
-
-
Method Details
-
getPsi
public double[] getPsi(int ind_lev) Return given eigenvector. -
getEValues
public double[] getEValues()Return all eigenvalues.- See Also:
-
getFPsi
public double getFPsi(int ind_lev, double[] FQQ) Return a single diagonal matrix element <psi_{ind_lev}|FQQ|psi_{ind_lev}>.- Returns:
- FQQ diagonal matrix element.
-
getFPsi
public double[] getFPsi(double[] FQQ) Calculates <psik|FQQ|psik> for all eigenvectors.- Parameters:
FQQ
- The matrix.- Returns:
- FQQ diagonal matrix elements.
-
getLambdaFPsi
public double[] getLambdaFPsi(double[] FQQ) Return lambda[k]*<psik|FQQ|psik> for all eigenvectors.- Parameters:
FQQ
- The matrix.- Returns:
- FQQ diagonal matrix elements multiplied by eigenvalues.
-
getFPsiPsi
public double getFPsiPsi(int ind_lev, double[] psi, double[] FQQ) Calculates <psi_{ind_lev}|FQQ|psi> for a given eigenvectorind_lev
and wavefunction |psi>. -
getFPsiPsi
public double getFPsiPsi(int i, int j, double[] FQQ) Calculates <psi_i|FQQ|psi_j>.- Returns:
- A single matrix element.
-
getPsiAt
public double[] getPsiAt(double[] Qbasis_distribution) Calculate all eigenvectors at given distribution of basis functions. Regular values aregetPsiAt(M.B.getX0Moments(this.neq,x))
.- See Also:
-
getRNat
public double getRNat(double[] Qbasis_distribution) Calculate RN interpolation at given distribution of basis functions. Regular RN interpolation isgetRNat(M.B.getX0Moments(this.neq,x))
.- See Also:
-
getPsiAveraged
public double[] getPsiAveraged(double[] QQ, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M) Calculates <psik|QQ|1>.- See Also:
-
getMSign
public static double[] getMSign(double[] a) Make the highest order coefficient of sign=1. Used for unit tests to match eigenvectors within +- sign. -
getMSign
public static double[] getMSign(double[] a, double sign) Make the highest order coefficient of specific sign. Used for unit tests to match eigenvectors within +- sign. -
test_orthogonality
public static void test_orthogonality(String txt, int n, double[] basis, double[] QQi, double[] QQt, double eps) Test orthogonality unit test. -
matchEVXData
-
matchEVXData
-
matchEVXData
-
getEVXDataFromLebesgueQuadrature
A warapper to convertLebesgueQuadratureWithEVData
toEVXData
object. -
getEVXDataFromQQ
public static EVXData getEVXDataFromQQ(int n, double[] QQf, double[] QQa, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M) Calculate EVXData from two matrices. -
getEVXDataFromQQfDiagQQa
public static EVXData getEVXDataFromQQfDiagQQa(int n, double[] QQf, double[] QQa, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M) Calculate EVXData from two matrices, assuming the QQa is diagonal. -
_getEVXDataFromEVStates
private static EVXData _getEVXDataFromEVStates(int n, double[] evS, OrthogonalPolynomialsBasisFunctionsCalculatable<? extends BasisFunctionsCalculatable> M, double x0) -
getPsiFromBasis
public static double[] getPsiFromBasis(int ind, double[] basis, int n) Extract psi from basis. The basis is n eigenvalues, followed by n eigenvectors. -
getPsiFromBasis
public static double[] getPsiFromBasis(int ind, double[] basis, int n, int basis_offset) Extract psi from basis. Eigenvectors start at given offset, n elements each. -
convertMatrFromBtoQ_Basis
public static double[] convertMatrFromBtoQ_Basis(int n, double[] matrB, double[] eVB, double[] G) Given b_i=\sum_k eVB_{ik} Q_k and <b_i b_j>=1, <Q_k Q_l>=G_{lk}, then Q_k = \sum_l <Q_k Q_l> eVB_lk and given a matrix matrB=<b_i|f|b_j> the matrix <Q_k|f|Q_s> = \sum_{l,i,j,m} G_{kl} eVB_il <b_i|f|b_j> eVB_jm G_{ms}. The method calculates G eV^T B eV G^T.- Parameters:
n
- Basis dimension.matrB
- The matrix in B basis.eVB
- Conversion of Q basis to B basis. An array of n+n*n elements, firts n elements are eigenvalues (ignored) then n eigenvectors follow.G
- Gram matrix in Q basis.- Returns:
- The matrix converted to Q basis.
-
convertMatrFromQtoB_Basis
public static double[] convertMatrFromQtoB_Basis(int n, double[] matrQ, double[] eVB) Calculate eV matrQ eV^T.- Parameters:
n
- Basis dimension.matrQ
- The matrix in Q basis.eVB
- Conversion of Q basis to B basis. An array of n+n*n elements, firts n elements are eigenvalues (ignored) then n eigenvectors follow.- Returns:
- The matrix converted to B basis.
-
convertMatrFromQtoB_Basis
public static double[] convertMatrFromQtoB_Basis(int n, double[] matrQ, double[] basis, int nd, int basis_offset) Transorm quadratic form matrix to new basis.- Parameters:
n
- Original basis dimesion.matrQ
- Matrix in original basis, n x n matrix lD=n.basis
- New basis, nd x n matrix, lD=n, possible data offset basis_offset.nd
- New basis dimension.basis_offset
- Offset of the baisis.- Returns:
- Output, nd x nd matrix, res=basis x matrQ x basis^T.
-
convertPsiFromQtoB_Basis
public static double[] convertPsiFromQtoB_Basis(double[] psiQ, double[] eVB, int nd, int basis_offset, double[] QQt, int ldQQ) Calculates eVB (ndxldQQ) x QQT (ldQQxldQQ) x psiQ. -
convertPsiFromQtoB_Basis
public static double[] convertPsiFromQtoB_Basis(int n, double[] psiQ, double[] eVB, double[] QQt) Calculate eVB G psiQ. -
convertPsiFromBtoQ_Basis
public static double[] convertPsiFromBtoQ_Basis(int n, double[] psiB, double[] eVB) -
convertPsiFromBtoQ_Basis
public static double[] convertPsiFromBtoQ_Basis(int nb, double[] psiB, int nq, double[] basis, int basis_offset) Calculate l=0..nq-1: psiQ[l]=sum_{k=0..nb-1} psiB[k]*basis[l+k*nq+basis_offset] -
getBasisABProjections
public static double[] getBasisABProjections(int n, double[] basisA, double[] QQ, double[] basisB) Calculate basisA QQ basisB^T.- Returns:
- matrix[i*n+j]= <psiA[i]|QQ|psiB[j]>
-
getSymEVDiagT
Solve generalised eigenvalues problem, assuming QQt is diagonal.
-