def p_1(): A, b, x, _, _, _, _, _, _ = problem_data.hw7_p1_data() lin_func = utils_fns.LinearFunction(A, b) first_result = np.linalg.norm(lin_func.evaluate(x), ord=2) ** 2 utils_io.label('7.1') print 'norm squared direct calc result: ', str(first_result) second_result = lin_func.norm_squared_linear().evaluate(x) print 'norm squared calc via quadratic function: ', str(second_result)
def p_2b(): _, _, x, P, q, r, y, _, _ = problem_data.hw7_p1_data() quad_func = utils_fns.QuadraticFunction(P, q, r) quad_func_partial = quad_func.partial_evaluation(y, len(y)) first_result = quad_func_partial.evaluate(x) utils_io.label('7.2b') print 'quadratic function partial evaluation result: ', str(first_result) second_result = quad_func.evaluate(np.concatenate((x, y))) print 'quadratic function direct evaluation result: ', str(second_result)
def p_2e(): _, _, x, P, q, r, _, y_vals, y_pmf = problem_data.hw7_p1_data() y_mean = np.dot(y_vals.T, y_pmf).T[0] devs = y_vals - y_mean y_cov = np.dot(y_pmf.T * devs.T, devs) quad_func = utils_fns.QuadraticFunction(P, q, r) h_x = quad_func.partial_expectation(y_mean, y_cov) first_result = h_x.evaluate(x) utils_io.label('7.2e') print 'partial expectation via quadratic function: ', str(first_result) second_result = 0. for idx, y_val in enumerate(y_vals): eval_point = np.vstack((x, y_val[:, np.newaxis])) second_result += y_pmf[idx] * quad_func.evaluate(eval_point) print 'partial expectation via direct evaluation: ', str(second_result[0])