コード例 #1
0
 def summand(k):
     exp_arg = -((dim - 1 - 2 * k)**2) / 2 / variances
     erf_arg_2 = (gs.pi * variances -
                  (dim - 1 - 2 * k) * 1j) / gs.sqrt(2 * variances)
     sign = (-1.0)**k
     comb_2 = gs.comb(k, dim - 1)
     return sign * comb_2 * gs.exp(exp_arg) * gs.real(gs.erf(erf_arg_2))
コード例 #2
0
    def _normalization_factor_odd_dim(self, variances):
        """Compute the normalization factor - odd dimension."""
        dim = self.dim
        half_dim = int((dim + 1) / 2)
        area = 2 * gs.pi**half_dim / math.factorial(half_dim - 1)
        comb = gs.comb(dim - 1, half_dim - 1)

        erf_arg = gs.sqrt(variances / 2) * gs.pi
        first_term = (area / (2**dim - 1) * comb *
                      gs.sqrt(gs.pi / (2 * variances)) * gs.erf(erf_arg))

        def summand(k):
            exp_arg = -((dim - 1 - 2 * k)**2) / 2 / variances
            erf_arg_2 = (gs.pi * variances -
                         (dim - 1 - 2 * k) * 1j) / gs.sqrt(2 * variances)
            sign = (-1.0)**k
            comb_2 = gs.comb(k, dim - 1)
            return sign * comb_2 * gs.exp(exp_arg) * gs.real(gs.erf(erf_arg_2))

        if half_dim > 2:
            sum_term = gs.sum(
                gs.stack([summand(k)] for k in range(half_dim - 2)))
        else:
            sum_term = summand(0)
        coef = area / 2 / erf_arg * gs.pi**0.5 * (-1.0)**(half_dim - 1)

        return first_term + coef / 2**(dim - 2) * sum_term
コード例 #3
0
 def summand(k):
     exp_arg = -((dim - 1 - 2 * k)**2) / 2 / variances
     erf_arg_1 = (dim - 1 - 2 * k) * 1j / gs.sqrt(2 * variances)
     erf_arg_2 = (gs.pi * variances -
                  (dim - 1 - 2 * k) * 1j) / gs.sqrt(2 * variances)
     sign = (-1.0)**k
     comb = gs.comb(dim - 1, k)
     erf_terms = gs.imag(gs.erf(erf_arg_2) + gs.erf(erf_arg_1))
     return sign * comb * gs.exp(exp_arg) * erf_terms