示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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
示例#7
0
    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