Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. # --- Эту функцию программирует обучающийся!!! ----
  2. def optfun(x0, k1=3, k2=20):
  3. # задаем вычисление оптимизируемой функции
  4. f=x0**4 + k1*x0**3 - k2*x0**2 + x0 - 1
  5.  
  6. return f
  7.  
  8. def derivative(x0, k1=3, k2=20):
  9. df = 4*x0**3 + 3*k1*x0**2 - 2*k2*x0 + 1
  10. return df
  11.  
  12. # --- Эту функцию программирует обучающийся!!! ----
  13. # maxiter - ограничивает кол-во итераций,
  14. # т.е. список не должен превышать maxiter+1 элемент !
  15. def gradsteps(x0, epsg=0.05, alfa=0.01, k1=3, k2=20, maxiter=100):
  16. # организуем градиентный спуск
  17. xlist = [x0]
  18. iter = 0
  19. while abs(derivative(x0, k1, k2)) >= epsg and iter < maxiter:
  20. x0 = x0 - alfa*derivative(x0, k1, k2)
  21. xlist.append(x0)
  22. iter+=1
  23. return xlist
  24.  
  25. def newtonstep(x0, epsg=0.05, k1=3, k2=20, maxiter=100):
  26. xlist = [x0]
  27. iter = 0
  28. while abs(derivative(x0, k1, k2)) >= epsg and iter < maxiter:
  29. alfa = 1/(derivative(x0, k1, k2))
  30. x0 = x0 - alfa*derivative(x0, k1, k2)
  31. xlist.append(x0)
  32. iter+=1
  33. return xlist
  34.  
  35. def dihotomia(epsg=0.05, a = -6, b = 0): # из лекций
  36. xlist = [x0]
  37. iter = 0
  38. delta = epsg/20
  39. while (b - a) > 2*epsg:
  40. x1 = (b+a)/2 - delta
  41. x2 = (b+a)/2 + delta
  42. if derivative(x1) > derivative(x2):
  43. a = x1
  44. if derivative(x1) < derivative(x2):
  45. b = x2
  46. if derivative(x1) == derivative(x2):
  47. a = x1
  48. b = x2
  49. xlist.append(a)
  50. xlist.append(b)
  51. return xlist
  52.  
  53. def dihotomia(epsg=0.05, a = -6, b = 0): # из mathsemestr
  54. xlist = [x0]
  55. iter = 0
  56.  
  57. x0 = 4
  58. k1 = 3
  59. k2 = 20
  60.  
  61. a = -6
  62. b = 0
  63. epsg = 0.05
  64.  
  65. print(gradsteps(x0))
  66. print(newtonstep(x0))
  67. print(dihotomia(epsg, a, b))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement