Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # --- Эту функцию программирует обучающийся!!! ----
- def optfun(x0, k1=3, k2=20):
- # задаем вычисление оптимизируемой функции
- f=x0**4 + k1*x0**3 - k2*x0**2 + x0 - 1
- return f
- def derivative(x0, k1=3, k2=20):
- df = 4*x0**3 + 3*k1*x0**2 - 2*k2*x0 + 1
- return df
- # --- Эту функцию программирует обучающийся!!! ----
- # maxiter - ограничивает кол-во итераций,
- # т.е. список не должен превышать maxiter+1 элемент !
- def gradsteps(x0, epsg=0.05, alfa=0.01, k1=3, k2=20, maxiter=100):
- # организуем градиентный спуск
- xlist = [x0]
- iter = 0
- while abs(derivative(x0, k1, k2)) >= epsg and iter < maxiter:
- x0 = x0 - alfa*derivative(x0, k1, k2)
- xlist.append(x0)
- iter+=1
- return xlist
- def newtonstep(x0, epsg=0.05, k1=3, k2=20, maxiter=100):
- xlist = [x0]
- iter = 0
- while abs(derivative(x0, k1, k2)) >= epsg and iter < maxiter:
- alfa = 1/(derivative(x0, k1, k2))
- x0 = x0 - alfa*derivative(x0, k1, k2)
- xlist.append(x0)
- iter+=1
- return xlist
- def dihotomia(epsg=0.05, a = -6, b = 0): # из лекций
- xlist = [x0]
- iter = 0
- delta = epsg/20
- while (b - a) > 2*epsg:
- x1 = (b+a)/2 - delta
- x2 = (b+a)/2 + delta
- if derivative(x1) > derivative(x2):
- a = x1
- if derivative(x1) < derivative(x2):
- b = x2
- if derivative(x1) == derivative(x2):
- a = x1
- b = x2
- xlist.append(a)
- xlist.append(b)
- return xlist
- def dihotomia(epsg=0.05, a = -6, b = 0): # из mathsemestr
- xlist = [x0]
- iter = 0
- x0 = 4
- k1 = 3
- k2 = 20
- a = -6
- b = 0
- epsg = 0.05
- print(gradsteps(x0))
- print(newtonstep(x0))
- print(dihotomia(epsg, a, b))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement