Загрузка данных


import math

# Функция варианта 7

def f(x):

    return 0.85 * x**2 - 4.148 * x + 7.71

# ---------------- ДИХОТОМИЯ ----------------

def dichotomy(a, b, eps):

    delta = eps / 2

    iterations = 0

    while (b - a) > eps:

        x0 = (a + b) / 2

        x1 = x0 - delta

        x2 = x0 + delta

        if f(x1) < f(x2):

            b = x2

        else:

            a = x1

        iterations += 1

    xmin = (a + b) / 2

    return xmin, f(xmin), iterations

# ------------- ЗОЛОТОЕ СЕЧЕНИЕ -------------

def golden_section(a, b, eps):

    tau = (math.sqrt(5) - 1) / 2

    x1 = a + (1 - tau) * (b - a)

    x2 = a + tau * (b - a)

    f1 = f(x1)

    f2 = f(x2)

    iterations = 0

    while (b - a) > eps:

        if f1 < f2:

            b = x2

            x2 = x1

            f2 = f1

            x1 = a + (1 - tau) * (b - a)

            f1 = f(x1)

        else:

            a = x1

            x1 = x2

            f1 = f2

            x2 = a + tau * (b - a)

            f2 = f(x2)

        iterations += 1

    xmin = (a + b) / 2

    return xmin, f(xmin), iterations

# ---------------- ФИБОНАЧЧИ ----------------

def fibonacci_method(a, b, eps):

    # Создаем числа Фибоначчи

    fib = [1, 1]

    while fib[-1] < (b - a) / eps:

        fib.append(fib[-1] + fib[-2])

    n = len(fib) - 1

    x1 = a + (fib[n - 2] / fib[n]) * (b - a)

    x2 = a + (fib[n - 1] / fib[n]) * (b - a)

    f1 = f(x1)

    f2 = f(x2)

    iterations = 0

    for i in range(1, n - 1):

        if f1 < f2:

            b = x2

            x2 = x1

            f2 = f1

            x1 = a + (fib[n - i - 2] / fib[n - i]) * (b - a)

            f1 = f(x1)

        else:

            a = x1

            x1 = x2

            f1 = f2

            x2 = a + (fib[n - i - 1] / fib[n - i]) * (b - a)

            f2 = f(x2)

        iterations += 1

    xmin = (a + b) / 2

    return xmin, f(xmin), iterations

# ---------------- ЗАПУСК ----------------

a = 1

b = 6

eps = 0.01

x, y, n = dichotomy(a, b, eps)

print("Метод дихотомии")

print("xmin =", round(x, 5))

print("f(xmin) =", round(y, 5))

print("итераций =", n)

print()

x, y, n = golden_section(a, b, eps)

print("Метод золотого сечения")

print("xmin =", round(x, 5))

print("f(xmin) =", round(y, 5))

print("итераций =", n)

print()

x, y, n = fibonacci_method(a, b, eps)

print("Метод Фибоначчи")

print("xmin =", round(x, 5))

print("f(xmin) =", round(y, 5))

print("итераций =", n)