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


import numpy as np

def pade_approximation(C, L, M, return_coeffs=False):
    assert len(C) >= L + M + 1, "Недостаточно коэффициентов ряда"
    C = np.array(C[:L + M + 1], dtype=float)

    A = np.zeros((M, M))
    b = np.zeros(M)
    for i in range(1, M + 1):
        for j in range(1, M + 1):
            idx = L + i - j
            if 0 <= idx < len(C):
                A[i - 1, j - 1] = C[idx]
        b[i - 1] = -C[L + i]

    try:
        q_sol = np.linalg.solve(A, b)
    except np.linalg.LinAlgError:
        raise ValueError("Система уравнений Паде не имеет единственного решения")

    q_coeffs = np.zeros(M + 1)
    q_coeffs[0] = 1.0
    q_coeffs[1:] = q_sol

    p_coeffs = np.zeros(L + 1)
    for n in range(L + 1):
        s = C[n]
        for i in range(1, min(n, M) + 1):
            s += q_coeffs[i] * C[n - i]
        p_coeffs[n] = s

    if return_coeffs:
        return p_coeffs.tolist(), q_coeffs.tolist()
    else:
        def approx_func(x):
            P = sum(p_coeffs[n] * (x ** n) for n in range(L + 1))
            Q = sum(q_coeffs[n] * (x ** n) for n in range(M + 1))
            return P / Q
        return approx_func

if __name__ == "__main__":
    coeffs_log = [0, 1, -1/2, 1/3, -1/4]
    p, q = pade_approximation(coeffs_log, 2, 2, return_coeffs=True)
    print("Коэффициенты числителя P:", p)
    print("Коэффициенты знаменателя Q:", q)