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


import math

def f(x):
    return x**2 + 4 * math.sin(x) - 1 

a, b, h = 0.3, 1.3, 0.1
x = [round(a + i * h, 10) for i in range(int((b - a) / h) + 1)]
y = [f(xi) for xi in x]
n = len(x)

# [span_4](start_span)Вычисление таблиц конечных разностей[span_4](end_span)
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)]

# Списки для результатов
[span_5](start_span)[span_6](start_span)y1_simple, y2_simple = [0]*n, [0]*n  # Простейший вариант[span_5](end_span)[span_6](end_span)
[span_7](start_span)[span_8](start_span)y1_precise, y2_precise = [0]*n, [0]*n # Уточненный вариант[span_7](end_span)[span_8](end_span)
[span_9](start_span)[span_10](start_span)R1, R2 = [0]*n, [0]*n                # Погрешности для уточненного варианта[span_9](end_span)[span_10](end_span)

for i in range(n):
    if i == 0:
        # Начальная точка (x0)
        # [span_11](start_span)Простейший вариант (8.2)[span_11](end_span)
        y1_simple[i] = dy[0] / h
        y2_simple[i] = d2y[0] / h**2
        
        # [span_12](start_span)Уточненный вариант (8.1)[span_12](end_span)
        y1_precise[i] = (1/h) * (dy[0] - 0.5 * d2y[0])
        y2_precise[i] = (1/h**2) * (d2y[0] - d3y[0])
        
        # [span_13](start_span)Погрешности для уточненного варианта[span_13](end_span)
        R1[i] = (1 / (3 * h)) * d3y[0]
        R2[i] = (11 / (12 * h**2)) * d4y[0]

    elif i == n-1:
        # Конечная точка (xn)
        # [span_14](start_span)Простейший вариант (8.7)[span_14](end_span)
        y1_simple[i] = dy[-1] / h
        y2_simple[i] = d2y[-1] / h**2
        
        # [span_15](start_span)Уточненный вариант (8.6)[span_15](end_span)
        y1_precise[i] = (1/h) * (dy[-1] + 0.5 * d2y[-2])
        y2_precise[i] = (1/h**2) * (d2y[-2] + d3y[-3])
        
        # [span_16](start_span)Погрешности для уточненного варианта[span_16](end_span)
        R1[i] = (1 / (3 * h)) * d3y[-1]
        R2[i] = (11 / (12 * h**2)) * d4y[-1]

    else:
        # Внутренние точки (xi)
        # [span_17](start_span)Простейший вариант (8.4)[span_17](end_span)
        y1_simple[i] = dy[i] / h
        y2_simple[i] = d2y[i] / h**2
        
        # [span_18](start_span)Центрально-разностные (8.5)[span_18](end_span)
        y1_precise[i] = (dy[i] + dy[i-1]) / (2 * h)
        y2_precise[i] = d2y[i-1] / h**2 
        
        # Погрешности для центральных разностей (теоретические)
        if i < len(d3y): R1[i] = -(1/(6*h)) * d3y[i] # Оценка порядка O(h^2)

# Вывод основной таблицы
header = f"{'i':>2} {'x':>6} {'y':>10} {'y1_prec':>12} {'y2_prec':>12} {'R1':>12} {'R2':>12}"
print(header)
print("-" * len(header))
for i in range(n):
    print(f"{i:2d} {x[i]:6.2f} {y[i]:10.5f} {y1_precise[i]:12.5f} {y2_precise[i]:12.5f} {R1[i]:12.7f} {R2[i]:12.7f}")

# Сравнение с точными значениями
print("\nПроверка точности (Абсолютная ошибка):")
print(f"{'i':>2} {'x':>6} {'Err y1':>15} {'Err y2':>15}")
for i in range(n):
    exact_y1 = 2*x[i] + 4*math.cos(x[i])
    exact_y2 = 2 - 4*math.sin(x[i])
    err1 = abs(exact_y1 - y1_precise[i])
    err2 = abs(exact_y2 - y2_precise[i])
    print(f"{i:2d} {x[i]:6.2f} {err1:15.8f} {err2:15.8f}")