HILA
Loading...
Searching...
No Matches
antisymmetric< N, radix > Class Template Reference

#include <representations.h>

Inheritance diagram for antisymmetric< N, radix >:
Collaboration diagram for antisymmetric< N, radix >:

Public Types

using base_type = hila::arithmetic_type< radix >
 The underlying arithmetic type of the matrix.
 
using sun = SU< N, radix >
 The SU(N) type the adjoint matrix is constructed of.
 

Public Member Functions

auto abs () const
 Returns absolute value of Matrix.
 
Rtype adjoint () const
 Adjoint of matrix.
 
 antisymmetric ()=default
 default constructor
 
template<typename scalart , std::enable_if_t< hila::is_arithmetic< scalart >::value, int > = 0>
 antisymmetric (const antisymmetric< N, scalart > m)
 Copy constructor.
 
template<typename scalart , std::enable_if_t< hila::is_arithmetic< scalart >::value, int > = 0>
 antisymmetric (const scalart m)
 Square matrix constructor from scalar.
 
 antisymmetric (const SquareMatrix< size, Complex< radix > > m)
 automatic conversion from SquareMatrix – needed for methods!
 
const Array< n, m, T > & asArray () const
 Cast Matrix to Array.
 
const DiagonalMatrix< n, T > & asDiagonalMatrix () const
 Cast Vector to DiagonalMatrix.
 
Vector< n, T > column (int c) const
 Returns column vector as value at index c.
 
Matrix< n, m, T > conj () const
 Returns complex conjugate of Matrix.
 
Rtype dagger () const
 Hermitian conjugate of matrix.
 
det () const
 determinant function - if matrix size is < 5, use Laplace, otherwise LU
 
det_laplace () const
 Determinant of matrix, using Laplace method.
 
det_lu () const
 following calculate the determinant of a square matrix det() is the generic interface, using laplace for small matrices and LU for large
 
DiagonalMatrix< n, T > diagonal ()
 Return diagonal of square matrix.
 
dot (const Matrix< p, q, S > &rhs) const
 Dot product.
 
e (const int i) const
 Standard array indexing operation for vectors.
 
e (const int i, const int j) const
 Standard array indexing operation for matrices.
 
int eigen_hermitean (DiagonalMatrix< n, Et > &eigenvalues, Matrix_t< n, n, Mt, MT > &eigenvectors, enum hila::sort sorted=hila::sort::unsorted) const
 Calculate eigenvalues and -vectors of an hermitean (or symmetric) matrix.
 
eigen_result< Matrix< n, m, T > > eigen_hermitean (enum hila::sort sorted=hila::sort::unsorted) const
 eigenvalues and -vectors of hermitean/symmetric matrix, alternative interface
 
template<int n, int m, typename T , typename MT >
Matrix_t< n, m, T, MT > exp (const Matrix_t< n, m, T, MT > &mat, const int order=20)
 Calculate exp of a square matrix.
 
const Matrix< n, m, T > & fill (const S rhs)
 Matrix fill.
 
Matrix< n, m, T > & gaussian_random (double width=1.0)
 Fills Matrix with gaussian random elements from gaussian distribution.
 
Matrix< n, m, hila::arithmetic_type< T > > imag () const
 Returns imaginary part of Matrix or Vector.
 
max () const
 Find max of Matrix only for arithmetic types.
 
min () const
 Find min of Matrix only for arithmetic types.
 
hila::type_mul< T, S > mul_trace (const Matrix_t< p, q, S, MT > &rm) const
 Multiply with given matrix and compute trace of result.
 
void mult_by_2x2_left (int p, int q, const Matrix_t< 2, 2, R, Mt > &M)
 Multiply \( n \times m \)-matrix from the left by \( n \times m \) matrix defined by \( 2 \times 2 \) sub matrix.
 
void mult_by_2x2_right (int p, int q, const Matrix_t< 2, 2, R, Mt > &M)
 Multiply \( n \times m \)-matrix from the right by \( n \times m \) matrix defined by \( 2 \times 2 \) sub matrix.
 
hila::arithmetic_type< T > norm () const
 Calculate vector norm - sqrt of squarenorm.
 
bool operator!= (const Matrix< n, m, S > &rhs) const
 Boolean operator != to check if matrices are exactly different.
 
Rt operator* (const Matrix< 1, m, T1 > &A, const Matrix< n, 1, T2 > &B)
 Multiplication operator RowVector * Vector.
 
Rt operator* (const Mt &mat, const S &rhs)
 Multiplication operator Matrix * scalar.
 
Matrix< n, m, R > operator* (const Mt1 &a, const Mt2 &b)
 Multiplication operator.
 
Rt operator* (const S &rhs, const Mt &mat)
 Multiplication operator Scalar * Matrix.
 
Matrix< n, m, T > & operator*= (const DiagonalMatrix< m, S > &rhs)
 Multiply assign operator for DiagonalMatrix to Matrix.
 
Matrix< n, m, T > & operator*= (const Matrix_t< m, p, S, MT > &rhs)
 Multiply assign scalar or matrix.
 
Matrix< n, m, T > & operator*= (const S rhs)
 Multiply assign operator scalar to Matrix.
 
const Matrix< n, m, T > & operator+ () const
 Addition operator.
 
Rtype operator+ (const Matrix< n, m, T > &a, const S &b)
 Addition operator Matrix + scalar.
 
Rtype operator+ (const Mtype1 &a, const Mtype2 &b)
 Addition operator Matrix + Matrix.
 
Rtype operator+ (const S &b, const Matrix< n, m, T > &a)
 Addition operator scalar + Matrix.
 
Matrix< n, m, T > & operator+= (const DiagonalMatrix< n, S > &rhs)
 Addition assign operator for DiagonalMatrix to Matrix.
 
Matrix< n, m, T > & operator+= (const Matrix_t< n, m, S, MT > &rhs)
 Add assign operator Matrix to Matrix.
 
Matrix< n, m, T > & operator+= (const S &rhs)
 Add assign operator scalar to Matrix.
 
Matrix< n, m, T > operator- () const
 Unary operator.
 
Rtype operator- (const Matrix< n, m, T > &a, const S &b)
 Subtraction operator Matrix - scalar.
 
Rtype operator- (const Mtype1 &a, const Mtype2 &b)
 Subtraction operator Matrix - Matrix.
 
Rtype operator- (const S &b, const Matrix< n, m, T > &a)
 Subtraction operator Scalar - Matrix.
 
Matrix< n, m, T > & operator-= (const DiagonalMatrix< n, S > &rhs)
 Subtract assign operator for DiagonalMatrix to Matrix.
 
Matrix< n, m, T > & operator-= (const Matrix_t< n, m, S, MT > &rhs)
 Subtract assign operator Matrix to MAtrix.
 
Matrix< n, m, T > & operator-= (const S rhs)
 Subtract assign operator scalar to Matrix.
 
Rt operator/ (const Mt &mat, const S &rhs)
 Division operator.
 
Matrix< n, m, T > & operator/= (const DiagonalMatrix< m, S > &rhs)
 Divide assign operator for DiagonalMatrix to Matrix.
 
Matrix< n, m, T > & operator/= (const S rhs)
 Divide assign oprator scalar with matrix.
 
template<int n, int m, typename T , typename MT >
std::ostream & operator<< (std::ostream &strm, const Matrix_t< n, m, T, MT > &A)
 Stream operator.
 
template<typename scalart , std::enable_if_t< hila::is_arithmetic< scalart >::value, int > = 0>
antisymmetricoperator= (const antisymmetric< N, scalart > m)
 Needs assignment as well.
 
bool operator== (const Matrix< n, m, S > &rhs) const
 Boolean operator == to determine if two matrices are exactly the same.
 
operator[] (const int i) const
 Indexing operation [] defined only for vectors.
 
Matrix< n, p, R > outer_product (const Matrix< p, q, S > &rhs) const
 Outer product.
 
Matrix< n, m, T > permute (const Vector< N, int > &permutation) const
 Permute elements of vector.
 
Matrix< n, m, T > permute_columns (const Vector< m, int > &permutation) const
 permute columns of Matrix
 
Matrix< n, m, T > permute_rows (const Vector< n, int > &permutation) const
 permute rows of Matrix
 
Matrix< n, m, T > & random ()
 dot with matrix - matrix
 
Matrix< n, m, hila::arithmetic_type< T > > real () const
 Returns real part of Matrix or Vector.
 
void represent (sun &m)
 Project a matrix into the antisymmetric representation.
 
const RowVector< m, T > & row (int r) const
 Return reference to row in a matrix.
 
void set_column (int c, const Vector< n, S > &v)
 get column of a matrix
 
void set_diagonal (const Vector< n, S > &v)
 Set diagonal of square matrix to Vector which is passed to the method.
 
void set_row (int r, const RowVector< m, S > &v)
 Set row of Matrix with RowVector if types are assignable.
 
Matrix< n, m, T > sort (hila::sort order=hila::sort::ascending) const
 Sort method for Vector.
 
Matrix< n, m, T > sort (Vector< N, int > &permutation, hila::sort order=hila::sort::ascending) const
 Sort method for Vector which returns permutation order.
 
hila::arithmetic_type< T > squarenorm () const
 Calculate square norm - sum of squared elements.
 
std::string str (int prec=8, char separator=' ') const
 
svd_result< Matrix< n, m, T > > svd (enum hila::sort sorted=hila::sort::unsorted) const
 svd and svd_pivot - alternative interface
 
int svd (Matrix_t< n, n, Mt, MT > &_U, DiagonalMatrix< n, Et > &_D, Matrix_t< n, n, Mt, MT > &_V, enum hila::sort sorted=hila::sort::unsorted) const
 Singular value decomposition: divide matrix A = U S V*, where U,V unitary and S diagonal matrix of real singular values. Unpivoted Jacobi rotations.
 
int svd_pivot (Matrix_t< n, n, Mt, MT > &_U, DiagonalMatrix< n, Et > &_D, Matrix_t< n, n, Mt, MT > &_V, enum hila::sort sorted=hila::sort::unsorted) const
 Singular value decomposition: divide matrix A = U S V*, where U,V unitary and S diagonal matrix of real singular values. Fully pivoted Jacobi rotations.
 
trace () const
 Computes Trace for Matrix.
 
Rtype transpose () const
 Transpose of matrix.
 
const RowVector< n, T > & transpose () const
 Transpose of vector.
 
const Vector< n, T > & transpose () const
 Transpose of RowVector.
 

Static Public Member Functions

static constexpr int columns ()
 Returns column length.
 
static sun generator (int ng)
 The antisymmetric generator.
 
static constexpr bool is_square ()
 Returns true if matrix is a square matrix.
 
static constexpr bool is_vector ()
 Returns true if Matrix is a vector.
 
static SquareMatrix< N, Complex< radix > > project_force (SquareMatrix< size, Complex< radix > > rforce)
 
static antisymmetric represented_generator_I (int i)
 Return a SU(N) generator (times I) in the antisymmetric representation.
 
static constexpr int rows ()
 Define constant methods rows(), columns() - may be useful in template code.
 

Public Attributes

c [n *m]
 The data as a one dimensional array.
 

Static Public Attributes

static constexpr int size = N * (N - 1) / 2
 Matrix size.
 

Detailed Description

template<int N, typename radix>
class antisymmetric< N, radix >

A matrix in the antisymmetric representation of the SU(N) group

Members antisymmetric.represent(sun m): projects the sU(N) matrix to the antisymmetric representation and replaces this

Class functions: antisymmetric::generator(int i): returns antisymmetric matrices in the fundamental representation antisymmetric::represented_generator_I(int i): returns antisymmetric SU(N) matrices (times I) in the antisymmetric representation antisymmetric::project_force(squarematrix): projects a square matrix the size of an antisymmetric matrix to the SU(N) algebra. This is used to calculate the force of an antisymmetric action term to a derivative of the underlying su(N) group

Definition at line 126 of file representations.h.

Member Function Documentation

◆ abs()

auto Matrix_t< n, m, T, Matrix< n, m, T > >::abs ( ) const
inlineinherited

Returns absolute value of Matrix.

For Matrix<n,m,Complex<T>> case type is changed to Matrix<n,m,T> as expected since absolute value of a complex number is real

Template Parameters
M
Returns
Mtype

Definition at line 1081 of file matrix.h.

◆ adjoint()

Rtype Matrix_t< n, m, T, Matrix< n, m, T > >::adjoint ( ) const
inlineinherited

Adjoint of matrix.

Alias to dagger

Template Parameters
std::conditional<n,Mtype,Matrix<m,n,T>>::type
Returns
Rtype

Definition at line 1069 of file matrix.h.

◆ asArray()

const Array< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::asArray ( ) const
inlineinherited

Cast Matrix to Array.

used for array operations

Returns
Array<n, m, T>&

Definition at line 467 of file matrix.h.

◆ asDiagonalMatrix()

const DiagonalMatrix< n, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::asDiagonalMatrix ( ) const
inlineinherited

Cast Vector to DiagonalMatrix.

Returns
DiagonalMatrix<n,T>

Definition at line 481 of file matrix.h.

◆ column()

Vector< n, T > Matrix_t< n, m, T, Matrix< n, m, T > >::column ( int  c) const
inlineinherited

Returns column vector as value at index c.

M.random();
Vector<n,T> V = M.column(i);
Matrix class which defines matrix operations.
Definition matrix.h:1679
Parameters
cindex of column vector to be returned
Returns
const Vector<n, T>

Definition at line 389 of file matrix.h.

◆ columns()

static constexpr int Matrix_t< n, m, T, Matrix< n, m, T > >::columns ( )
inlinestaticconstexprinherited

Returns column length.

Returns
constexpr int

Definition at line 228 of file matrix.h.

◆ conj()

Matrix< n, m, T > Matrix_t< n, m, T, Matrix< n, m, T > >::conj ( ) const
inlineinherited

Returns complex conjugate of Matrix.

Returns
const Mtype

Definition at line 1036 of file matrix.h.

◆ dagger()

Rtype Matrix_t< n, m, T, Matrix< n, m, T > >::dagger ( ) const
inlineinherited

Hermitian conjugate of matrix.

for square matrix return type is same, for non square it is Matrix<m,n,MyType>

Template Parameters
std::conditional<n,Mtype,Matrix<m,n,T>>::type
Returns
const Rtype

Definition at line 1052 of file matrix.h.

◆ det_laplace()

T Matrix_t< n, m, T, Matrix< n, m, T > >::det_laplace
inherited

Determinant of matrix, using Laplace method.

Defined only for square matrices

For perfomance overloads exist for \( 1 \times 1 \), \( 2 \times 2 \) and \( 3 \times 3 \) matrices.

Parameters
matmatrix to compute determinant for
Returns
T result determinant

Definition at line 1589 of file matrix_linalg.h.

◆ det_lu()

T Matrix_t< n, m, T, Matrix< n, m, T > >::det_lu
inherited

following calculate the determinant of a square matrix det() is the generic interface, using laplace for small matrices and LU for large

Matrix determinant with LU decomposition.

Algorithm: numerical Recipes, 2nd ed. p. 47 ff Works for Real and Complex matrices Defined only for square matrices

Returns
Complex<radix> Determinant

Definition at line 1587 of file matrix_linalg.h.

◆ diagonal()

DiagonalMatrix< n, T > Matrix_t< n, m, T, Matrix< n, m, T > >::diagonal ( )
inlineinherited

Return diagonal of square matrix.

If called for non square matrix the program will throw an error.

DiagonalMatrix<n,T> D = M.diagonal();
Define type DiagonalMatrix<n,T>
Returns
Vector<n, T> returned vector.

Definition at line 430 of file matrix.h.

◆ dot()

R Matrix_t< n, m, T, Matrix< n, m, T > >::dot ( const Matrix< p, q, S > &  rhs) const
inlineinherited

Dot product.

Only works between two Vector objects

.
.
.
V.dot(W); // valid operation
R dot(const Matrix< p, q, S > &rhs) const
Dot product.
Definition matrix.h:1251
.
.
.
V.dot(W); // not valid operation
Template Parameters
pRow length for rhs
qColumn length for rhs
SType for rhs
RGives resulting type of lhs and rhs multiplication
Parameters
rhsVector to compute dot product with
Returns
R Value of dot product

Definition at line 1251 of file matrix.h.

◆ e() [1/2]

T Matrix_t< n, m, T, Matrix< n, m, T > >::e ( const int  i) const
inlineinherited

Standard array indexing operation for vectors.

Accessing singular elements is insufficient, but Vector elements are often quite small.

MyType a = V.e(i) \\ i <= n
Complex definition.
Definition cmplx.h:50
T e(const int i, const int j) const
Standard array indexing operation for matrices.
Definition matrix.h:272
Template Parameters
qNumber of rows
pNumber of columns
Parameters
iIndex
Returns
T

Definition at line 298 of file matrix.h.

◆ e() [2/2]

T Matrix_t< n, m, T, Matrix< n, m, T > >::e ( const int  i,
const int  j 
) const
inlineinherited

Standard array indexing operation for matrices.

Accessing singular elements is insufficient, but Matrix elements are often quite small.

Exammple for matrix:

MyType a = M.e(i,j); \\ i <= n, j <= m
Parameters
iRow index
jColumn index
Returns
T matrix element type

Definition at line 272 of file matrix.h.

◆ eigen_hermitean() [1/2]

int Matrix_t< n, m, T, Matrix< n, m, T > >::eigen_hermitean ( DiagonalMatrix< n, Et > &  E,
Matrix_t< n, n, Mt, MT > &  U,
enum hila::sort  sorted = hila::sort::unsorted 
) const
inherited

Calculate eigenvalues and -vectors of an hermitean (or symmetric) matrix.

Calculate eigenvalues and vectors of an hermitean or real symmetric matrix.

Returns the number of Jacobi iterations, or -1 if did not converge. Arguments will contain eigenvalues and eigenvectors in columns of the "eigenvectors" matrix. Computation is done in double precision despite the input matrix types.

Parameters
eigenvaluevecVector of computed eigenvalue
eigenvectorsEigenvectors as columns of \( n \times n \) Matrix

Algorithm uses fully pivoted Jacobi rotations.

Two interfaces:

H.eigen_hermitean(E, U, [optional: sort]); E: output is DiagnoalMatrix containing real eigenvalues U: nxn unitary matrix, columns are normalized eigenvectors

auto res = H.eigen_hermitean([optional: sort]); This saves the trouble of defining E and U (see below)

Thus, H = U E U^* and H U = U E

Both interfaces allow optional sorting according to eigenvalues: hila::sort::unsorted [default] hila::sort::ascending / descending

Example:

M = ... // make unitary
int rotations = M.eigen_hermitean(eigenvalues,eigenvectors,hila::sort::ascending);
Note
The matrix has to be hermitean/symmetric
Parameters
Ediagonal matrix of real eigenvalues
UUnitary nxn matrix of eigenvectors
sortedsorting of eigenvalues (default:unsorted)
Returns
int number of jacobi rotations

Definition at line 1605 of file matrix_linalg.h.

◆ eigen_hermitean() [2/2]

eigen_result< Matrix< n, m, T > > Matrix_t< n, m, T, Matrix< n, m, T > >::eigen_hermitean ( enum hila::sort  sorted = hila::sort::unsorted) const
inherited

eigenvalues and -vectors of hermitean/symmetric matrix, alternative interface

result = eigen_hermitean(hila::sort [optional]) returns struct eigen_result<Mtype>, with fields eigenvalues: DiagonalMatrix of eigenvalues eigenvectors: nxn unitary matrix of eigenvectors

Example:

M[ALL] = .. // make symmetric
onsites(ALL) {
auto R = M[X].svd();
// Use EV decomposition to evaluate function: sin(M) = U sin(eigenvals) U^T
sn[X] = R.eigenvectors * sin(R.eigenvalues) * R.eigenvectors.dagger();
}
The field class implements the standard methods for accessing Fields. Hilapp replaces the parity acce...
Definition field.h:61
constexpr Parity ALL
bit pattern: 011

This interface saves the trouble of defining the eigenvalue and -vector variables.

Definition at line 1609 of file matrix_linalg.h.

◆ exp()

template<int n, int m, typename T , typename MT >
Matrix_t< n, m, T, MT > exp ( const Matrix_t< n, m, T, MT > &  mat,
const int  order = 20 
)
inlineinherited

Calculate exp of a square matrix.

Computes up to certain order given as argument

Evaluation is done as:

\begin{align} \exp(H) &= 1 + H + \frac{H^2}{2!} + \frac{H^2}{2!} + \frac{H^3}{3!} \\ &= 1 + H\cdot(1 + (\frac{H}{2})\cdot (1 + (\frac{H}{3})\cdot(...))) \end{align}

Done backwards in order to reduce accumulation of errors

Template Parameters
nNumber of rowsMa
TMatrix element type
MTMatrix type
Parameters
matMatrix to compute exponential for
orderorder to compute exponential to
Returns
Matrix_t<n, m, T, MT>

Definition at line 2743 of file matrix.h.

◆ fill()

const Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::fill ( const S  rhs)
inlineinherited

Matrix fill.

Fills the matrix with element if it is assignable to matrix type T

Works as follows:

M.fill(2) \\ Matrix is filled with 2
Template Parameters
SScalar type to of rhs
Parameters
rhsElement to fill matrix with
Returns
const Mtype&

Definition at line 980 of file matrix.h.

◆ gaussian_random()

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::gaussian_random ( double  width = 1.0)
inlineinherited

Fills Matrix with gaussian random elements from gaussian distribution.

M.gaussian_random();
Parameters
width
Returns
Mtype&

Definition at line 1352 of file matrix.h.

◆ imag()

Matrix< n, m, hila::arithmetic_type< T > > Matrix_t< n, m, T, Matrix< n, m, T > >::imag ( ) const
inlineinherited

Returns imaginary part of Matrix or Vector.

Returns
Matrix<n, m, hila::arithmetic_type<T>>

Definition at line 1114 of file matrix.h.

◆ is_square()

static constexpr bool Matrix_t< n, m, T, Matrix< n, m, T > >::is_square ( )
inlinestaticconstexprinherited

Returns true if matrix is a square matrix.

Returns
true
false

Definition at line 138 of file matrix.h.

◆ is_vector()

static constexpr bool Matrix_t< n, m, T, Matrix< n, m, T > >::is_vector ( )
inlinestaticconstexprinherited

Returns true if Matrix is a vector.

Returns
true
false

Definition at line 128 of file matrix.h.

◆ mul_trace()

hila::type_mul< T, S > Matrix_t< n, m, T, Matrix< n, m, T > >::mul_trace ( const Matrix_t< p, q, S, MT > &  rm) const
inlineinherited

Multiply with given matrix and compute trace of result.

Slightly cheaper operation than

(M*N).trace()
T trace() const
Computes Trace for Matrix.
Definition matrix.h:1129
Template Parameters
p
q
S
MT
Parameters
rm
Returns
hila::type_mul<T, S>

Definition at line 1150 of file matrix.h.

◆ mult_by_2x2_left()

void Matrix_t< n, m, T, Matrix< n, m, T > >::mult_by_2x2_left ( int  p,
int  q,
const Matrix_t< 2, 2, R, Mt > &  M 
)
inlineinherited

Multiply \( n \times m \)-matrix from the left by \( n \times m \) matrix defined by \( 2 \times 2 \) sub matrix.

The multiplication is defined as follows, let \(M\) as the \( 2 \times 2 \) input matrix and \(B\) be (this) matrix, being the matrix stored in the object this method is called for. Let \(A = I\) be a \( n \times m \) unit matrix. We then set the values of A to be:

\begin{align} A_{p,p} = M_{0,0}, \hspace{5px} A_{p,q} = M_{0,1}, \hspace{5px} A_{q,p} = M_{1,0}, \hspace{5px} A_{q,q} = M_{1,1}. \end{align}

Then the resulting matrix will be:

\begin{align} B = A \cdot B \end{align}

Template Parameters
RElement type of M
MtMatrix type of M
Parameters
pFirst row and column
qSecond row and column
M\( 2 \times 2\) Matrix to multiply with

Definition at line 1532 of file matrix.h.

◆ mult_by_2x2_right()

void Matrix_t< n, m, T, Matrix< n, m, T > >::mult_by_2x2_right ( int  p,
int  q,
const Matrix_t< 2, 2, R, Mt > &  M 
)
inlineinherited

Multiply \( n \times m \)-matrix from the right by \( n \times m \) matrix defined by \( 2 \times 2 \) sub matrix.

See Matrix::mult_by_2x2_left, only difference being that the multiplication is from the right.

Template Parameters
RElement type of M
MtMatrix type of M
Parameters
pFirst row and column
qSecond row and column
M\( 2 \times 2\) Matrix to multiply with

Definition at line 1561 of file matrix.h.

◆ norm()

hila::arithmetic_type< T > Matrix_t< n, m, T, Matrix< n, m, T > >::norm ( ) const
inlineinherited

Calculate vector norm - sqrt of squarenorm.

Template Parameters
S
Returns
hila::arithmetic_type<T>

Definition at line 1183 of file matrix.h.

◆ operator!=()

bool Matrix_t< n, m, T, Matrix< n, m, T > >::operator!= ( const Matrix< n, m, S > &  rhs) const
inlineinherited

Boolean operator != to check if matrices are exactly different.

if matrices are exactly the same then this will return false

Template Parameters
SType for MAtrix which is being compared to
Parameters
rhsright hand side Matrix which we are comparing
Returns
true
false

Definition at line 580 of file matrix.h.

◆ operator*() [1/4]

Rt operator* ( const Matrix< 1, m, T1 > &  A,
const Matrix< n, 1, T2 > &  B 
)
inherited

Multiplication operator RowVector * Vector.

Defined as standard dot product between vectors as long as vectors are of same length

//
// Fill V and W
//
auto S = V*W; // Results in MyType scalar
Template Parameters
mDimensions of RowVector
nDimension of Vector
T1Element type of RowVector
T2Element type of Vector
RtReturn type of T1 \( \cdot \) T2 product
Parameters
ARowVector to multiply
BVector to multiply
Returns
Rt

Definition at line 2410 of file matrix.h.

◆ operator*() [2/4]

Rt operator* ( const Mt &  mat,
const S &  rhs 
)
inlineinherited

Multiplication operator Matrix * scalar.

Multiplication operator between Matrix and Scalar are defined in the usual way (element wise)

M.fill(1);
auto S = M*2; // Resulting Matrix is uniformly 2
Template Parameters
MtMatrix type of mat
sScalar type rhs
Parameters
matMatrix to multiply
rhsScalar to multiply
Returns
Rt

Definition at line 2445 of file matrix.h.

◆ operator*() [3/4]

Matrix< n, m, R > operator* ( const Mt1 &  a,
const Mt2 &  b 
)
inlineinherited

Multiplication operator.

Multiplication type depends on the original types of the multiplied matrices. Defined for the following operations.

Matrix * Matrix

Standard matrix multiplication where LHS columns must match RHS rows

M.random();
N.random();
auto S = N * M; // Results in a 3 x 3 Matrix since N.rows() = 3 and M.columns = 3

Vector * RowVector is same as outer product which is equivalent to a matrix multiplication

auto S = W*V // Result in n x n Matrix of type MyType
Template Parameters
Mt1Matrix type for a
Mt2Matrix type for b
nNumber of rows
mNumber of columns
Parameters
aLeft Matrix or Vector
bRight Matrix or RowVector
Returns
Matrix<n, m, R>

Definition at line 2348 of file matrix.h.

◆ operator*() [4/4]

Rt operator* ( const S &  rhs,
const Mt &  mat 
)
inlineinherited

Multiplication operator Scalar * Matrix.

Multiplication operator between Matrix and Scalar are defined in the usual way (element wise)

M.fill(1);
auto S = 2*M; // Resulting Matrix is uniformly 2
Template Parameters
MtMatrix type of mat
sScalar type rhs
Parameters
matMatrix to multiply
rhsScalar to multiply
Returns
Rt

Definition at line 2474 of file matrix.h.

◆ operator*=() [1/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator*= ( const DiagonalMatrix< m, S > &  rhs)
inlineinherited

Multiply assign operator for DiagonalMatrix to Matrix.

Simply defined as matrix multiplication, but since rhs is guaranteed to be diagonal the method is optimized to skip most of the elements.

Template Parameters
SElement type of rhs
Parameters
rhsDiagonalMatrix to multiply
Returns
Mtype&

Definition at line 933 of file matrix.h.

◆ operator*=() [2/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator*= ( const Matrix_t< m, p, S, MT > &  rhs)
inlineinherited

Multiply assign scalar or matrix.

Multiplication works as defined for matrix multiplication

Matrix multiply assign only defined for square matrices, since the matrix dimensions would change otherwise.

.
. Fill matrices M and N
.
M *= N; \\ M = M*N
Parameters
rhsMatrix to multiply with
Returns
template <int p, typename S, typename MT, std::enable_if_t<hila::is_assignable<T &, hila::type_mul<T, S>>::value, int> = 0>&

Definition at line 829 of file matrix.h.

◆ operator*=() [3/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator*= ( const S  rhs)
inlineinherited

Multiply assign operator scalar to Matrix.

Multiply Matrix uniformly with scalar

.
. Fill whole matrix with 1
.
M *= 2 ; \\ M is filled with 2
Template Parameters
SScalar type of rhs
Parameters
rhsScalar to multiply
Returns
Mtype&

Definition at line 855 of file matrix.h.

◆ operator+() [1/4]

const Matrix< n, m, T > & operator+ ( ) const
inlineinherited

Addition operator.

Identity operation

M == +M;
Template Parameters
Mtype1Matrix type for a
Mtype2Matrix type for b
Parameters
aLeft matrix
bRight matrix
Returns
Rtype

Definition at line 546 of file matrix.h.

◆ operator+() [2/4]

Rtype operator+ ( const Matrix< n, m, T > &  a,
const S &  b 
)
inlineinherited

Addition operator Matrix + scalar.

Addition operator between matrix and scalar is defined in the usual way, where the scalar is added to the diagonal elements.

  • \( M + 2 = M + 2\cdot\mathbb{1} \)
M.fill(0);
S = M + 1; // Resulting matrix is identity matrix
Template Parameters
MtypeMatrix type of b
SType of scalar
Parameters
aMatrix to add to
bScalar to add
Returns
Rtype

Definition at line 2158 of file matrix.h.

◆ operator+() [3/4]

Rtype operator+ ( const Mtype1 &  a,
const Mtype2 &  b 
)
inlineinherited

Addition operator Matrix + Matrix.

Addition operator between matrices is defined in the usual way (element wise).

NOTE: Matrices must share same dimensionality.

M.fill(1);
N.fill(1);
S = M + N; // Resulting matrix is uniformly 2
Template Parameters
Mtype1Matrix type of a
Mtype2Matrix type of b
Parameters
aMatrix to add
bMatrix to add
Returns
Rtype Return matrix of compatible type between Mtype1 and Mtype2

Definition at line 2053 of file matrix.h.

◆ operator+() [4/4]

Rtype operator+ ( const S &  b,
const Matrix< n, m, T > &  a 
)
inlineinherited

Addition operator scalar + Matrix.

Addition operator between Scalar and Matrix is defined in the usual way, where the scalar is treated as diagonal matrix which is then added to. \( 2 + M = 2\cdot\mathbb{1} + M \)

M = 0; // M = 0*I
R = 1 + M; // Resulting matrix is identity matrix
Template Parameters
MtypeMatrix type of a
Sscalar type of b
Parameters
bMatrix to add
aScalar to add to
Returns
Rtype

Definition at line 2195 of file matrix.h.

◆ operator+=() [1/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator+= ( const DiagonalMatrix< n, S > &  rhs)
inlineinherited

Addition assign operator for DiagonalMatrix to Matrix.

Works as long as Matrix to assign to is square

Template Parameters
SElement type of rhs
Parameters
rhsDiagonalMatrix to add
Returns
Mtype&

Definition at line 897 of file matrix.h.

◆ operator+=() [2/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator+= ( const Matrix_t< n, m, S, MT > &  rhs)
inlineinherited

Add assign operator Matrix to Matrix.

M = 1;
N = 1;
M += N; \\M = 2*I
constexpr Imaginary_t< double > I(1.0)
Imaginary unit I - global variable.
Template Parameters
SElement type of rhs
MTMatrix type of rhs
Parameters
rhsMatrix to add
Returns
Mtype&

Definition at line 723 of file matrix.h.

◆ operator+=() [3/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator+= ( const S &  rhs)
inlineinherited

Add assign operator scalar to Matrix.

Adds scalar \( a \) to square matrix as \( M + a\cdot\mathbb{1} \)

M += 1 ; \\ M = 2*I
Template Parameters
SElement type of scalar rhs
Parameters
rhsSclar to add
Returns
Mtype&

Definition at line 772 of file matrix.h.

◆ operator-() [1/4]

Matrix< n, m, T > Matrix_t< n, m, T, Matrix< n, m, T > >::operator- ( ) const
inlineinherited

Unary operator.

Negation operation

M == -M;

Definition at line 521 of file matrix.h.

◆ operator-() [2/4]

Rtype operator- ( const Matrix< n, m, T > &  a,
const S &  b 
)
inlineinherited

Subtraction operator Matrix - scalar.

Subtraction operator between matrix and scalar is defined in the usual way, where the scalar is subtracted from the diagonal elements.

\( M - 2 = M - 2\cdot\mathbb{1} \)

M = 2; // M = 2*I
R = M - 1; // Resulting matrix is identity matrix
Template Parameters
MtypeMatrix type of a
SScalar type of b
Parameters
aMatrix to subtract from
bScalar to subtract
Returns
Rtype

Definition at line 2227 of file matrix.h.

◆ operator-() [3/4]

Rtype operator- ( const Mtype1 &  a,
const Mtype2 &  b 
)
inlineinherited

Subtraction operator Matrix - Matrix.

Subtraction operator between matrices is defined in the usual way (element wise).

NOTE: Matrices must share same dimensionality.

M.fill(1);
N.fill(1);
S = M - N; // Resulting matrix is uniformly 0
Template Parameters
Mtype1Matrix type of a
Mtype2Matrix type of b
Parameters
aMatrix to subtract from
bMatrix to subtract
Returns
Rtype Return matrix of compatible type between Mtype1 and Mtype2

Definition at line 2120 of file matrix.h.

◆ operator-() [4/4]

Rtype operator- ( const S &  b,
const Matrix< n, m, T > &  a 
)
inlineinherited

Subtraction operator Scalar - Matrix.

Subtraction operator between Scalar and Matrix is defined in the usual way, where the scalar is treated as diagonal matrix which is then subtracted from.

\( 2 - M = 2\cdot\mathbb{1} - M \)

M = 1; // M = 1*I
R = 2 - M; // Resulting matrix is identity matrix
Template Parameters
MtypeMatrix type a
SScalar type of b
Parameters
bScalar to subtract from
aMatrix to subtract
Returns
Rtype

Definition at line 2265 of file matrix.h.

◆ operator-=() [1/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator-= ( const DiagonalMatrix< n, S > &  rhs)
inlineinherited

Subtract assign operator for DiagonalMatrix to Matrix.

Works as long as Matrix to assign to is square

Template Parameters
SElement type of rhs
Parameters
rhsDiagonalMatrix to add
Returns
Mtype&

Definition at line 914 of file matrix.h.

◆ operator-=() [2/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator-= ( const Matrix_t< n, m, S, MT > &  rhs)
inlineinherited

Subtract assign operator Matrix to MAtrix.

M = 3;
N = 1;
M -= N; \\M = 2*I
Parameters
rhsMatrix to subtract with
Returns
Mtype&

Definition at line 747 of file matrix.h.

◆ operator-=() [3/3]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator-= ( const S  rhs)
inlineinherited

Subtract assign operator scalar to Matrix.

Subtract scalar \( a \) to square matrix as \( M - a\cdot\mathbb{1} \)

M -= 1 ; \\ M = 2*I
Template Parameters
SElement type of scalar rhs
Parameters
rhsscalar to add
Returns
Mtype&

Definition at line 798 of file matrix.h.

◆ operator/()

Rt operator/ ( const Mt &  mat,
const S &  rhs 
)
inlineinherited

Division operator.

Defined for following operations

Matrix / Scalar:

Division operator between Matrix and Scalar are defined in the usual way (element wise)

M.fill(2);
auto S = M/2; // Resulting matrix is uniformly 1
Template Parameters
MtMatrix type
SScalar type
Parameters
matMatrix to divide scalar with
rhsScalar to divide with
Returns
Rt Resulting Matrix

Definition at line 2504 of file matrix.h.

◆ operator/=() [1/2]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator/= ( const DiagonalMatrix< m, S > &  rhs)
inlineinherited

Divide assign operator for DiagonalMatrix to Matrix.

Well defined since rhs is guaranteed to be Diagonal.

Let M be the Matrix which we divide and D be the DiagonalMatrix which we divide with then the operation is defined as \( M \cdot D^{-1} \).

Template Parameters
SElement type of rhs
Parameters
rhsDiagonalMatrix to divide
Returns
Mtype&

Definition at line 954 of file matrix.h.

◆ operator/=() [2/2]

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::operator/= ( const S  rhs)
inlineinherited

Divide assign oprator scalar with matrix.

Divide works as defined for scalar matrix division.

.
. Fill whole matrix with 2
.
M /= 2 ; \\ M is filled with 1
Template Parameters
SScalar type of rhs
Parameters
rhsScalar to divide with
Returns

Definition at line 881 of file matrix.h.

◆ operator<<()

template<int n, int m, typename T , typename MT >
std::ostream & operator<< ( std::ostream &  strm,
const Matrix_t< n, m, T, MT > &  A 
)
inherited

Stream operator.

Naive Stream operator for formatting Matrix for printing. Simply puts elements one after the other in row major order

Template Parameters
n
m
T
MT
Parameters
strm
A
Returns
std::ostream&

Definition at line 2554 of file matrix.h.

◆ operator==()

bool Matrix_t< n, m, T, Matrix< n, m, T > >::operator== ( const Matrix< n, m, S > &  rhs) const
inlineinherited

Boolean operator == to determine if two matrices are exactly the same.

Tolerance for equivalence is zero, meaning that the matrices must be exactly the same.

Template Parameters
SType for Matrix which is being compared to
Parameters
rhsright hand side Matrix which we are comparing
Returns
true
false

Definition at line 561 of file matrix.h.

◆ operator[]()

T Matrix_t< n, m, T, Matrix< n, m, T > >::operator[] ( const int  i) const
inlineinherited

Indexing operation [] defined only for vectors.

Example:

MyType a = V[i] \\ i <= n
Template Parameters
qrow size n
pcolumn size m
Parameters
irow or vector index depending on which is being indexed
Returns
T

Definition at line 324 of file matrix.h.

◆ outer_product()

Matrix< n, p, R > Matrix_t< n, m, T, Matrix< n, m, T > >::outer_product ( const Matrix< p, q, S > &  rhs) const
inlineinherited

Outer product.

Only works between two Vector objects

.
.
.
V.outer_product(W); \\ Valid operation
Matrix< n, p, R > outer_product(const Matrix< p, q, S > &rhs) const
Outer product.
Definition matrix.h:1294
.
.
.
V.outer_product(W); // not valid operation
Template Parameters
pRow length for rhs
qColumn length for rhs
SElement type for rhs
RType between lhs and rhs multiplication
Parameters
rhsVector to compute outer product with
Returns
Matrix<n, p, R>

Definition at line 1294 of file matrix.h.

◆ permute()

Matrix< n, m, T > Matrix_t< n, m, T, Matrix< n, m, T > >::permute ( const Vector< N, int > &  permutation) const
inlineinherited

Permute elements of vector.

Reordering is done based off of permutation vector

Parameters
permutationVector of integers to permute rows
Returns
Mtype

Definition at line 1415 of file matrix.h.

◆ permute_columns()

Matrix< n, m, T > Matrix_t< n, m, T, Matrix< n, m, T > >::permute_columns ( const Vector< m, int > &  permutation) const
inlineinherited

permute columns of Matrix

Reordering is done based off of permutation vector

Parameters
permutationVector of integers to permute columns
Returns
Mtype

Definition at line 1385 of file matrix.h.

◆ permute_rows()

Matrix< n, m, T > Matrix_t< n, m, T, Matrix< n, m, T > >::permute_rows ( const Vector< n, int > &  permutation) const
inlineinherited

permute rows of Matrix

Reordering is done based off of permutation vector

Parameters
permutationVector of integers to permute rows
Returns
Mtype

Definition at line 1399 of file matrix.h.

◆ project_force()

template<int N, typename radix >
static SquareMatrix< N, Complex< radix > > antisymmetric< N, radix >::project_force ( SquareMatrix< size, Complex< radix > >  rforce)
inlinestatic

Project a complex antisymmetric matrix into the algebra and represent as a complex NxN (momentum) matrix

Definition at line 227 of file representations.h.

◆ random()

Matrix< n, m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::random ( )
inlineinherited

dot with matrix - matrix

Generate random elements

Fills Matrix with random elements from uniform distribution

M.random();
Returns
Mtype&

Definition at line 1330 of file matrix.h.

◆ real()

Matrix< n, m, hila::arithmetic_type< T > > Matrix_t< n, m, T, Matrix< n, m, T > >::real ( ) const
inlineinherited

Returns real part of Matrix or Vector.

Returns
Matrix<n, m, hila::arithmetic_type<T>>

Definition at line 1101 of file matrix.h.

◆ row()

const RowVector< m, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::row ( int  r) const
inlineinherited

Return reference to row in a matrix.

Since the Matrix data is ordered in a row major order accessing a row returns a reference to the row.

M.random();
RowVector<n,T> V = M.row(i);
Parameters
rindex of row to be referenced
Returns
const RowVector<m, T>&

Definition at line 356 of file matrix.h.

◆ rows()

static constexpr int Matrix_t< n, m, T, Matrix< n, m, T > >::rows ( )
inlinestaticconstexprinherited

Define constant methods rows(), columns() - may be useful in template code.

Returns row length

Returns
constexpr int

Definition at line 220 of file matrix.h.

◆ set_column()

void Matrix_t< n, m, T, Matrix< n, m, T > >::set_column ( int  c,
const Vector< n, S > &  v 
)
inlineinherited

get column of a matrix

Set column of Matrix with Vector if types are assignable

V.random();
M.set_column(i,V);
Mtype & random()
dot with matrix - matrix
Definition matrix.h:1330
Template Parameters
SVector type
Parameters
cIndex of column to be set
vVector to be set

Definition at line 415 of file matrix.h.

◆ set_diagonal()

void Matrix_t< n, m, T, Matrix< n, m, T > >::set_diagonal ( const Vector< n, S > &  v)
inlineinherited

Set diagonal of square matrix to Vector which is passed to the method.

If called for non square matrix the program will throw an error.

Example:

SquareMatrix<n,MyType> S = 0; \\ Zero matrix
Vector<n,MyType> V = 1; \\ Vector assigned to 1 at all elements
S.set_diagonal(V); \\ Results in Identity matrix of size n
void set_diagonal(const Vector< n, S > &v)
Set diagonal of square matrix to Vector which is passed to the method.
Definition matrix.h:454
static constexpr int size
Matrix size.
Template Parameters
Stype vector to assign values to
Parameters
vVector to assign to diagonal

Definition at line 454 of file matrix.h.

◆ set_row()

void Matrix_t< n, m, T, Matrix< n, m, T > >::set_row ( int  r,
const RowVector< m, S > &  v 
)
inlineinherited

Set row of Matrix with RowVector if types are assignable.

V.random();
M.set_row(i,V);
Template Parameters
SRowVector type
Parameters
rIndex of row to be set
vRowVector to be set

Definition at line 374 of file matrix.h.

◆ sort() [1/2]

Matrix< n, m, T > Matrix_t< n, m, T, Matrix< n, m, T > >::sort ( hila::sort  order = hila::sort::ascending) const
inlineinherited

Sort method for Vector.

Order can be past as argument as either ascending (default) or descending

Ascending

V.random();
V.sort(); // V is sorted in ascending order
Mtype sort(Vector< N, int > &permutation, hila::sort order=hila::sort::ascending) const
Sort method for Vector which returns permutation order.
Definition matrix.h:1456

Descending

V.sort(hila::sort::descending);
Parameters
orderOrder to sort in
Returns
Mtype

Definition at line 1504 of file matrix.h.

◆ sort() [2/2]

Matrix< n, m, T > Matrix_t< n, m, T, Matrix< n, m, T > >::sort ( Vector< N, int > &  permutation,
hila::sort  order = hila::sort::ascending 
) const
inlineinherited

Sort method for Vector which returns permutation order.

Order can be past as argument as either ascending (default) or descending

Ascending

V.random();
V.sort(perm);
V.permute(perm);
Mtype permute(const Vector< N, int > &permutation) const
Permute elements of vector.
Definition matrix.h:1415

Descending

V.random();
V.sort(perm,hila::sort::descending);
V.permute(perm);
Template Parameters
N
Parameters
permutation
order
Returns
Mtype

Definition at line 1456 of file matrix.h.

◆ squarenorm()

hila::arithmetic_type< T > Matrix_t< n, m, T, Matrix< n, m, T > >::squarenorm ( ) const
inlineinherited

Calculate square norm - sum of squared elements.

Returns
hila::arithmetic_type<T>

Definition at line 1167 of file matrix.h.

◆ str()

std::string Matrix_t< n, m, T, Matrix< n, m, T > >::str ( int  prec = 8,
char  separator = ' ' 
) const
inlineinherited

Convert to string for printing

Definition at line 1646 of file matrix.h.

◆ svd() [1/2]

svd_result< Matrix< n, m, T > > Matrix_t< n, m, T, Matrix< n, m, T > >::svd ( enum hila::sort  sorted = hila::sort::unsorted) const
inherited

svd and svd_pivot - alternative interface

svd(hila::sort [optional]) returns struct svd_result<Mtype>, with fields U: nxn unitary matrix singularvalues: DiagonalMatrix of singular values (real, > 0) V: nxn unitary matrix

auto res = M.svd(); now res.U : nxn unitary res.singularvalues : DiagonalMatrix of singular values res.V : nxn unitary

result satifies M = res.U res.singularvalues res.V.dagger()

Definition at line 1630 of file matrix_linalg.h.

◆ svd() [2/2]

int Matrix_t< n, m, T, Matrix< n, m, T > >::svd ( Matrix_t< n, n, Mt, MT > &  _U,
DiagonalMatrix< n, Et > &  _S,
Matrix_t< n, n, Mt, MT > &  _V,
enum hila::sort  sorted = hila::sort::unsorted 
) const
inherited

Singular value decomposition: divide matrix A = U S V*, where U,V unitary and S diagonal matrix of real singular values. Unpivoted Jacobi rotations.

Unpivoted rotation is generally faster than pivoted (esp. on gpu), but a bit less accurate

Use: M.svd(U, S, V, [sorted]);

Result satisfies M = U S V.dagger()

The algorithm works by one-sided Jacobi rotations.

  • U = V = 1
  • Loop
    • for i=0..(n-2); j=(i+1)..(n-1)
      • calculate B_ii, B_ij, B_jj, (B_ij = (A^* A)_ij)
      • If B_ij > 0
        • diagonalize J^* [ B_ii B_ij ] J = diag(D_ii, D_jj) [ B_ji B_jj ]
        • A <- A J , Columns i and j change
        • V <- V J
    • endfor
    • if nothing changed, break Loop
  • Endloop Now A = U S, A^* A = S* S = S^2
  • S_ii = A_ii / |A_i| (norm of column i)
  • U = A / S

Definition at line 1626 of file matrix_linalg.h.

◆ svd_pivot()

int Matrix_t< n, m, T, Matrix< n, m, T > >::svd_pivot ( Matrix_t< n, n, Mt, MT > &  _U,
DiagonalMatrix< n, Et > &  _S,
Matrix_t< n, n, Mt, MT > &  _V,
enum hila::sort  sorted = hila::sort::unsorted 
) const
inherited

Singular value decomposition: divide matrix A = U S V*, where U,V unitary and S diagonal matrix of real singular values. Fully pivoted Jacobi rotations.

Use: M.svd_pivot(U, S, V, [sorted]);

The algorithm works by one-sided Jacobi rotations.

  • U = V = 1
  • Compute Gram matrix B = A^* A. B is Hermitean, with B_ii >= 0.
  • Loop:
    • Find largest B_ij, j > i - full pivoting if |B_ij|^2 <= tol * B_ii B_jj we're done
    • find J to diagonalize J^* [ B_ii B_ij ] J = diag(D_ii, D_jj) [ B_ji B_jj ]
    • A <- A J , Columns i and j change
    • V <- V J
    • Recompute B_ik and B_jk, k /= i,j (B_ii = D_ii, B_jj = D_jj, B_ij = 0) (n^2)
  • Endloop Now A = U S, A^* A = S* S = S^2
  • S_ii = A_ii / |A_i| (norm of column i)
  • U = A / S
Parameters
U

Definition at line 1635 of file matrix_linalg.h.

◆ trace()

T Matrix_t< n, m, T, Matrix< n, m, T > >::trace ( ) const
inlineinherited

Computes Trace for Matrix.

Not define for non square matrices. Static assert will stop code from compiling if executed for non square matrices.

Returns
T

Definition at line 1129 of file matrix.h.

◆ transpose() [1/3]

Rtype Matrix_t< n, m, T, Matrix< n, m, T > >::transpose ( ) const
inlineinherited

Transpose of matrix.

Return type for square matrix is same input, for non square return type is Matrix<n,m,MyType>

Template Parameters
mm
std::conditional<n,Mtype,Matrix<m,n,T>>::type
Returns
const Rtype

Definition at line 997 of file matrix.h.

◆ transpose() [2/3]

const RowVector< n, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::transpose ( ) const
inlineinherited

Transpose of vector.

Returns reference

Template Parameters
mm
Returns
const RowVector<n, T>&

Definition at line 1014 of file matrix.h.

◆ transpose() [3/3]

const Vector< n, T > & Matrix_t< n, m, T, Matrix< n, m, T > >::transpose ( ) const
inlineinherited

Transpose of RowVector.

Returns reference

Template Parameters
mm
Returns
const RowVector<n, T>&

Definition at line 1026 of file matrix.h.


The documentation for this class was generated from the following file: