\(\renewcommand\AA{\unicode{x212B}}\)

Analytical DerivativesΒΆ

By default, currently for IFunction1D types, a numerical derivative is calculated. An analytical derivative can be supplied by defining a functionDeriv1D method, which takes three arguments: self, xvals and jacobian. The jacobian matrix (notice how it is not square) stores the values of the partial derivatives with respect to each of the parameter values at each of the x points.

This is most easily understood with an example:

class Example1DFunction(IFunction1D):

    def init(self):
        self.declareParameter("A0", 0.0)
        self.declareParameter("A1", 0.0)

    def function1D(self, xvals):
        a0 = self.getParameterValue("A0")
        a1 = self.getParameterValue("A1")

        # Use numpy arithmetic to compute new array
        return a0 + a1*xvals

    def functionDeriv1D(self, xvals, jacobian):
        for i, x in enumerate(xvals):
            jacobian.set(i, 0, 1) # parameter at index 0
            jacobian.set(i, 1, x) # parameter at index 1

FunctionFactory.subscribe(Example1DFunction)