Почему моя реализация градиентного спуска на python производит выходные данные так медленно? - PullRequest
0 голосов
/ 26 марта 2019

Почему выходные данные из кода становятся медленными с каждой последовательной итерацией?

Я хочу написать рабочий код, который реализует метод градиентного спуска и метод Ньютона для одной и той же функции, и я хочу сравнить скорости и итерации для обоих методов, чтобы прийти к приближенному решению.

Этот фрагмент кода предназначен только для градиентного спуска, и вывод кажется замедленным для каждой итерации. Таким образом, я получил первые 10 выводов относительно быстро, после этого каждый выход занимал как минимум 5-6 секунд или больше.

#A python program to approximate a root of a polynomial
#using the newton-raphson method
import math
#f(x) - the function of the polynomial
h = 0.000001

def f(x):
    function = (x*x*x) - (2*x) - 1
    return function

def derivative(h,x): #function to find the derivative of the polynomial
    derivative = (f(x + h) - f(x)) / h
    return derivative

def GD(h,x):
    return (x - h*derivative(h,x))

# p - the initial point i.e. a value closer to the root

# n - number of iterations 

def iterate(p, n): #
    x = 0
    for i in range(n):
        if i == 0: #calculate first approximation
            x = GD(h,p)
        else:
            x = GD(h,iterate(x, n)) #iterate the first and subsequent approximations
        n=n-1
    return x

for i in range(100):
    print (iterate(1, i)) #print the root of the polynomial x^3 - 2x - 1 using 3 iterations and taking initial point as 1

Я не могу понять, происходит ли это из-за кода или градиентного спуска.

...