Ejemplo n.º 1
0
        """
        fvals = f(self.nodes)
        self.fvals = fvals
        if self.factor:
            self.ivals = self.factor * self.fvals
        else:
            self.ivals = self.fvals
        result = 0.
        for rule, start in zip(self.rules, self.starts):
            result += rule.quad(self.ivals[start:start+rule.npts])
        return result


if __name__ == '__main__':
    from ccf import ClenshawCurtis, Fejer1
    cc = ClenshawCurtis(6, 3, 5)
    f1 = Fejer1(5, 5, 8)
    # 4-part composite rule over [0, 10] with CC and Fejer1 pieces:
    cq = CompositeQuad(ClenshawCurtis(4, 0, 3),
            (cc.nodes, cc.wts),
            (f1.l, f1.u, f1.nodes, f1.wts),
            Fejer1(7, 8., 10) )
    
    def f(x):
        """
        Integrates to 10 over [0,10].
        """
        try:
            return ones(len(x), float)
        except TypeError:
            return 1.
Ejemplo n.º 2
0
    Rolling power law.
    """
    pl1 = -beta + .5
    return (x/mid)**pl1 / (1. + x/mid)

def roll_map(y, beta=beta, range=range, mid=mid):
    """
    Rolling exponential, transformed.
    """
    x = x_y(y)
    return roll(x) * x**beta

l, u = 1., range
y_l, y_u = y_x(l), y_x(u)
for n in [5, 10, 15, 25, 50, 100, 200, 500]:
    ccx = ClenshawCurtis(n, l, u)
    ccy = ClenshawCurtis(n, y_l, y_u)
    xq = ccx.quad(roll)
    yq = ccy.quad(roll_map)
    print n, xq, yq

loglog(ccx.nodes, roll(ccx.nodes), 'b.')
cc = ClenshawCurtis(25, l, u)
loglog(cc.nodes, roll(cc.nodes), 'r.')
xlabel('$x$')
ylabel('$f(x)$')
figure()
loglog(-ccy.nodes, roll_map(ccy.nodes), 'g.')
cc = ClenshawCurtis(25, y_l, y_u)
loglog(-cc.nodes, roll_map(cc.nodes), 'r.')
xlabel('$-y$')
Ejemplo n.º 3
0
    """
    Rolling exponential, -.6 at 1, -.4 at 10
    """
    return exp((alpha + .2*(x-.5*range)/range)*x)

def rexp_map(y, alpha=alpha, range=range):
    """
    Rolling exponential, transformed.
    """
    x = x_y(y)
    return exp((alpha + .2*(x-.5*range)/range)*x) / exp(alpha*x)

l, u = 1., range
y_l, y_u = y_x(l), y_x(u)
for n in [5, 10, 15, 25, 50, 100, 200, 500]:
    ccx = ClenshawCurtis(n, l, u)
    ccy = ClenshawCurtis(n, y_l, y_u)
    xq = ccx.quad(rexp)
    yq = ccy.quad(rexp_map)
    print n, xq, yq

semilogy(ccx.nodes, rexp(ccx.nodes), 'b.')
xlabel('$x$')
ylabel('$f(x)$')
figure()
semilogy(ccy.nodes, rexp_map(ccy.nodes), 'g.')
cc = ClenshawCurtis(25, y_l, y_u)
semilogy(cc.nodes, rexp_map(cc.nodes), 'r.')
xlabel('$y$')
ylabel(r'$f(x)/\exp(\alpha x)$')
show()
Ejemplo n.º 4
0
        """
        fvals = f(self.nodes)
        self.fvals = fvals
        if self.factor:
            self.ivals = self.factor * self.fvals
        else:
            self.ivals = self.fvals
        result = 0.
        for rule, start in zip(self.rules, self.starts):
            result += rule.quad(self.ivals[start:start + rule.npts])
        return result


if __name__ == '__main__':
    from ccf import ClenshawCurtis, Fejer1
    cc = ClenshawCurtis(6, 3, 5)
    f1 = Fejer1(5, 5, 8)
    # 4-part composite rule over [0, 10] with CC and Fejer1 pieces:
    cq = CompositeQuad(ClenshawCurtis(4, 0, 3), (cc.nodes, cc.wts),
                       (f1.l, f1.u, f1.nodes, f1.wts), Fejer1(7, 8., 10))

    def f(x):
        """
        Integrates to 10 over [0,10].
        """
        try:
            return ones(len(x), float)
        except TypeError:
            return 1.

    def g(x):