Beispiel #1
0
def gradFibonacci(xx: float, eps: float, x_min: float, x_max: float, dataPlot):
    stop = False
    p = plot(dataPlot.x_left, dataPlot.x_right, dataPlot.pr)

    p.on(xx)

    i = 0
    while not stop:
        #p.showPoint(xx)

        def a(lmb):
            return f(xx - lmb * df(xx))

        x_l = xx

        lmd = fibonacci(a, x_min, x_max, eps)
        xx = xx - lmd * df(xx)

        i += 1

        #print("itter:", i, "| x:", xx)

        if (abs(x_l - xx) < Decimal(eps)
                and math.fabs(f(x_l) - f(xx)) < Decimal(eps)):
            stop = True

    p.off(xx)

    return xx, i
Beispiel #2
0
def gradFrag(lmd: float, xx: float, eps: float, dataPlot):
    stop = False

    #p = plot(dataPlot.x_left, dataPlot.x_right, dataPlot.pr)
    #p.on(xx)

    i = 0
    while not stop:
        #p.showPoint(xx)

        x_l = xx
        xx = x_l - lmd * df(x_l)
        a1 = f(xx - lmd * df(xx))
        a2 = f(x_l) - lmd * abs(df(x_l)**2)

        #while f(xx - lmd * df(xx)) <= f(x_l) - lmd*abs(df(x_l)**2):
        while a1 > a2:
            lmd /= 2
            print("IT HAPPend")
            break
        i += 1
        print("itter:", i, "| x:", xx)

        if (abs(x_l - xx) < Decimal(eps)
                and math.fabs(f(x_l) - f(xx)) < Decimal(eps)):
            stop = True

    #p.off(xx)

    return xx, i
Beispiel #3
0
    def on(self, xx: float):
        self.x_plt = np.arange(self.x_left, self.x_right, self.pr)
        self.f_plt = [f(x) for x in self.x_plt]

        plt.ion()  # включение интерактивного режима отображения графиков
        self.fig, self.ax = plt.subplots()  # Создание окна и осей для графика
        self.ax.grid(True)  # отображение сетки на графике
        self.ax.plot(self.x_plt, self.f_plt)  # отображение параболы
        self.point = self.ax.scatter(
            xx, f(xx), c='red')  # отображение точки красным цветом

        return
Beispiel #4
0
    def off(self, xx: float):

        # выключение интерактивного режима отображения графиков
        plt.ioff()
        self.ax.scatter(xx, f(xx), c='blue')
        plt.show()

        return
Beispiel #5
0
    def showPoint(self, xx: float):
        self.point.set_offsets([xx,
                                f(xx)])  # отображение нового положения точки

        # перерисовка графика и задержка на 20 мс
        self.fig.canvas.draw()
        self.fig.canvas.flush_events()
        time.sleep(0.05)

        return
Beispiel #6
0
def gradConst(lmd: float, xx: float, eps: float, dataPlot):
    stop = False
    i = 0
    p = plot(dataPlot.x_left, dataPlot.x_right, dataPlot.pr)
    p.on(xx)

    while not stop:
        #p.showPoint(xx)

        x_l = xx
        xx = x_l - lmd * df(x_l)
        i += 1
        #print("itter:", i, "| x:", xx)

        if (abs(x_l - xx) < Decimal(eps)
                and math.fabs(f(x_l) - f(xx)) < Decimal(eps)):
            stop = True

    p.off(xx)

    return xx, i
Beispiel #7
0
def newton(xx:float, x_min, x_max, eps:float, dataPlot, lmd = 0.1):
    stop = False

    p = plot(dataPlot.x_left, dataPlot.x_right, dataPlot.pr)
    p.on(xx)

    i = 0
    #arg_xx = numpy.array([x_min, x_max])
    while not stop:
        i += 1
        p.showPoint(xx)

        x_l = xx

        xx = x_l - f(x_l) / df(x_l)

        print("itter:", i, "| x:", xx)
        if math.fabs(f(x_l) - f(xx)) < Decimal(eps):
            stop = True

    p.off(xx)

    return xx, i
Beispiel #8
0
 def a(lmb):
     return f(xx - lmb * df(xx))
 def ff(lmb):
     return f(xx + lmd * pp)