Почему алгоритм градиентного спуска не сходится?

#python #pandas #optimization

Вопрос:

Почему алгоритм не сходится? Я перепробовал все, но я не могу заставить что-то сходиться или найти, где ошибка, проблема в том, чтобы оптимизировать функцию, начиная с 5.12 и -5.12

   import numpy as np 
  import pandas as pd
  x1 = sym.Symbol('x1')
  x2 = sym.Symbol('x2') 
  z=[x1,x2]
  fun =  2*a   x1**2   x2**2 - a*(sym.cos(2*sym.pi*x1) sym.cos(2*sym.pi*x2))
  a = 10 
  grad_simb = gradiente_simbolico(fun,z) 
  hess_simb = hessiana_simbolico(grad_simb,z)
  x =[5.12,-5.12]
  x = np.array(x)
  g = eval_gradiente(grad_simb,z,x)
  print('Gradiente: ',g)
  H = eval_hessiana(hess_simb,z,x)
  print('Hessiana:', H)
  g1 = np.array(g)
     #Dataframe
  cols = ['i','x(i)','x(i 1)','G','Solução','Erro']
  df = pd.DataFrame([], columns=cols)
  i=1
  e=0.1
  tolerancia = 1e-3
  max_it = 100
  alpha = 0.01
  #d = -1*g1
  #while (e > 1e-3):
  for i in range(max_it):
    sol=np.abs(np.linalg.norm(g1))
    row=pd.DataFrame([[i,x,x-sol,g,sol,e]],columns=cols)
    df = df.append(row, ignore_index=True)
    x = x - alpha * sol
    g = eval_gradiente(grad_simb,z,x)
    H = eval_hessiana(hess_simb,z,x)
    #Computação do erro
    e=g1[0]*g1[0] g1[1]*g1[1]
    i =1
  df