docs: def gradient_descent(self, start_x=None, tolerance=1.0e-6):
          """
          Optimise value of x using gradient descent
          """
          if start_x is None:
              start_x = self._analytical_fitter.fit(self._c)
          return optimise_gradient_descent(start_x, self._a, self._c, tolerance)