Updating matrix and vector class functionality 17/24217/3
authorRamasamy <ram.kannan@samsung.com>
Wed, 9 Jul 2014 04:31:40 +0000 (10:01 +0530)
committerRamasamy Kannan <ram.kannan@samsung.com>
Wed, 30 Jul 2014 02:51:08 +0000 (19:51 -0700)
 - Adding multiplication method for matrix class
 - Adding transpose method for vector class

signed-off-by: Ramasamy <ram.kannan@samsung.com>
Change-Id: I24fc52221e3d10bebf9016e944d38e3ffd314b2a

src/sensor_fusion/standalone/util/matrix.cpp
src/sensor_fusion/standalone/util/matrix.h
src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp
src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp
src/sensor_fusion/standalone/util/vector.cpp
src/sensor_fusion/standalone/util/vector.h

index 2c37690..9ce7487 100755 (executable)
@@ -257,7 +257,7 @@ bool operator !=(const matrix<T> m1, const matrix<T> m2)
 }
 
 template <typename T>
-matrix<T> transpose(const matrix<T> m)
+matrix<T> tran(const matrix<T> m)
 {
        matrix<T> m1(m.m_cols, m.m_rows);
 
@@ -268,4 +268,23 @@ matrix<T> transpose(const matrix<T> m)
        return m1;
 }
 
+
+template <typename T>
+matrix<T> mul(const matrix<T> m1, const matrix<T> m2)
+{
+       assert(m2.m_cols == 1);
+       assert(m1.m_cols == m2.m_rows);
+
+       matrix<T> m3(m1.m_rows, 1);
+
+       for (int i = 0; i < m1.m_rows; i++)
+       {
+                       m3.m_mat[i][0] = 0;
+                       for (int k = 0; k < m2.m_rows; k++)
+                               m3.m_mat[i][0] += m1.m_mat[i][k] * m2.m_mat[k][0];
+       }
+
+       return m3;
+}
+
 #endif //_MATRIX_H
index 1a49c2f..d2b2c29 100755 (executable)
@@ -60,7 +60,9 @@ public:
        template<typename T> friend bool operator !=(const matrix<T> m1,
                        const matrix<T> m2);
 
-       template<typename T> friend matrix<T> transpose(const matrix<T> m);
+       template<typename T> friend matrix<T> tran(const matrix<T> m);
+       template <typename T> friend matrix<T> mul(const matrix<T> m1,
+                       const matrix<T> m2);
 };
 
 #include "matrix.cpp"
index e065dd3..ed00949 100644 (file)
@@ -30,6 +30,7 @@ int main()
        float arr3[3][3] = {{20.2, 40.5, 10.0}, {3.6, 52.0, 5.5}, {1.0, 45.5, 66.6}};
        float arr4[3][3] = {{2.24, 0.5, 0.023}, {3.675, 5.32, 0.556}, {1.023, 45.75, 621.6}};
        float arr8[3][3] = {{4.75, 0.65, 0.123}, {0.075, 5.302, 0.56}, {1.113, 0.475, 2.362}};
+       float arr9[3][3] = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
 
        matrix<float> m1(2, 2, (float *) arr0);
        matrix<float> m2(2, 2, (float *) arr1);
@@ -43,6 +44,7 @@ int main()
        matrix<float> m20(1, 3, (float *) arr11);
        matrix<float> m21(3, 1, (float *) arr12);
        matrix<float> m22(2, 3, (float *) arr15);
+       matrix<float> m9(3, 3, (float *) arr9);
 
        cout<< "Constructor Test\n";
        cout<< "\n" << m6;
@@ -71,6 +73,9 @@ int main()
        cout<< "\nProduct:\n" << m3 << endl;
        cout<< "\n" << m20 << "\n" << m21;
        cout<< "\nProduct:\n" << m7 << endl;
+       cout<< "\n" << m9 << "\n" << m21;
+       m21 = mul(m9, m21);
+       cout<< "\nProduct:\n" << m21 << endl;
 
        cout<< "\n\n\nDivision\n";
        m3 = m1 / (float)2.5;
@@ -116,7 +121,7 @@ int main()
        cout<< "\n\n" << m12;
        cout<< "\nResult:\n\n" << m6;
 
-       m6 = transpose(m15);
+       m6 = tran(m15);
        cout<< "\n\n\nTranspose:";
        cout << "\n\n" << m15;
        cout << "\nResult:\n\n" << m6;
index a5da38d..725934f 100644 (file)
@@ -132,6 +132,10 @@ int main()
        cout << "\nResult:\n\n";
        matrix<float> m101 = (transpose(v20));
        cout << m101;
+       cout << "\n\n" << m101;
+       cout << "\nResult:\n\n";
+       v20 = (transpose(m101));
+       cout << v20;
 
        cout << "\n\nv1:\n\n" << v1;
        cout << "\n\nv2:\n\n" << v2;
index d2df648..e063d6e 100644 (file)
@@ -247,6 +247,17 @@ matrix<T> transpose(const vector<T> v)
 }
 
 template <typename T>
+vector<T> transpose(const matrix<T> m)
+{
+       vector<T> v(m.m_rows);
+
+       for (int i = 0; i < m.m_rows; i++)
+               v.m_vec[i] = m.m_mat[i][0];
+
+       return v;
+}
+
+template <typename T>
 T mul(const vector<T> v, const matrix<T> m)
 {
        assert(m.m_rows == v.m_size);
index b0daa3e..21566ea 100644 (file)
@@ -62,6 +62,7 @@ public:
        template<typename T> friend T mul(const vector<T> v, const matrix<T> m);
        template<typename T> friend void insert_end(vector<T>& v, T val);
        template<typename T> friend matrix<T> transpose(const vector<T> v);
+       template <typename T> friend vector<T> transpose(const matrix<T> m);
        template<typename T> friend vector<T> cross(const vector<T> v1,
                        const vector<T> v2);
        template <typename T> friend T var(const vector<T> v);