def f(x): degree = 7 n = 5 u = x[0] v = x[1] B = x[2:] data = [ (B[0], z(n)), (B[1], fsd(n, (u, 1))), (B[2], fsd(n, (v, 1))), (B[3], fsd(n, (u, 2))), (B[4], fsd(n, (v, 2))), (B[5], fsd(n, (u, 3))), ] points, weights = untangle(data) exponents = get_all_exponents(n, degree) # flatten list exponents = numpy.array([item for sublist in exponents for item in sublist]) def evaluate_all_monomials(x): return numpy.prod(x[..., None] ** exponents.T[:, None], axis=0).T flt = numpy.vectorize(float) exact_vals = flt([integrate_monomial_over_unit_nball(k) for k in exponents]) A = evaluate_all_monomials(points.T) out = numpy.dot(A, weights) out -= exact_vals norm_v = numpy.sqrt(numpy.dot(out, out)) print(norm_v) return norm_v
def f(x): degree = 19 data = [ (x[0], _f((math.sqrt(1.0 / 3.0), 3))), (x[1], _f2(x[6])), (x[2], _f2(x[7])), (x[3], _f2(x[8])), (x[4], _f2(x[9])), (x[5], _f11(x[10], x[11])), ] points, weights = untangle(data) azimuthal, polar = cartesian_to_spherical(points).T out = orthopy.sphere.tree_sph( polar, azimuthal, degree, standardization="quantum mechanic" ) A = numpy.array([row for level in out for row in level]) out = numpy.dot(A, weights) out[0] -= 1.0 / (2 * numpy.sqrt(numpy.pi)) v = numpy.sqrt(out.real ** 2 + out.imag ** 2) norm_v = numpy.sqrt(numpy.vdot(v, v)) print(norm_v) return norm_v
def f(x): degree = 11 n = 3 u = 0.871_740_148_509_601 v = 0.591_700_181_433_148 w = 0.209_299_217_902_484 # u = x[0] # v = x[1] # w = x[2] # B = x[3:] B = x data = [ (B[0], z(n)), (B[1], fsd(n, (u, 1))), (B[2], fsd(n, (v, 1))), (B[3], fsd(n, (w, 1))), (B[4], fsd(n, (u, 2))), (B[5], fsd(n, (v, 2))), (B[6], fsd(n, (w, 2))), (B[7], fsd(n, (u, 1), (v, 1))), (B[8], fsd(n, (u, 1), (w, 1))), (B[9], fsd(n, (u, 3))), (B[10], fsd(n, (v, 3))), (B[11], fsd(n, (w, 3))), (B[12], fsd(n, (u, 2), (v, 1))), ] points, weights = untangle(data) exponents = get_all_exponents(n, degree) # flatten list exponents = numpy.array( [item for sublist in exponents for item in sublist]) def evaluate_all_monomials(x): return numpy.prod(x[..., None]**exponents.T[:, None], axis=0).T flt = numpy.vectorize(float) exact_vals = flt( [integrate_monomial_over_unit_nball(k) for k in exponents]) A = evaluate_all_monomials(points.T) out = numpy.dot(A, weights) out -= exact_vals norm_v = numpy.sqrt(numpy.dot(out, out)) # print() print(norm_v) # print() # for xx in x: # print(f"{xx:.15e}") return norm_v
def f(x): degree = 11 n = 5 u = x[0] v = x[1] w = x[2] B = x[3:] data = [ (B[0], z(n)), (B[1], fsd(n, (u, 1))), (B[2], fsd(n, (v, 1))), (B[3], fsd(n, (w, 1))), (B[4], fsd(n, (u, 2))), (B[5], fsd(n, (v, 2))), (B[6], fsd(n, (w, 2))), (B[7], fsd(n, (u, 1), (v, 1))), (B[8], fsd(n, (u, 1), (w, 1))), (B[9], fsd(n, (u, 3))), (B[10], fsd(n, (v, 3))), (B[11], fsd(n, (w, 3))), (B[12], fsd(n, (u, 2), (v, 1))), ] if n > 3: data += [(B[13], fsd(n, (u, 4))), (B[14], fsd(n, (v, 4)))] if n > 4: data += [(B[15], fsd(n, (u, 5)))] points, weights = untangle(data) exponents = get_all_exponents(n, degree) # flatten list exponents = numpy.array( [item for sublist in exponents for item in sublist]) def evaluate_all_monomials(x): return numpy.prod(x[..., None]**exponents.T[:, None], axis=0).T flt = numpy.vectorize(float) exact_vals = flt( [integrate_monomial_over_unit_nball(k) for k in exponents]) A = evaluate_all_monomials(points.T) out = numpy.dot(A, weights) out -= exact_vals norm_v = numpy.sqrt(numpy.dot(out, out)) print() print(norm_v) print() for xx in x: print(f"{xx:.15e}") return norm_v
def f(x): degree = 5 n = 7 lmbda, xi, mu, gamma = x eta = 0 A = 1 / 9 B = 1 / 72 C = B # data = [ # (B, rd(n, [(+lmbda, 1), (+xi, n - 1)])), # (B, rd(n, [(-lmbda, 1), (-xi, n - 1)])), # (C, rd(n, [(+mu, 2), (+gamma, n - 2)])), # (C, rd(n, [(-mu, 2), (-gamma, n - 2)])), # (2 * A, numpy.full((1, n), eta)), # ] # points, weights = untangle(data) # weights *= numpy.sqrt(numpy.pi) ** n data = [ (B, rd(n, [(+lmbda, 1), (+xi, n - 1)])), (B, rd(n, [(-lmbda, 1), (-xi, n - 1)])), (C, rd(n, [(+mu, 2), (+gamma, n - 2)])), (C, rd(n, [(-mu, 2), (-gamma, n - 2)])), (2 * A, numpy.full((1, n), eta)), ] points, weights = untangle(data) weights *= numpy.sqrt(numpy.pi)**n A = numpy.concatenate( orthopy.enr2.tree(points.T, degree, symbolic=False)) out = numpy.dot(A, weights) out[0] -= numpy.sqrt(numpy.sqrt(numpy.pi))**n norm_v = numpy.sqrt(numpy.vdot(out, out)) return norm_v
def f(x): degree = 7 data = [ (x[0], fsd(2, (x[3], 1))), (x[1], fsd(2, (x[4], 1))), (x[2], fsd(2, (x[3], 1), (x[4], 1))), ] points = numpy.array( [ [0.0, +x[3]], [0.0, -x[3]], [+x[3], 0.0], [-x[3], 0.0], # [0.0, +x[4]], [0.0, -x[4]], [+x[4], 0.0], [-x[4], 0.0], # # [+x[3], +x[4]], [+x[3], -x[4]], [-x[3], +x[4]], [-x[3], -x[4]], ] ) points, weights = untangle(data) A = numpy.concatenate(orthopy.e2r2.tree(points.T, degree, symbolic=False)) out = numpy.dot(A, weights) out[0] -= numpy.sqrt(numpy.pi) norm_v = numpy.sqrt(numpy.vdot(out, out)) # print(norm_v) return norm_v
def f(x): degree = 13 data = [ (x[0], [[x[8], x[9]]]), (x[1], _s40(x[10])), (x[2], _s40(x[11])), (x[3], _s4(x[12])), (x[4], _s4(x[13])), (x[5], _s4(x[14])), (x[6], _s8(x[15], x[16])), (x[7], _s8(x[17], x[18])), ] points, weights = untangle(data) exponents = numpy.concatenate([partition(2, d) for d in range(degree + 1)]) exact_vals = numpy.array([integrate_monomial_over_enr(k) for k in exponents]) def fun(x): k = exponents.T # <https://stackoverflow.com/a/46689653/353337> s = x.shape[1:] + k.shape[1:] return ( (x.reshape(x.shape[0], -1, 1) ** k.reshape(k.shape[0], 1, -1)) .prod(0) .reshape(s) ) A = fun(points.T).T print(A) print(exact_vals) print(sum(weights)) out = numpy.dot(A, weights) - exact_vals nrm = numpy.sqrt(numpy.dot(out, out)) print(nrm) exit(1) return nrm