import math
def f(x):
return x**4 - x - 1
a = -1.1
b = -0.1
h = 0.1
# Узлы
x = []
current = a
while current <= b + 1e-12:
x.append(round(current, 10))
current += 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 = [0]*n
y2 = [0]*n
# Остаточные члены
R1 = [0]*n
R2 = [0]*n
for i in range(n):
if i == 0:
# производные
y1[i] = (y[1] - y[0]) / h
y2[i] = (y[2] - 2*y[1] + y[0]) / h**2
# остатки
R1[i] = -(1/(2*h)) * d2y[0]
R2[i] = -(1/(h**2)) * d3y[0]
elif i == n-1:
y1[i] = (y[i] - y[i-1]) / h
y2[i] = (y[i] - 2*y[i-1] + y[i-2]) / h**2
R1[i] = -(1/(2*h)) * d2y[-1]
R2[i] = -(1/(h**2)) * d3y[-1]
else:
y1[i] = (y[i+1] - y[i-1]) / (2*h)
y2[i] = (y[i+1] - 2*y[i] + y[i-1]) / h**2
# для внутренних берем рядом
if i < len(d2y):
R1[i] = -(1/(2*h)) * d2y[i]
if i < len(d3y):
R2[i] = -(1/(h**2)) * d3y[i]
print(" i x y y' y'' R1 R2")
print("-"*80)
for i in range(n):
print(f"{i:2d} {x[i]:6.2f} {y[i]:10.6f} {y1[i]:10.6f} {y2[i]:10.6f} {R1[i]:10.6f} {R2[i]:10.6f}")
# Точные значения
print("\nПроверка:")
print(" i x y' точн. y'' точн.")
for i in range(n):
exact_y1 = 4*x[i]**3 - 1
exact_y2 = 12*x[i]**2
print(f"{i:2d} {x[i]:6.2f} {exact_y1:10.6f} {exact_y2:10.6f}")