def get_least_squares_value(value, value_function, m): B = np.zeros((m, m)) f = np.zeros((m, )) for i in range(m): for j in range(m): sum = 0 for k in range(n): sum += pow(get_x(k), i + j) B[i, j] = sum for i in range(m): sum = 0 for k in range(n): sum += value_function(get_x(k)) * pow(get_x(k), i) f[i] = sum solution = np.linalg.solve(B, f) p = Polynomial(m - 1, np.flip(solution, 0)) return p.get_result_horner(value)