Advertisement
LilAsian

Метод градиентного спуска для быдла

Dec 6th, 2022
1,326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.31 KB | None | 0 0
  1. import matplotlib as mp
  2. h = 0.31 #шаг итераций
  3. x1 = 0 #начальные точки
  4. x2 = 0
  5. e = 0.0001
  6. crit = 1.0 #критерий остановки
  7. stariy_cal = 2.0
  8. noviy_cal = 1.0
  9. k = 0
  10. def new_func(x,y):
  11.     new_func = 2*x**2+x*y+y**2+x+y #тут записываем вашу функцию
  12.     return new_func
  13. def grad_f(x1,x2,crit,stariy_cal,noviy_cal,k):
  14.     while (crit > e) and (stariy_cal > noviy_cal):
  15.         print(f'итерация: {k}')
  16.         f1 = 4*x1+x2+1 #тут записываем частную производную от функции по x1
  17.         f2 = x1+2*x2+1 #тут по x2
  18.         print(f'градиент функции с на данной итерации: ({f1} ; {f2})')
  19.         crit = (f1**2 +f2**2)**0.5
  20.         print(f'критерий остановки {crit} < {e})')
  21.         new_x1 = x1 - h*f1
  22.         new_x2 = x2 - h*f2
  23.         stariy_cal = new_func(x1,x2)
  24.         noviy_cal = new_func(new_x1,new_x2)
  25.         print(f'делаем шаг по направлению градиента: ({new_x1} ; {new_x2})')
  26.         print(f'новая функция: ({noviy_cal}')
  27.         print('----------------------------------------')
  28.         x1 = new_x1
  29.         x2 = new_x2
  30.         k += 1
  31.     return x1, x2
  32. grad_f(x1,x2,crit,stariy_cal,noviy_cal,k)
  33. print(x1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement