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


def f(x):

    return x**4 - x - 1

a = -1.1

b = -0.1

h = 0.1

# Узлы x и значения y

x = []

cur = a

while cur <= b + 1e-12:

    x.append(round(cur, 10))

    cur += h

y = [f(xi) for xi in x]

n = len(x)

# Конечные разности

dy = [y[i + 1] - y[i] for i in range(n - 1)]

d2y = [dy[i + 1] - dy[i] for i in range(n - 2)]

d3y = [d2y[i + 1] - d2y[i] for i in range(n - 3)]

d4y = [d3y[i + 1] - d3y[i] for i in range(n - 4)]

# Массивы для вывода

y1 = [""] * n

y2 = [""] * n

R3_1 = [""] * n

R3_2 = [""] * n

# Используем формулы для конечной точки x_n

i = n - 1

y1[i] = (dy[n - 2] + 0.5 * d2y[n - 3]) / h

y2[i] = (d2y[n - 3] + d3y[n - 4]) / h**2

R3_1[i] = (1 / (3 * h)) * d3y[n - 4]

R3_2[i] = (11 / (12 * h**2)) * d4y[n - 5]

# Вывод таблицы конечных разностей

print("Таблица конечных разностей")

print(" i      x          y              Δy             Δ²y            Δ³y            Δ⁴y")

print("-" * 95)

for i in range(n):

    print(

        f"{i:2d}  "

        f"{x[i]:8.2f}  "

        f"{y[i]:14.8f}  "

        f"{dy[i] if i < len(dy) else '':>14.8f}  " if i < len(dy) else

        f"{i:2d}  {x[i]:8.2f}  {y[i]:14.8f}  {'':>14}  ",

        end=""

    )

    print(

        f"{d2y[i] if i < len(d2y) else '':>14.8f}  " if i < len(d2y) else f"{'':>14}  ",

        end=""

    )

    print(

        f"{d3y[i] if i < len(d3y) else '':>14.8f}  " if i < len(d3y) else f"{'':>14}  ",

        end=""

    )

    print(

        f"{d4y[i] if i < len(d4y) else '':>14.8f}" if i < len(d4y) else f"{'':>14}"

    )

# Вывод производных и остаточных членов

print("\nТаблица производных и остаточных членов")

print(" i      x          y              y'             y''            R3'            R3''")

print("-" * 95)

for i in range(n):

    print(

        f"{i:2d}  "

        f"{x[i]:8.2f}  "

        f"{y[i]:14.8f}  "

        f"{y1[i] if y1[i] == '' else f'{y1[i]:14.8f}'}  "

        f"{y2[i] if y2[i] == '' else f'{y2[i]:14.8f}'}  "

        f"{R3_1[i] if R3_1[i] == '' else f'{R3_1[i]:14.8f}'}  "

        f"{R3_2[i] if R3_2[i] == '' else f'{R3_2[i]:14.8f}'}"

    )

# Проверка точными производными

xn = x[-1]

exact_y1 = 4 * xn**3 - 1

exact_y2 = 12 * xn**2

print("\nПроверка для конечной точки:")

print(f"x_n = {xn}")

print(f"y'(x_n) по формуле  = {y1[-1]:.8f}")

print(f"R3'(x_n)            = {R3_1[-1]:.8f}")

print(f"y'(x_n) точное      = {exact_y1:.8f}")

print(f"\ny''(x_n) по формуле = {y2[-1]:.8f}")

print(f"R3''(x_n)           = {R3_2[-1]:.8f}")

print(f"y''(x_n) точное     = {exact_y2:.8f}")