![]() |
Prev | Next | matrix_prod |
Matlab or Octave |
z = x * y
|
C++ |
z = prod( x, y)
|
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}
@]@
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
z = prod(
x,
y)
where x, y and z are
ublas matrix<double>
objects with sizes
@(@
m \times n
@)@, @(@
n \times p
@)@ and
@(@
m \times p
@)@ respectively.
# 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;
}