Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. import numpy as np
  2. from algopy import UTPM
  3. import math
  4. from numpy import *
  5.  
  6. # --- Эту функцию программирует обучающийся!!! ----
  7. # функция вычисления градиента функции f в точке r
  8. # на выходе - вектор градиента в виде numpy array
  9.  
  10. def f(r):
  11. f1 = r[0]**4 + 2*r[1]**2
  12. return f1
  13.  
  14. def gradfun(f, r):
  15. x = UTPM.init_jacobian(r)
  16. y = f(x)
  17. grad = UTPM.extract_jacobian(y)
  18. i = 0
  19. for k in grad:
  20. i = i + k**2
  21. return math.sqrt(i)
  22.  
  23. def gradfun1(f, r0):
  24. # задаем вычисление градиента функции f
  25. x = UTPM.init_jacobian(r)
  26. y = f(x)
  27. grad = UTPM.extract_jacobian(y)
  28. return grad
  29.  
  30. # --- Эту функцию программирует обучающийся!!! ----
  31. # maxiter - ограничивает кол-во итераций,
  32. # т.е. список не должен превышать maxiter+1 элемент !
  33. def gradsteps(f, r0, epsg=0.1, alfa=0.01, maxiter=100):
  34. # организуем градиентный спуск
  35. xlist = [r0]
  36. iter = 0
  37. while ((iter < maxiter) and (abs(gradfun(f, r0)) >= epsg)):
  38. iter = iter + 1
  39. r0 = r0 - (alfa * gradfun1(f, r0))
  40. xlist.append(r0.tolist())
  41. return xlist
  42.  
  43. r = (1, 0)
  44. r0 = (1, 1)
  45.  
  46. print(gradfun(f, r))
  47. print(gradfun1(f, r))
  48.  
  49. print(gradsteps(f, r0, epsg=0.1, alfa=0.01, maxiter=100))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement