Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from algopy import UTPM
- import math
- from numpy import *
- # --- Эту функцию программирует обучающийся!!! ----
- # функция вычисления градиента функции f в точке r
- # на выходе - вектор градиента в виде numpy array
- def f(r):
- f1 = r[0]**4 + 2*r[1]**2
- return f1
- def gradfun(f, r):
- x = UTPM.init_jacobian(r)
- y = f(x)
- grad = UTPM.extract_jacobian(y)
- i = 0
- for k in grad:
- i = i + k**2
- return math.sqrt(i)
- def gradfun1(f, r0):
- # задаем вычисление градиента функции f
- x = UTPM.init_jacobian(r)
- y = f(x)
- grad = UTPM.extract_jacobian(y)
- return grad
- # --- Эту функцию программирует обучающийся!!! ----
- # maxiter - ограничивает кол-во итераций,
- # т.е. список не должен превышать maxiter+1 элемент !
- def gradsteps(f, r0, epsg=0.1, alfa=0.01, maxiter=100):
- # организуем градиентный спуск
- xlist = [r0]
- iter = 0
- while ((iter < maxiter) and (abs(gradfun(f, r0)) >= epsg)):
- iter = iter + 1
- r0 = r0 - (alfa * gradfun1(f, r0))
- xlist.append(r0.tolist())
- return xlist
- r = (1, 0)
- r0 = (1, 1)
- print(gradfun(f, r))
- print(gradfun1(f, r))
- print(gradsteps(f, r0, epsg=0.1, alfa=0.01, maxiter=100))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement