Class TMatr

java.lang.Object
com.polytechnik.utils.TMatr

public class TMatr extends Object
Simple (and inefficient) matrix multiplication and linear systems. Use for testing only.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private 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_j
    static 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
    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_j
    static 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[]
     
    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
    main(String[] args)
     
    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
    test_Mul(Random r, double eps)
     
    (package private) static void
    test_mulMatrices(Random r, double eps)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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

      public 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

      static double[] getRandomVector(int nels, Random r)
    • getRandomVector

      static double[] getRandomVector(int nels, Random r, double mul, double add)
    • test_mulMatrices

      static void test_mulMatrices(Random r, double eps)
    • test_Mul

      static void test_Mul(Random r, double eps)
    • main

      public static void main(String[] args)