Вечный цикл в python matplotlib

Есть у меня программа для реализации метода оптимизации с использованием производных.

Но у меня возникла очень критическая ошибка

Во время выполнения программы происходить вечный цикл, и программа перестает работать у меня.

Вот сам код

import numpy as n
import matplotlib.pyplot as pl


def f(x):
    return 3 * x ** 2 + (12 / (x ** 3 + 1e-7) ) - 5


def fp(x):
    return 6 * x - (36 / (x ** 4 + 1e-7) )


def fpp(x):
    return 6 * (1 + 24 / x ** 5)


x5 = n.linspace(0.5, 2.5, 100)
F1 = f(x5)
F2 = fp(x5)
pl.plot(x5, F1, 'g--', label='Fun1')
pl.plot(x5, F2, 'g--', label='Fun2')
pl.grid()
pl.legend()
pl.show()
print('метод Ньютона-Рафсона')

x1 = 1
e = 1e-3
n = 1

x2 = x1 - fp(x1) / fpp(x1)

while abs(fp(x2) > e):
    x1 = x2
    x2 = x1 - fp(x1) / fpp(x1)
    n += 1
print('n =', n, 'f =', f(x2), 'x =', x2)

print('метод середньої точки (пошук Больцано)')
n = 0
x = 0
d = 1
e = 1e-3
L = x - d
R = x + d
y = fp(x)
while (fp(L) * y) > 0 and (fp(R) * y) > 0:
    L = L - d
    R = R + d
if (fp(L) * y) < 0:
    R = x
else:
    L = x
y1 = fp(L)
y2 = fp(R)
if y1 * y2 >= 0:
    print('Корнів немає')
else:
    n = 0
    x = (L + R) / 2
    y3 = fp(x)
    while abs(y3) > e:
        x = (L + R) / 2
        y3 = fp(x)
        if y1 * y3 < 0:
            R = x
        else:
            L = x
        n += 1
    print('n =', n, 'f =', f(x), 'x =', x)

print('метод січних (метод хорд)')
x = 0
d = 1
e = 1e-3
n = 0
L = x - d
R = x + d
y = fp(x)
while fp(L) * y > 0 and fp(R) * y > 0:
    L = L - d
    R = R + d
if fp(L) * y < 0:
    R = x
    y1 = fp(L)
    y2 = fp(R)
else:
    L = x
x = R - fp(R) * (R - L) / (fp(R) - fp(L))
n = 1
y3 = fp(x)
while abs(y3) > e:
    if y1 * y3 < 0:
        R = x
    else:
        L = x
    x = R - fp(R) * (R - L) / (fp(R) - fp(L))
    y3 = fp(x)
    y1 = fp(L)
    y2 = fp(R)
    n += 1
print('n =', n, 'f =', f(x), 'x =', x)

# FIXME PLEASE!!!!!!
print('метод оптимізації з використанням кубічної апроксимації')
x = 0
d = 1
e1 = 1e-3
e2 = 1e-3
y = fp(x)
L = x - d
R = x + d
while (fp(L) * y) > 0 and (fp(R) * y) > 0:
    L = L - d
    R = R + d
if (fp(L) * y) < 0:
    R = x
else:
    L = x

n = 0
print('n =', n, 'f =', f(x), 'x =', x)
while abs(f(x)) > e1 or abs(fp(x)) > e2:
    z = 3 * (f(L) - f(R) / (R - L)) + fp(L) + fp(R)
    b = (z ** 2 - fp(L) * fp(R)) ** (1 / 2)
    m = (fp(R) + b - z) / (fp(R) - fp(L) + 2 * b)
    print('n =', n, 'f =', f(x), 'x =', x)
    if m < 0:
        x = R
    else:
        if m > 1:
            x = L
        else:
            x = R - m * (R - L)
    while f(x) > f(L):
        x = x - 0.5 * (x - L)
        print('n =', n, 'перехід до наступної точки')
        if fp(L) * fp(x) < 0:
            R = x
        else:
            L = x
    n += 1
print('n =', n, 'f =', f(x), 'x =', x)

Буду рад помощи.

Спасибо за внимания


Ответы (0 шт):