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
it_assert
#define it_assert(t, s)
Abort if t is not true.
Definition: itassert.h:94
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
fastmath.h
Definitions of special operations on vectors and matricies optimized for speed.
itpp
itpp namespace
Definition: itmex.h:36
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 Thu Aug 20 2015 21:02:49 for IT++ by Doxygen 1.8.9.1