gradp, gradcplx


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 complex arguments.


g = gradp(&fct, x0)
g = gradcplx(&fct, x0)

&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));

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 ));

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 myfunc returns 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.



See also

Functions hessp(), hesscplx()