LAMA
/home/brandes/workspace/LAMA/src/lama/expression/MatrixExpressions.hpp
Go to the documentation of this file.
00001 
00033 #ifndef LAMA_MATRIXEXPRESSIONS_HPP_
00034 #define LAMA_MATRIXEXPRESSIONS_HPP_
00035 
00036 #include <lama/matrix/Matrix.hpp>
00037 
00038 #include <lama/Vector.hpp>
00039 #include <lama/Scalar.hpp>
00040 
00041 #include <lama/expression/Expression.hpp>
00042 
00043 namespace lama
00044 {
00045 
00054 inline Expression<Scalar,Matrix,Times> operator*(
00055     const Scalar& scalar,
00056     const Matrix& matrix)
00057 {
00058     return Expression<Scalar,Matrix,Times>(scalar,matrix);
00059 }
00060 
00069 inline Expression<Scalar,Matrix,Times> operator*(
00070     const Matrix& matrix,
00071     const Scalar& scalar)
00072 {
00073     return Expression<Scalar,Matrix,Times>(scalar,matrix);
00074 }
00075 
00076 //A*B
00085 inline Expression<Matrix,Matrix,Times> operator*(const Matrix& m1, const Matrix& m2)
00086 {
00087     return Expression<Matrix,Matrix,Times>(m1, m2);
00088 }
00089 
00090 //alpha times A times B
00091 
00100 inline Expression<Scalar,Expression<Matrix,Matrix,Times>,Times> operator*(
00101     const Matrix& m1,
00102     const Expression<Scalar,Matrix,Times>& exp)
00103 {
00104     return Expression<Scalar,Expression<Matrix,Matrix,Times>,Times>(exp.getArg1(),Expression<Matrix,Matrix,Times>(m1,exp.getArg2()) );
00105 }
00106 
00115 inline Expression<Scalar,Expression<Matrix,Matrix,Times>,Times> operator*(
00116     const Expression<Scalar,Matrix,Times>& exp,
00117     const Matrix& m1)
00118 {
00119     return Expression<Scalar,Expression<Matrix,Matrix,Times>,Times>( exp.getArg1(), Expression<Matrix,Matrix,Times>(exp.getArg2(),m1) );
00120 }
00121 
00130 inline Expression<Scalar,Expression<Matrix,Matrix,Times>,Times> operator*(
00131     const Scalar& s1,
00132     const Expression<Matrix,Matrix,Times>& exp)
00133 {
00134     return Expression<Scalar,Expression<Matrix,Matrix,Times>,Times>( s1, exp );
00135 }
00136 
00145 inline Expression<Scalar,Expression<Matrix,Matrix,Times>,Times> operator*(
00146     const Expression<Matrix,Matrix,Times>& exp,
00147     const Scalar& s1)
00148 {
00149     return Expression<Scalar,Expression<Matrix,Matrix,Times>,Times>( s1, exp );
00150 }
00151 
00152 //alpha*A*B + beta*C
00153 
00162 inline Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00163                    Expression< Scalar, Matrix, Times>, Plus> operator+(
00164     const Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>& exp1,
00165     const Expression< Scalar, Matrix, Times>& exp2)
00166 {
00167     return Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00168                        Expression< Scalar, Matrix, Times>, Plus>(exp1,exp2);
00169 }
00170 
00179 inline Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00180                    Expression< Scalar, Matrix, Times>, Plus> operator+(
00181     const Expression< Scalar, Matrix, Times>& exp2,
00182     const Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>& exp1)
00183 {
00184     return Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00185                        Expression< Scalar, Matrix, Times>, Plus>(exp1,exp2);
00186 }
00187 
00196 inline Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00197                    Expression< Scalar, Matrix, Times>, Plus> operator-(
00198     const Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>& exp1,
00199     const Expression< Scalar, Matrix, Times>& exp2)
00200 {
00201     return Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00202                        Expression< Scalar, Matrix, Times>, Plus>(exp1,
00203             Expression< Scalar, Matrix, Times>( exp2.getArg1()*-1.0, exp2.getArg2() )
00204         );
00205 }
00206 
00215 inline Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00216                    Expression< Scalar, Matrix, Times>, Plus> operator-(
00217     const Expression< Scalar, Matrix, Times>& exp2,
00218     const Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>& exp1)
00219 {
00220     Expression<Scalar,Expression<Matrix,Matrix,Times>,Times>  e(exp1.getArg1()*-1.0,exp1.getArg2());
00221     return Expression< Expression< Scalar, Expression< Matrix, Matrix, Times>, Times>,
00222                        Expression< Scalar, Matrix, Times>, Plus>( e, exp2 );
00223 }
00224 
00225 }
00226 
00227 #endif // LAMA_MATRIXEXPRESSIONS_HPP_