def best_fit(x, terms=1, step=1):
    h = get_h(terms, len(x), step)
    a = VecOps.multiply_matrices(VecOps.transpose(h), h)
    b = VecOps.multiply_matrices(VecOps.transpose(h), x)
    c = VecOps.multiply_matrices(VecOps.get_inverse(a), b)
    return c / step