Package com.polytechnik.utils
Class TMatr
java.lang.Object
com.polytechnik.utils.TMatr
Simple (and inefficient) matrix multiplication and linear systems.
Use for testing only.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static double[]
_selectHermitianPart
(int n, double[] QQ, boolean flag_antiHermitian) Calculates QQ+QQ^T or QQ-QQ^T depending on flag_antiHermitian.static double[]
dyadicMatrix
(double[] a, double[] b) Calculates a[i]*b[j] matrix.static double[]
expandOverLowerDiagBasis
(double[] p, double[][] basis) static double
getAMatrA
(double[] A, double[] matr, int nm) Calculates A_i matr_ij A_jstatic double
getAMatrA
(int n, double[] A, double[] matr, int nm) static double
getAMatrA
(int n, double[] A, int A_offset, double[] matr, int nm) static double
getAMatrB
(double[] A, double[] B, double[] matr, int nm) static double
getAMatrB
(int n, double[] A, double[] B, double[] matr, int nm) static double
getAMatrB
(int n, double[] A, int A_offset, double[] B, int B_offset, double[] matr, int nm) static double
getAMatrB
(int na, double[] A, int A_offset, int nb, double[] B, int B_offset, double[] matr, int nm) private static double
getAMatrB
(int na, double[] A, int A_offset, int nb, double[] B, int B_offset, double[] matr, int nm, int off_matr) Calculates A_i matr_ij B_j(package private) static double[]
getConstArray
(int n, double c) static double[]
getDiagMatrix
(double[] v) (package private) static double[]
getDiagMatrix
(int n, double[] v) static double[]
getMatr_x_A
(int n, double[] matr, double[] A) Calculates matr_ij A_jstatic double[]
getMatrixDiagElements
(int n, double[] Matrix) static double[]
getMatrixDiagElementsInBasis
(int n, double[] basis, double[] Matrix) private static double[]
getMatrixDiagElementsInBasis
(int n, double[] basis, int basis_offset, double[] Matrix) private static double[]
getMatrNoTrans
(int n, double[] matr, int nmA) Get matrix copy, according to leading dimension.private static double[]
getMatrNoTrans
(int n, double[] matr, int nmA, int off) Get matrix copy, according to leading dimension and offset.static double[]
getMatrTrans
(int n, double[] matr) Get matrix copy, according to leading dimension, then transponse it.static double[]
getMatrTrans
(int nr, int nc, double[] matr) Get matrix copy, according to leading dimension and offset, then transponse it.static double[]
getQQaa
(double[] a) Calculates a[i]*a[j] matrix.static double[]
getQQab
(int n, double[] a, double[] b) Calculates 0.5*(a[i]*b[j]+b[i]*a[j]) matrix.(package private) static double[]
getRandomVector
(int nels, Random r) (package private) static double[]
getRandomVector
(int nels, Random r, double mul, double add) static double
getSpurM
(int n, double[] matr) Calculates spur of matrix.static double
getSpurMM
(int n, double[] A, double[] B) Calculates the spur of A*B.static double
getSpurMMM
(int n, double[] A, double[] B, double[] C) Calculates the spur of A*B*C.static double[]
getUnitMatrix
(int n) static double[]
getVAB
(double[] a, double[] b) Calculates c[i]=a[i]*b[i].(package private) static double[]
getVAB
(int n, double[] a, double[] b) Calculates c[i]=a[i]*b[i].static double[]
getVectorScaled
(double[] pin, double w) Scale a copy of a vector.static void
static double[]
mul_MA_x_MB
(int sA, double[] A, int s, double[] B, int sB) static double[]
mul_MA_x_MBTrans
(int sA, double[] A, int s, double[] B, int sB) static double[]
mul_MATrans_x_MB
(int sA, double[] A, int s, double[] B, int sB) static double[]
mul_MATrans_x_MBTrans
(int sA, double[] A, int s, double[] B, int sB) static double[]
mulMatrices
(int n, double[][] matrs) Multiply several matrices res=matrs[0] x matrs[1] x matrs[2] ...static double[]
mulMM
(int n, double[] matrA, double[] matrB) Multiply 2 matrices.static double[]
mulMMM
(int n, double[] A, double[] B, double[] C) Multiply 3 matrices.static void
multiply_MA_x_MB
(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\(\sum_{k=0}^{k=s-1} A[i*s+k]*B[k*sB+j] ; i=[0\dots sA-1], j=[0\dots sB-1]\); A: sA x s matrix, B: s x sB matrix, r: sA x sB matrix.(package private) static void
multiply_MA_x_MB
(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[i*ldA+k]*B[k*ldB+j] ; i=[0..sA-1], j=[0..sB-1].static void
multiply_MA_x_MBTrans
(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\(\sum_{k=0}^{k=s-1} A[i*s+k]*B[j*s+k] ; i=[0\dots sA-1], j=[0\dots sB-1]\); A: sA x s matrix, B: sB x s matrix, r: sA x sB matrix.(package private) static void
multiply_MA_x_MBTrans
(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[i*ldA+k]*B[j*ldB+k] ; i=[0..sA-1], j=[0..sB-1].static void
multiply_MATrans_x_MB
(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\( \sum_{k=0}^{k=s-1} A[k*sA+i]*B[k*sB+j] ; i=[0\dots sA-1], j=[0\dots sB-1] \); A: s x sA matrix, B: s x sB matrix, r: sA x sB matrix.(package private) static void
multiply_MATrans_x_MB
(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[k*ldA+i]*B[k*ldB+j] ; i=[0..sA-1], j=[0..sB-1].static void
multiply_MATrans_x_MBTrans
(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\( \sum_{k=0}^{k=s-1} A[k*sA+i]*B[j*s+k] ; i=[0\dots sA-1], j=[0\dots sB-1] \); A: s x sA matrix, B: sB x s matrix, r: sA x sB matrix.(package private) static void
multiply_MATrans_x_MBTrans
(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[k*ldA+i]*B[j*ldB+k] ; i=[0..sA-1], j=[0..sB-1].static double
mulV2V
(double[] a, double[] b) (package private) static double
mulV2Vn1
(double[] a, double[] b) static double
mulVV
(double[] a, double[] b) Scalar product of two arrays of equal dimension.static double
mulVV
(int n, double[] a, int off_a, double[] b, int off_b) static double
mulVVn
(int n, double[] a, double[] b) static double
mulVVn1
(double[] a, double[] b) Scalar product of two arrays of equal dimension, the number of elements is taken from first array dimension: sum a[k]*b[k] ; k=0 to the length of a.static double
mulVVV
(double[] a, double[] b, double[] c) (package private) static double
mulVVV
(int n, double[] a, int off_a, double[] b, int off_b, double[] c, int off_c) static double[]
scaleVectorInPlace
(double[] v, double w) Scale a vector and return it.private static double[]
scaleVectorInPlace
(int n, double[] v, double w) Scale a vector and return it.static double[]
selectAntiHermitianPartInPlace
(int n, double[] QQ) Calculates 0.5*(QQ-QQ^T).static double[]
selectHermitianPartInPlace
(int n, double[] QQ) Calculates 0.5*(QQ+QQ^T).static double[]
squareArrayElements
(double[] m) static double[]
sumaAbB
(double a, double[] A, double b, double[] B) private static double[]
sumaAbB
(int n, double a, double[] A, double b, double[] B) (package private) static double[]
sumAB
(int n, double[] A, double[] B) static double[]
sumAcB
(double[] A, double c, double[] B) private static double[]
sumAcB
(int n, double[] A, double c, double[] B) static double[]
sumAcBdE
(double[] A, double c, double[] B, double d, double[] E) static double
sumElements
(double[] pin) private static double
sumElements
(int n, double[] pin) static void
sumP1
(double[] res, double[] pin, double w) (package private) static void
sumP1
(double[] res, double[] pin, int nels, double w) (package private) static void
sumP1
(double[] res, double[] pin, int pin_offset, int nels, double w) (package private) static void
(package private) static void
test_mulMatrices
(Random r, double eps)
-
Constructor Details
-
TMatr
public TMatr()
-
-
Method Details
-
sumElements
public static double sumElements(double[] pin) -
sumElements
private static double sumElements(int n, double[] pin) -
squareArrayElements
public static double[] squareArrayElements(double[] m) -
expandOverLowerDiagBasis
public static double[] expandOverLowerDiagBasis(double[] p, double[][] basis) -
sumP1
public static void sumP1(double[] res, double[] pin, double w) -
sumP1
static void sumP1(double[] res, double[] pin, int nels, double w) -
sumP1
static void sumP1(double[] res, double[] pin, int pin_offset, int nels, double w) -
sumAB
static double[] sumAB(int n, double[] A, double[] B) -
sumAcBdE
public static double[] sumAcBdE(double[] A, double c, double[] B, double d, double[] E) -
sumAcB
public static double[] sumAcB(double[] A, double c, double[] B) -
sumAcB
private static double[] sumAcB(int n, double[] A, double c, double[] B) -
sumaAbB
public static double[] sumaAbB(double a, double[] A, double b, double[] B) -
sumaAbB
private static double[] sumaAbB(int n, double a, double[] A, double b, double[] B) -
scaleVectorInPlace
private static double[] scaleVectorInPlace(int n, double[] v, double w) Scale a vector and return it. In-place calculation.- Returns:
- the argument
v
scaled.
-
scaleVectorInPlace
public static double[] scaleVectorInPlace(double[] v, double w) Scale a vector and return it. In-place calculation.- Returns:
- the argument
v
scaled.
-
getVectorScaled
public static double[] getVectorScaled(double[] pin, double w) Scale a copy of a vector. The argument is intact.- Returns:
- scaled input vector.
-
mulVV
public static double mulVV(double[] a, double[] b) Scalar product of two arrays of equal dimension. -
mulVVn1
public static double mulVVn1(double[] a, double[] b) Scalar product of two arrays of equal dimension, the number of elements is taken from first array dimension: sum a[k]*b[k] ; k=0 to the length of a. -
getSpurM
public static double getSpurM(int n, double[] matr) Calculates spur of matrix. -
getSpurMMM
public static double getSpurMMM(int n, double[] A, double[] B, double[] C) Calculates the spur of A*B*C. -
getSpurMM
public static double getSpurMM(int n, double[] A, double[] B) Calculates the spur of A*B. -
getAMatrB
public static double getAMatrB(double[] A, double[] B, double[] matr, int nm) -
getAMatrB
public static double getAMatrB(int n, double[] A, double[] B, double[] matr, int nm) -
getAMatrB
public static double getAMatrB(int n, double[] A, int A_offset, double[] B, int B_offset, double[] matr, int nm) -
getAMatrB
public static double getAMatrB(int na, double[] A, int A_offset, int nb, double[] B, int B_offset, double[] matr, int nm) -
getAMatrB
private static double getAMatrB(int na, double[] A, int A_offset, int nb, double[] B, int B_offset, double[] matr, int nm, int off_matr) Calculates A_i matr_ij B_j -
getAMatrA
public static double getAMatrA(double[] A, double[] matr, int nm) Calculates A_i matr_ij A_j -
getAMatrA
public static double getAMatrA(int n, double[] A, double[] matr, int nm) -
getAMatrA
public static double getAMatrA(int n, double[] A, int A_offset, double[] matr, int nm) -
getMatr_x_A
public static double[] getMatr_x_A(int n, double[] matr, double[] A) Calculates matr_ij A_j -
mulVV
public static double mulVV(int n, double[] a, int off_a, double[] b, int off_b) -
mulVVn
public static double mulVVn(int n, double[] a, double[] b) - Returns:
- The sum a[k]*b[k]; k=0 to n-1.
-
mulVVV
public static double mulVVV(double[] a, double[] b, double[] c) - Returns:
- The sum a[k]*b[k]*c[k].
-
mulVVV
static double mulVVV(int n, double[] a, int off_a, double[] b, int off_b, double[] c, int off_c) -
mulV2V
public static double mulV2V(double[] a, double[] b) - Returns:
- The sum a[k]*a[k]*b[k].
-
mulV2Vn1
static double mulV2Vn1(double[] a, double[] b) - Returns:
- The sum a[k]*a[k]*b[k]; k=0 to the length of a.
-
mulMM
public static double[] mulMM(int n, double[] matrA, double[] matrB) Multiply 2 matrices. -
mulMMM
public static double[] mulMMM(int n, double[] A, double[] B, double[] C) Multiply 3 matrices. -
getMatrTrans
public static double[] getMatrTrans(int n, double[] matr) Get matrix copy, according to leading dimension, then transponse it. -
getMatrTrans
public static double[] getMatrTrans(int nr, int nc, double[] matr) Get matrix copy, according to leading dimension and offset, then transponse it. -
getMatrNoTrans
private static double[] getMatrNoTrans(int n, double[] matr, int nmA) Get matrix copy, according to leading dimension. -
getMatrNoTrans
private static double[] getMatrNoTrans(int n, double[] matr, int nmA, int off) Get matrix copy, according to leading dimension and offset. -
mulMatrices
public static double[] mulMatrices(int n, double[][] matrs) Multiply several matrices res=matrs[0] x matrs[1] x matrs[2] ... Used for unit tests. -
mul_MA_x_MB
public static double[] mul_MA_x_MB(int sA, double[] A, int s, double[] B, int sB) -
multiply_MA_x_MB
public static void multiply_MA_x_MB(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\(\sum_{k=0}^{k=s-1} A[i*s+k]*B[k*sB+j] ; i=[0\dots sA-1], j=[0\dots sB-1]\); A: sA x s matrix, B: s x sB matrix, r: sA x sB matrix. -
multiply_MA_x_MB
static void multiply_MA_x_MB(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[i*ldA+k]*B[k*ldB+j] ; i=[0..sA-1], j=[0..sB-1]. A: sA x s matrix, B: s x sB matrix, r: sA x sB matrix, ld(r)=sB. -
mul_MA_x_MBTrans
public static double[] mul_MA_x_MBTrans(int sA, double[] A, int s, double[] B, int sB) -
multiply_MA_x_MBTrans
public static void multiply_MA_x_MBTrans(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\(\sum_{k=0}^{k=s-1} A[i*s+k]*B[j*s+k] ; i=[0\dots sA-1], j=[0\dots sB-1]\); A: sA x s matrix, B: sB x s matrix, r: sA x sB matrix. -
multiply_MA_x_MBTrans
static void multiply_MA_x_MBTrans(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[i*ldA+k]*B[j*ldB+k] ; i=[0..sA-1], j=[0..sB-1]. A: sA x s matrix, B: sB x s matrix, r: sA x sB matrix, ld(r)=sB. -
mul_MATrans_x_MB
public static double[] mul_MATrans_x_MB(int sA, double[] A, int s, double[] B, int sB) -
multiply_MATrans_x_MB
public static void multiply_MATrans_x_MB(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\( \sum_{k=0}^{k=s-1} A[k*sA+i]*B[k*sB+j] ; i=[0\dots sA-1], j=[0\dots sB-1] \); A: s x sA matrix, B: s x sB matrix, r: sA x sB matrix. -
multiply_MATrans_x_MB
static void multiply_MATrans_x_MB(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[k*ldA+i]*B[k*ldB+j] ; i=[0..sA-1], j=[0..sB-1]. A: s x sA matrix, B: s x sB matrix, r: sA x sB matrix, ld(r)=sB. -
mul_MATrans_x_MBTrans
public static double[] mul_MATrans_x_MBTrans(int sA, double[] A, int s, double[] B, int sB) -
multiply_MATrans_x_MBTrans
public static void multiply_MATrans_x_MBTrans(double[] r, int sA, double[] A, int s, double[] B, int sB) r[i*sB+j]=\( \sum_{k=0}^{k=s-1} A[k*sA+i]*B[j*s+k] ; i=[0\dots sA-1], j=[0\dots sB-1] \); A: s x sA matrix, B: sB x s matrix, r: sA x sB matrix. -
multiply_MATrans_x_MBTrans
static void multiply_MATrans_x_MBTrans(double[] r, int sA, double[] A, int ldA, int off_A, int s, double[] B, int sB, int ldB, int off_B) r[i*sB+j]=\sum_{k=0}^{k=s-1} A[k*ldA+i]*B[j*ldB+k] ; i=[0..sA-1], j=[0..sB-1]. A: s x sA matrix, B: sB x s matrix, r: sA x sB matrix, ld(r)=sB. -
selectHermitianPartInPlace
public static double[] selectHermitianPartInPlace(int n, double[] QQ) Calculates 0.5*(QQ+QQ^T). In-place calculation.- Returns:
- the argument
QQ
, updated to hermitian part.
-
selectAntiHermitianPartInPlace
public static double[] selectAntiHermitianPartInPlace(int n, double[] QQ) Calculates 0.5*(QQ-QQ^T). In-place calculation.- Returns:
- the argument
QQ
, updated to anti-hemitian part.
-
_selectHermitianPart
private static double[] _selectHermitianPart(int n, double[] QQ, boolean flag_antiHermitian) Calculates QQ+QQ^T or QQ-QQ^T depending on flag_antiHermitian. In-place calculation. No 1/2 factor used!- Returns:
- the argument
QQ
, updated to hermitian or anti-hemitian part.
-
getQQaa
public static double[] getQQaa(double[] a) Calculates a[i]*a[j] matrix. -
getQQab
public static double[] getQQab(int n, double[] a, double[] b) Calculates 0.5*(a[i]*b[j]+b[i]*a[j]) matrix. -
dyadicMatrix
public static double[] dyadicMatrix(double[] a, double[] b) Calculates a[i]*b[j] matrix. -
getVAB
static double[] getVAB(int n, double[] a, double[] b) Calculates c[i]=a[i]*b[i]. -
getVAB
public static double[] getVAB(double[] a, double[] b) Calculates c[i]=a[i]*b[i]. -
getConstArray
static double[] getConstArray(int n, double c) -
getUnitMatrix
public static double[] getUnitMatrix(int n) -
getDiagMatrix
public static double[] getDiagMatrix(double[] v) -
getDiagMatrix
static double[] getDiagMatrix(int n, double[] v) -
getMatrixDiagElements
public static double[] getMatrixDiagElements(int n, double[] Matrix) -
getMatrixDiagElementsInBasis
public static double[] getMatrixDiagElementsInBasis(int n, double[] basis, double[] Matrix) -
getMatrixDiagElementsInBasis
private static double[] getMatrixDiagElementsInBasis(int n, double[] basis, int basis_offset, double[] Matrix) -
getRandomVector
-
getRandomVector
-
test_mulMatrices
-
test_Mul
-
main
-