Vypocita Lagrangeov interpolacny polynom.
    """

    # pocet x
    n = len(x)

    # casti polynomu
    poly = []

    assert n == len(fx), 'Dlzka listov x a fx musi byt rovnaka'

    for i in range(n):
        # zostroji bazu
        base = lagrange_base(n - 1, i)

        # dosadi do bazy hodnoty x
        base_eval = evaluate_base(base, n, x)

        # prida cast polynomu
        poly.append(str(fx[i]) + ' * ' + str(base_eval))

    return ' + '.join(poly)


if __name__ == '__main__':
    x = list_input('Zadajte zoznam hodnot x')
    fx = list_input('Zadajte zoznam funkcnych hodnot fx')

    r = lagrange(x, fx)

    print('Polynom je:\n{0}'.format(r))
                sum_a += a[i, j] * x1[j]

            for j in range(i + 1, a.rows):
                sum_b += a[i, j] * x[j]

            # vypocet dalsej aproximacie
            x1[i] = (1 / a[i, i]) * (b[i] - sum_a - sum_b)

        # vypocet rozdielu prvej a druhej aproximacie (norma)
        error = norm_error(x1, x)

        logger.info('x1 = {0}\nx = {1}\nerror = {2}\n'.format(
            list_as_float(x1), list_as_float(x), float(error)))

        # skonci pri dosiahnuti presnosti
        if error <= e:
            return list_as_float(x1)

        x = list(x1)


if __name__ == '__main__':
    a = matrix_input('Zadajte maticu a')
    b = list_input('Zadajte vektor pravej strany b')
    x = list_input('Zadajte vektor aproximacie x')
    e = float_input('Zadajte presnost e', default=0.01)

    r = gaussseidel(a, b, x, e)

    print('Vysledny vektor:\n{0}'.format(r))