fastmath.cpp
Go to the documentation of this file.
#include <itpp/base/fastmath.h>
namespace itpp
{
// m=m-v*v'*m
void sub_v_vT_m(mat &m, const vec &v)
{
vec v2(m.cols());
double tmp, *v2p;
const double *vp;
int i, j;
it_assert(v.size() == m.rows(), "sub_v_vT_m()");
v2p = v2._data();
for (j = 0; j < m.cols(); j++) {
tmp = 0.0;
vp = v._data();
for (i = 0; i < m.rows(); i++)
tmp += *(vp++) * m._elem(i, j);
*(v2p++) = tmp;
}
vp = v._data();
for (i = 0; i < m.rows(); i++) {
v2p = v2._data();
for (j = 0; j < m.cols(); j++)
m._elem(i, j) -= *vp * *(v2p++);
vp++;
}
}
// m=m-m*v*v'
void sub_m_v_vT(mat &m, const vec &v)
{
vec v2(m.rows());
double tmp, *v2p;
const double *vp;
int i, j;
it_assert(v.size() == m.cols(), "sub_m_v_vT()");
v2p = v2._data();
for (i = 0; i < m.rows(); i++) {
tmp = 0.0;
vp = v._data();
for (j = 0; j < m.cols(); j++)
tmp += *(vp++) * m._elem(i, j);
*(v2p++) = tmp;
}
v2p = v2._data();
for (i = 0; i < m.rows(); i++) {
vp = v._data();
for (j = 0; j < m.cols(); j++)
m._elem(i, j) -= *v2p * *(vp++);
v2p++;
}
}
} // namespace itpp
itpp::Array
General array class.
Definition array.h:105
itpp::Array::size
int size() const
Returns the number of data elements in the array object.
Definition array.h:155
itpp::Mat
Matrix Class (Templated)
Definition mat.h:202
itpp::Mat::rows
int rows() const
The number of rows.
Definition mat.h:237
itpp::Mat::cols
int cols() const
The number of columns.
Definition mat.h:235
itpp::Mat::_elem
Num_T & _elem(int r, int c)
Get element (r,c) from matrix without boundary check (not recommended to use)
Definition mat.h:431
fastmath.h
Definitions of special operations on vectors and matricies optimized for speed.
it_assert
#define it_assert(t, s)
Abort if t is not true.
Definition itassert.h:94
itpp
itpp namespace
Definition itmex.h:37
itpp::sub_v_vT_m
void sub_v_vT_m(mat &m, const vec &v)
Calculates m=m-v*v'*m.
Definition fastmath.cpp:37
itpp::sub_m_v_vT
void sub_m_v_vT(mat &m, const vec &v)
Calculates m=m-m*v*v'.
Definition fastmath.cpp:65

Generated on Mon Jun 10 2024 11:49:17 for IT++ by Doxygen 1.9.8