Prev Next matrix_prod

Matrix Product

Syntax
Matlab or Octave z = x * y
C++ z = prod(xy)

Matlab or Octave
If x is an @(@ m \times n @)@ matrix and y is an @(@ n \times p @)@ matrix,
     
z = x * y
sets z to the @(@ m \times p @)@ matrix with the @(@ (i,j) @)@ element given by @[@ z_{i,j} = \sum_{k=1}^n x_{i,k} y_{k,j} @]@

Example
     function [ok] = matrix_prod_ok()
     ok  = true;
     m   = 3;
     n   = 2;
     p   = 4;
     x   = rand(m, n);
     y   = rand(n, p);
     % --------------
     z      = x * y;
     % --------------
     [m, p] = size(z);
     ok     = ok & (m == 3);
     ok     = ok & (p == 4);
     for i = [1 : m]
     	for j = [1 : p]
     		zij = 0;
     		for k = [1 : n]
     			zij = zij + x(i, k) * y(k, j);
     		end
     		ok  = ok & abs(z(i, j) - zij) < 1e-10;
     	end
     end
     return 


C++
The corresponding C++ syntax is
     
z = prod(xy)
where x, y and z are ublas matrix<double> objects with sizes @(@ m \times n @)@, @(@ n \times p @)@ and @(@ m \times p @)@ respectively.

Example
     # include <boost/numeric/ublas/matrix.hpp>
     # include <mat2cpp.hpp>
     bool matrix_prod_ok(void)
     {	bool   ok  = true;
     	using namespace mat2cpp;
     
     	size_t i, j, k, m(3), n(2), p(4);
     	matrix<double> x = rand(m, n);
     	matrix<double> y = rand(n, p);
     	// ---------------------------
     	matrix<double> z = prod(x, y);
     	// ---------------------------
     	ok &= (z.size1() == m);
     	ok &= (z.size2() == p);
     	for(i = 0; i < m; i++)
     	{	for(j = 0; j < p; j++)
     		{	double zij = 0.;
     			for(k = 0; k < n; k++)
     				zij += x(i,k) * y(k,j);
     			ok &= std::fabs(z(i, j) - zij) < 1e-10;
     		}
     	}
     	return ok;
     }


Input File: omh/matrix_prod.omh