Xmipp  v3.23.11-Nereus
Macros | Functions
matrix2d.cpp File Reference
#include <queue>
#include <fstream>
#include "alglib/linalg.h"
#include "numerical_recipes.h"
#include "matrix2d.h"
#include "bilib/linearalgebra.h"
#include "xmipp_filename.h"
#include "matrix1d.h"
#include "xmipp_funcs.h"
#include <sys/stat.h>
Include dependency graph for matrix2d.cpp:

Go to the source code of this file.

Macros

#define VIA_BILIB
 

Functions

void cholesky (const Matrix2D< double > &M, Matrix2D< double > &L)
 
void normalizeColumns (Matrix2D< double > &A)
 
void normalizeColumnsBetween0and1 (Matrix2D< double > &A)
 
void subtractColumnMeans (Matrix2D< double > &A)
 
void schur (const Matrix2D< double > &M, Matrix2D< double > &O, Matrix2D< double > &T)
 
void generalizedEigs (const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix1D< double > &D, Matrix2D< double > &P)
 
void firstEigs (const Matrix2D< double > &A, size_t M, Matrix1D< double > &D, Matrix2D< double > &P, bool Pneeded)
 
void lastEigs (const Matrix2D< double > &A, size_t M, Matrix1D< double > &D, Matrix2D< double > &P)
 
void eigsBetween (const Matrix2D< double > &A, size_t I1, size_t I2, Matrix1D< double > &D, Matrix2D< double > &P)
 
void allEigs (const Matrix2D< double > &A, std::vector< std::complex< double > > &eigs)
 
void connectedComponentsOfUndirectedGraph (const Matrix2D< double > &G, Matrix1D< int > &component)
 
void matrixOperation_AB (const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix2D< double > &C)
 
void matrixOperation_Ax (const Matrix2D< double > &A, const Matrix1D< double > &x, Matrix1D< double > &y)
 
void matrixOperation_AtA (const Matrix2D< double > &A, Matrix2D< double > &B)
 
void matrixOperation_AAt (const Matrix2D< double > &A, Matrix2D< double > &C)
 
void matrixOperation_ABt (const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix2D< double > &C)
 
void matrixOperation_AtB (const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix2D< double > &C)
 
void matrixOperation_Atx (const Matrix2D< double > &A, const Matrix1D< double > &x, Matrix1D< double > &y)
 
void matrixOperation_AtBt (const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix2D< double > &C)
 
void matrixOperation_XtAX_symmetric (const Matrix2D< double > &X, const Matrix2D< double > &A, Matrix2D< double > &B)
 
void matrixOperation_IplusA (Matrix2D< double > &A)
 
void matrixOperation_IminusA (Matrix2D< double > &A)
 
void eraseFirstColumn (Matrix2D< double > &A)
 
void keepColumns (Matrix2D< double > &A, int j0, int jF)
 
void orthogonalizeColumnsGramSchmidt (Matrix2D< double > &M)
 
template void ludcmp< double > (Matrix2D< double > const &, Matrix2D< double > &, Matrix1D< int > &, double &)
 
template void lubksb< double > (Matrix2D< double > const &, Matrix1D< int > &, Matrix1D< double > &)
 
template void svdcmp< float > (Matrix2D< float > const &, Matrix2D< double > &, Matrix1D< double > &, Matrix2D< double > &)
 
template void svdcmp< double > (Matrix2D< double > const &, Matrix2D< double > &, Matrix1D< double > &, Matrix2D< double > &)
 
Matrix Related functions

These functions are not methods of Matrix2D

template<typename T >
void svdcmp (const Matrix2D< T > &a, Matrix2D< double > &u, Matrix1D< double > &w, Matrix2D< double > &v)
 
void svbksb (Matrix2D< double > &u, Matrix1D< double > &w, Matrix2D< double > &v, Matrix1D< double > &b, Matrix1D< double > &x)
 
template<typename T >
void ludcmp (const Matrix2D< T > &A, Matrix2D< T > &LU, Matrix1D< int > &indx, T &d)
 
template<typename T >
void lubksb (const Matrix2D< T > &LU, Matrix1D< int > &indx, Matrix1D< T > &b)
 

Macro Definition Documentation

◆ VIA_BILIB

#define VIA_BILIB

Definition at line 123 of file matrix2d.cpp.

Function Documentation

◆ cholesky()

void cholesky ( const Matrix2D< double > &  M,
Matrix2D< double > &  L 
)

Cholesky decomposition. Given M, this function decomposes M as M=L*L^t where L is a lower triangular matrix. M must be positive semi-definite.

Definition at line 160 of file matrix2d.cpp.

161 {
162  L=M;
164  p.initZeros(MAT_XSIZE(M));
167  if (i==j)
168  MAT_ELEM(L,i,j)=VEC_ELEM(p,i);
169  else if (i<j)
170  MAT_ELEM(L,i,j)=0.0;
171 }
#define FOR_ALL_ELEMENTS_IN_MATRIX2D(m)
Definition: matrix2d.h:104
#define VEC_ELEM(v, i)
Definition: matrix1d.h:245
void choldc(double *a, int n, double *p)
T * adaptForNumericalRecipes2() const
Definition: matrix2d.h:875
#define i
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
void initZeros()
Definition: matrix1d.h:592
#define j
#define MAT_XSIZE(m)
Definition: matrix2d.h:120
T * adaptForNumericalRecipes() const
Definition: matrix1d.h:844

◆ lubksb< double >()

template void lubksb< double > ( Matrix2D< double > const &  ,
Matrix1D< int > &  ,
Matrix1D< double > &   
)

◆ ludcmp< double >()

template void ludcmp< double > ( Matrix2D< double > const &  ,
Matrix2D< double > &  ,
Matrix1D< int > &  ,
double &   
)

◆ schur()

void schur ( const Matrix2D< double > &  M,
Matrix2D< double > &  O,
Matrix2D< double > &  T 
)

Schur decomposition. Given M, this function decomposes M as M = O*T*O' where O is an orthogonal matrix.

Definition at line 251 of file matrix2d.cpp.

252 {
255  bool ok=rmatrixschur(a, MAT_YSIZE(M), s);
256  if (!ok)
257  REPORT_ERROR(ERR_NUMERICAL,"Could not perform Schur decomposition");
258  O.resizeNoCopy(M);
259  T.resizeNoCopy(M);
261  {
262  MAT_ELEM(O,i,j)=s(i,j);
263  MAT_ELEM(T,i,j)=a(i,j);
264  }
265 }
#define FOR_ALL_ELEMENTS_IN_MATRIX2D(m)
Definition: matrix2d.h:104
#define MAT_YSIZE(m)
Definition: matrix2d.h:124
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
#define i
void resizeNoCopy(int Ydim, int Xdim)
Definition: matrix2d.h:534
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
bool rmatrixschur(real_2d_array &a, const ae_int_t n, real_2d_array &s)
Definition: linalg.cpp:7050
Error related to numerical calculation.
Definition: xmipp_error.h:179
#define j
#define MAT_XSIZE(m)
Definition: matrix2d.h:120
void setcontent(ae_int_t irows, ae_int_t icols, const double *pContent)
Definition: ap.cpp:6660
#define MATRIX2D_ARRAY(m)
Definition: matrix2d.h:89
doublereal * a

◆ svdcmp< double >()

template void svdcmp< double > ( Matrix2D< double > const &  ,
Matrix2D< double > &  ,
Matrix1D< double > &  ,
Matrix2D< double > &   
)

◆ svdcmp< float >()

template void svdcmp< float > ( Matrix2D< float > const &  ,
Matrix2D< double > &  ,
Matrix1D< double > &  ,
Matrix2D< double > &   
)