vnl_fastops.h
Go to the documentation of this file.
1 // This is core/vnl/vnl_fastops.h
2 #ifndef vnl_fastops_h_
3 #define vnl_fastops_h_
4 //:
5 // \file
6 // \brief Collection of C-style matrix functions
7 // \author Andrew W. Fitzgibbon, Oxford RRG
8 // \date 09 Dec 96
9 //
10 // \verbatim
11 // Modifications
12 // Feb.2002 -Peter Vanroose- brief doxygen comment placed on single line
13 // Jun.2004 -Peter Vanroose- Added inc_X_by_ABt dec_X_by_AtB {inc,dec}_X_by_AB
14 // Jun.2004 -Peter Vanroose- First step to migrate towards non-pointer args
15 // Mar.2007 -Peter Vanroose- Commented deprecated versions of the functions
16 // \endverbatim
17 
18 #include <vnl/vnl_vector.h>
19 #include <vnl/vnl_matrix.h>
20 #include "vnl/vnl_export.h"
21 
22 //: Collection of C-style matrix functions for the most time-critical applications.
23 // In general, however one should consider using the vnl_transpose envelope-letter
24 // class to achieve the same results with about a 10% speed penalty.
25 class VNL_EXPORT vnl_fastops
26 {
27  public:
28  static void AtA(vnl_matrix<double>& out, const vnl_matrix<double>& A);
29  static void AB (vnl_matrix<double>& out, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
30  static void AtB(vnl_matrix<double>& out, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
31  static void AtB(vnl_vector<double>& out, const vnl_matrix<double>& A, const vnl_vector<double>& b);
32  static void Ab (vnl_vector<double>& out, const vnl_matrix<double>& A, const vnl_vector<double>& b);
33  static void ABt(vnl_matrix<double>& out, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
34 
35  static double btAb (const vnl_matrix<double>& A, const vnl_vector<double>& b);
36 
37  static void ABAt(vnl_matrix<double>& out, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
38 
39  static void inc_X_by_AtA(vnl_matrix<double>& X, const vnl_matrix<double>& A);
40  static void inc_X_by_AB (vnl_matrix<double>& X, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
41  static void inc_X_by_AtB(vnl_matrix<double>& X, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
42  static void inc_X_by_AtB(vnl_vector<double>& X, const vnl_matrix<double>& A, const vnl_vector<double>& b);
43  static void inc_X_by_ABt(vnl_matrix<double>& X, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
44  static void inc_X_by_ABAt(vnl_matrix<double>& X, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
45 
46  static void dec_X_by_AtA(vnl_matrix<double>& X, const vnl_matrix<double>& A);
47  static void dec_X_by_AB (vnl_matrix<double>& X, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
48  static void dec_X_by_AtB(vnl_matrix<double>& X, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
49  static void dec_X_by_AtB(vnl_vector<double>& X, const vnl_matrix<double>& A, const vnl_vector<double>& b);
50  static void dec_X_by_ABt(vnl_matrix<double>& X, const vnl_matrix<double>& A, const vnl_matrix<double>& B);
51 
52  private:
53  // BLAS-like operations
54  static double dot(const double* a, const double* b, unsigned int n);
55 };
56 
57 #endif // vnl_fastops_h_
An ordinary mathematical matrix.
double dot(const double *v1, const double *v2, unsigned n)
Sum of v1[i]*v2i.
Collection of C-style matrix functions for the most time-critical applications.
Definition: vnl_fastops.h:25