Computes the gradient vector or matrix (Jacobian) of a vector-valued function that has been defined in a
procedure. Single-sided (forward difference) gradients are computed.
gradcplx() allows for
&fct – a pointer to a vector-valued function (fct: \(Kx1 → Nx1\)) defined as a procedure. It is acceptable for \(fct(x)\) to have been defined in terms of global arguments in addition to x, and thus fct can return an Nx1 vector:
proc fct(x); retp( exp(x.*b)); endp;
x0 (Kx1 vector) – points at which to compute gradient
g (NxK matrix) – containing the gradients of fct with respect to the variable x at x0.
proc myfunc(x); retp(x .* 2 .* exp( x .* x ./ 3 )); endp; x0 = 2.5|3.0|3.5; y = gradp(&myfunc, x0);
After the code above, y is equal to:
82.989017 0.00000000 0.00000000 0.00000000 281.19753 0.00000000 0.00000000 0.00000000 1087.9541
- It is a 3x3 matrix because we are passing it 3 arguments and
myfuncreturns 3 results when we do
that; the off-diagonals are zeros because the cross-derivatives of 3 arguments are 0.
gradp() will return a row for every row that is returned by fct. For
instance, if fct returns a scalar result, then
gradp() will return a 1xK row
vector. This allows the same function to be used regardless of N, where
N is the number of rows in the result returned by fct. Thus, for instance,
gradp() can be used to compute the Jacobian matrix of a set of equations.