lines 19-97 of file: speed/src/link_mat_mul.cpp

{xrst_begin link_mat_mul}
{xrst_spell
   dz
}

Speed Testing Derivative of Matrix Multiply
###########################################

Prototype
*********
{xrst_literal
   // BEGIN PROTOTYPE
   // END PROTOTYPE
}

Purpose
*******
Each :ref:`speed_main@package`
must define a version of this routine as specified below.
This is used by the :ref:`speed_main-name` program
to run the corresponding speed and correctness tests.

Return Value
************
If this speed test is not yet
supported by a particular *package* ,
the corresponding return value for ``link_mat_mul``
should be ``false`` .

n
*
The argument *n* is the number of rows and columns
in the square matrix *x* .

repeat
******
The argument *repeat* is the number of different argument values
that the derivative of *z* (or just the value of *z* )
will be computed.

x
*
The argument *x* is a vector with
*x* . ``size`` () = *size* * *size* elements.
The input value of its elements does not matter.
The output value of its elements is the last random matrix
that is multiplied and then summed to form *z* ;

.. math::

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

where *s* = *size* .

z
*
The argument *z* is a vector with one element.
The input value of the element does not matter.
The output of its element the sum of the elements of
*y* = *x* * *x* ; i.e.,

.. math::
   :nowrap:

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

dz
**
The argument *dz* is a vector with
*dz* . ``size`` () = *size* * *size* .
The input values of its elements do not matter.
The output value of its elements form the
derivative of *z* with respect to *x* .

{xrst_end link_mat_mul}
