00001 /* compile this with g++ -Wall -lm -L. -lselforg -o example matrixexample.cpp or use the Makefile*/ 00002 00003 #include <iostream> 00004 #include <math.h> 00005 00006 #include <selforg/matrix.h> 00007 00008 using namespace matrix; 00009 using namespace std; 00010 00011 int main(){ 00012 ////////// matrix construction 00013 // all matrices are initialised with 0 elements 00014 Matrix m0; // 0-matrix (size is 0x0) 00015 m0.set(5,1); // change matrix to be a 5x1 matrix (column vector) 00016 Matrix m1(3,3); // 3x3-matrix 00017 double data[9] = {1., 0., 1., 0.1, 0.4, 0.5, -2., 0.1, 2.}; 00018 m1.set(3,3,data); // change matrix to be 3x3 matrix with initialised elements 00019 Matrix m2(3,3,data); // 3x3 matrix with initialised elements 00020 00021 ////////// Accessing and printing 00022 cout << m2.val(0,0) << endl; // Element with index 0,0 00023 m2.val(2,1) = 3.4; // assign value to element at 2,1 00024 cout << m2.val(2,1) << endl; // Element with index 2,1 00025 00026 cout << m2; // show matrix 00027 cout << m2.row(0); // show first row which is row-vector 00028 cout << m2.column(2); // show third column which is column-vector 00029 00030 ////////// Operations 00031 Matrix m3 = m2 + m2 - m2 * m2; // addition subtraction and multiplication 00032 cout << m3; 00033 Matrix m4 = (m3^T) * (m3^-1) * (m3.multMT()); // transpose and invert and fast version of matrix*matrix^T 00034 // (parentheses needed because ^ bind less than *) 00035 Matrix m5 = m4*0.3; // multiplication with scalar (just right side) 00036 Matrix m6 = m4.multrowwise(m3.column(0)); // multiply m4 rowwise, 00037 // each row with the appropriate element of first column of m3 00038 00039 Matrix m7 = m6.map(sin); // apply sin function to all matrix elements 00040 cout << m7; 00041 00042 return 0; 00043 }