input: Write a function to find the local minima of a given objective function using gradient descent.
  assert find_local_minima(objective_function) == -3.0
  assert objective_function(find_local_minima(objective_function)) < objective_function(-2.99)
output: def find_local_minima(objective_function):
      def gradient(f, x, h=1e-5):
          return (f(x + h) - f(x - h)) / (2 * h)
  
      x = 0.0  # Initial guess
      learning_rate = 0.01
      tolerance = 1e-5
      max_iterations = 10000
  
      for _ in range(max_iterations):
          grad = gradient(objective_function, x)
          new_x = x - learning_rate * grad
  
          if abs(new_x - x) < tolerance:
              break
  
          x = new_x
  
      return round(x, 1)