Multiply with transpose sugar A'*v = A^v
parent
80ff7e6d26
commit
2cb52694b5
15
cpp/Matrix.h
15
cpp/Matrix.h
|
@ -85,7 +85,18 @@ bool assert_equal(const Matrix& A, const Matrix& B, double tol = 1e-9);
|
||||||
*/
|
*/
|
||||||
inline Vector operator*(const Matrix& A, const Vector & v) {
|
inline Vector operator*(const Matrix& A, const Vector & v) {
|
||||||
if (A.size2()!=v.size()) throw(std::invalid_argument("Matrix operator* : A.n!=v.size"));
|
if (A.size2()!=v.size()) throw(std::invalid_argument("Matrix operator* : A.n!=v.size"));
|
||||||
return Vector(prod(A,v));
|
return prod(A,v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* overload ^ for trans(A)*v
|
||||||
|
* We transpose the vectors for speed.
|
||||||
|
*/
|
||||||
|
inline Vector operator^(const Matrix& A, const Vector & v) {
|
||||||
|
if (A.size1()!=v.size()) throw(std::invalid_argument("Matrix operator^ : A.m!=v.size"));
|
||||||
|
Vector vt = trans(v);
|
||||||
|
Vector vtA = prod(vt,A);
|
||||||
|
return trans(vtA);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,7 +104,7 @@ inline Vector operator*(const Matrix& A, const Vector & v) {
|
||||||
*/
|
*/
|
||||||
inline Vector operator*(const Vector & v, const Matrix& A) {
|
inline Vector operator*(const Vector & v, const Matrix& A) {
|
||||||
if (A.size1()!=v.size()) throw(std::invalid_argument("Matrix operator* : A.m!=v.size"));
|
if (A.size1()!=v.size()) throw(std::invalid_argument("Matrix operator* : A.m!=v.size"));
|
||||||
return Vector(prod(v,A));
|
return prod(v,A);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -337,16 +337,12 @@ TEST( matrix, matrix_vector_multiplication )
|
||||||
1.0,2.0,3.0,
|
1.0,2.0,3.0,
|
||||||
4.0,5.0,6.0
|
4.0,5.0,6.0
|
||||||
);
|
);
|
||||||
Vector v(3);
|
Vector v = Vector_(3,1.,2.,3.);
|
||||||
v(0) = 1.0;
|
Vector Av = Vector_(2,14.,32.);
|
||||||
v(1) = 2.0;
|
Vector AtAv = Vector_(3,142.,188.,234.);
|
||||||
v(2) = 3.0;
|
|
||||||
|
|
||||||
Vector Av(2);
|
|
||||||
Av(0) = 14.0;
|
|
||||||
Av(1) = 32.0;
|
|
||||||
|
|
||||||
EQUALITY(A*v,Av);
|
EQUALITY(A*v,Av);
|
||||||
|
EQUALITY(A^Av,AtAv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
Loading…
Reference in New Issue