input: Write a python function to find the minimum of a function using gradient descent.
  assert optimize(lambda x: x**2, 0.1, 1000) < 1e-3
  assert optimize(lambda x: (x-3)**2, 0.1, 1000) - 3 < 1e-3
  assert optimize(lambda x: (x+5)**2, 0.1, 1000) + 5 < 1e-3
output: def optimize(func, learning_rate, iterations):
      x = 0.0
      for _ in range(iterations):
          grad = (func(x + 1e-5) - func(x)) / 1e-5
          x -= learning_rate * grad
      return x