""" 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.
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$')
""" 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()
""" 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):