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


import math

def task_variant_2():
    # 1. Определение параметров варианта
    f = lambda x: x**2 + 4 * math.sin(x) - 1
    a, b = 0.3, 1.3
    h = 0.1
    
    # Генерация узлов x_i и значений функции y_i
    n = int(round((b - a) / h))
    x_values = [round(a + i * h, 2) for i in range(n + 1)]
    y_values = [f(x) for x in x_values]
    
    y_prime = [0.0] * (n + 1)
    y_double_prime = [0.0] * (n + 1)
    
    # 2. Численное дифференцирование
    for i in range(n + 1):
        if i == 0:
            # Начальная точка (Правая разность по формуле 8.2)
            y_prime[i] = (y_values[i+1] - y_values[i]) / h
            y_double_prime[i] = (y_values[i+2] - 2*y_values[i+1] + y_values[i]) / (h**2)
            
        elif i == n:
            # Конечная точка (Левая разность по формуле 8.7)
            y_prime[i] = (y_values[i] - y_values[i-1]) / h
            y_double_prime[i] = (y_values[i] - 2*y_values[i-1] + y_values[i-2]) / (h**2)
            
        else:
            # Внутренние точки (Центральная разность по формуле 8.5)
            y_prime[i] = (y_values[i+1] - y_values[i-1]) / (2 * h)
            # Вторая производная через центральную разность
            y_double_prime[i] = (y_values[i+1] - 2*y_values[i] + y_values[i-1]) / (h**2)

    # 3. Вывод результатов
    print(f"{'x_i':<10} | {'y_i':<10} | {'y_i_prime':<10} | {'y_i_double_prime':<10}")
    print("-" * 50)
    for i in range(n + 1):
        print(f"{x_values[i]:<10.2f} | {y_values[i]:<10.4f} | {y_prime[i]:<10.4f} | {y_double_prime[i]:<10.4f}")

if __name__ == "__main__":
    task_variant_2()