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


def f(x):

    return x**4 - x - 1

a = -1.1

b = -0.1

h = 0.1

# узлы

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

R1 = [""] * n

R2 = [""] * 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

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

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

# вывод таблицы

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

print("-"*80)

for i in range(n):

    print(

        f"{i:2d}  {x[i]:6.2f}  {y[i]:10.6f}  "

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

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

        f"{R1[i] if R1[i]=='' else f'{R1[i]:10.6f}'}  "

        f"{R2[i] if R2[i]=='' else f'{R2[i]:10.6f}'}"

    )

# проверка

print("\nПроверка для x_n:")

xn = x[-1]

exact_y1 = 4*xn**3 - 1

exact_y2 = 12*xn**2

print(f"x_n = {xn}")

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

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