lines 8-126 of file: include/cppad/speed/mat_sum_sq.hpp

{xrst_begin mat_sum_sq}

Sum Elements of a Matrix Times Itself
#####################################

Syntax
******

   # ``include <cppad/speed/mat_sum_sq.hpp>``

*mat_sum_sq* ( ``n`` , ``x`` , ``y`` , ``z`` )

Purpose
*******
This routine is intended for use with the matrix multiply speed tests;
to be specific, it computes

.. math::
   :nowrap:

   \begin{eqnarray}
      y_{i,j} & = & \sum_{k=0}^{n-1} x_{i,k} x_{k,j}
      \\
      z_0     & = & \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} y_{i,j}
   \end{eqnarray}

see :ref:`link_mat_mul-name` .

Inclusion
*********
The template function ``mat_sum_sq`` is defined in the ``CppAD``
namespace by including
the file ``cppad/speed/mat_sum_sq.hpp``
(relative to the CppAD distribution directory).

n
*
This argument has prototype

   ``size_t`` *n*

It specifies the size of the matrices.

x
*
The argument *x* has prototype

   ``const`` *Vector* & *x*

and *x* . ``size`` () == *n* * *n* .
It contains the elements of :math:`x` in row major order; i.e.,

.. math::

   x_{i,j} = x [ i * n + j ]

y
*
The argument *y* has prototype

   *Vector* & *y*

and *y* . ``size`` () == *n* * *n* .
The input value of its elements does not matter.
Upon return,

.. math::
   :nowrap:

   \begin{eqnarray}
      y_{i,j}        & = & \sum_{k=0}^{n-1} x_{i,k} x_{k,j}
      \\
      y[ i * n + j ] & = & y_{i,j}
   \end{eqnarray}

z
*
The argument *d* has prototype

   *Vector* & *z*

.
The input value of its element does not matter.
Upon return

.. math::
   :nowrap:

   \begin{eqnarray}
      z_0 & = & \sum_{i=0}^{n-1} \sum_{j=0}^n y_{i,j}
      \\
      z[0] & = & z_0
   \end{eqnarray}

Vector
******
The type *Vector* is any
:ref:`SimpleVector-name` , or it can be a raw pointer to the vector elements.
The element type must support
addition, multiplication, and assignment to both its own type
and to a double value.
{xrst_toc_hidden
   speed/example/mat_sum_sq.cpp
   xrst/mat_sum_sq_hpp.xrst
}

Example
*******
The file
:ref:`mat_sum_sq.cpp-name`
contains an example and test of ``mat_sum_sq.hpp`` .

Source Code
***********
The file
:ref:`mat_sum_sq.hpp-name`
contains the source for this template function.

{xrst_end mat_sum_sq}
