Ejemplo n.º 1
0
def mass_test(N,alpha,beta,scale=1.,shift=0.,tol=1e-8):

    tests = ValidationContainer()
    jargs = dict(N=N,alpha=alpha,beta=beta,scale=scale,shift=shift)

    def dgen1(**kwargs):
        from spyctral.jacobi.quad import gq
        from spyctral.jacobi.eval import jacobi_polynomial

        [r,w] = gq(**kwargs)
        ps = jacobi_polynomial(r,range(N),alpha=alpha,beta=beta,scale=scale,shift=shift)
        return  [w,ps]

    def val1(data,**kwargs):
        from numpy import dot, eye
        from numpy.linalg import norm
        [w,ps] = data
        mass = dot(ps.conj().T*w, ps)
        return norm(mass - eye(N))<tol

    tests.append(ValidationTest(\
            description = "Jacobi Orthonormal poly mass matrix",
            parameters = jargs,
            data_generator = dgen1,
            validator = val1))

    return tests
Ejemplo n.º 2
0
def gauss_radau_test(N,alpha,beta,r0=-1.,scale=1.,shift=0.,tol=1e-8):

    from spyctral.jacobi.quad import grq
    from numpy import max, abs, all

    tests = ValidationContainer()

    jargs = dict(N=N,alpha=alpha,beta=beta,scale=scale,shift=shift,r0=r0)

    def val1(data,**kwargs):
        r = data[0]
        return max(abs(r-shift)/scale)<=1+tol

    tests.append(ValidationTest(\
         description = "Jacobi Gauss-Radau nodes inside interval",
         parameters = jargs,
         data_generator = grq,
         validator = val1))

    def val2(data,**kwargs):
        r = data[0]
        return any(abs(r-r0)<tol)

    tests.append(ValidationTest(\
         description = "Jacobi Gauss-Radau node",
         parameters = jargs,
         data_generator = grq,
         validator = val2))

    def val3(data,**kwargs):
        w = data[1]
        return all(w>=-tol)

    tests.append(ValidationTest(\
         description = "Jacobi Gauss-Radau weights positive",
         parameters = jargs,
         data_generator = grq,
         validator = val3))

    def dgen1(**kwargs):
        from spyctral.jacobi.eval import jacobi_polynomial
        from spyctral.jacobi.quad import grq
        [x,w] = grq(**kwargs)
        ps = jacobi_polynomial(x,range(2*N-1),alpha=alpha,beta=beta,scale=scale,shift=shift)
        ps[:,0] = 0
        return [w,ps]

    def val4(data,**kwargs):
        from numpy import dot
        [w,ps] = data
        errs = dot(w.conj().T,ps)
        return max(abs(errs))<tol

    tests.append(ValidationTest(\
            description = "Jacobi Gauss-Radau quadrature integration accuracy",
            parameters = jargs,
            data_generator = dgen1,
            validator = val4))

    return tests
Ejemplo n.º 3
0
def driver():
    """ 
    Driver function for testing Jacobi polynomials
    """

    from scipy import rand, randn
    from numpy import ceil

    all_tests = ValidationContainer()

    """ Chebyshev case """
    N = int(ceil(150*rand()))
    all_tests.extend(quadrature_test(N,alpha=-1/2., beta=-1/2.))
    all_tests.extend(evaluation_test(N,alpha=-1/2., beta=-1/2.))

    """ Legendre case """
    N = int(ceil(150*rand()))
    all_tests.extend(quadrature_test(N, alpha=0., beta=0.))
    all_tests.extend(evaluation_test(N, alpha=0., beta=0.))

    """ Random case 1 """
    N = int(ceil(150*rand()))
    alpha = -1 + 11*rand()
    beta = -1 + 11*rand()
    all_tests.extend(quadrature_test(N, alpha=alpha, beta=beta))
    all_tests.extend(evaluation_test(N, alpha=alpha, beta=beta))

    """ Random case 2 """
    N = int(ceil(150*rand()))
    alpha = -1 + 11*rand()
    beta = -1 + 11*rand()
    all_tests.extend(quadrature_test(N, alpha=alpha, beta=beta))
    all_tests.extend(evaluation_test(N, alpha=alpha, beta=beta))

    return all_tests
Ejemplo n.º 4
0
def driver():
    """ 
    Driver function for testing Laguerre polynomials
    """

    from scipy import rand, randn
    from numpy import ceil

    all_tests = ValidationContainer()

    """ Laguerre case """
    N = int(ceil(50*rand()))
    all_tests.extend(quadrature_test(N,alpha=0.))
    all_tests.extend(evaluation_test(N,alpha=0.))

    """ Random generalized case 1 """
    N = int(ceil(50*rand()))
    alpha = 10*rand()
    all_tests.extend(quadrature_test(N, alpha=alpha))
    all_tests.extend(evaluation_test(N, alpha=alpha))

    """ Random generalized case 2 """
    N = int(ceil(50*rand()))
    alpha = 10*rand()
    all_tests.extend(quadrature_test(N, alpha=alpha))
    all_tests.extend(evaluation_test(N, alpha=alpha))

    return all_tests
Ejemplo n.º 5
0
def evaluation_test(N,alpha):
    from scipy import rand, randn

    tol = 1e-6
    eval_tests = ValidationContainer()

    jargs = dict(N=N,alpha=alpha)

    eval_tests.extend(mass_test(tol=tol,**jargs))

    shift = randn()
    scale = 2*rand()
    jargs['shift'] = shift
    jargs['scale'] = scale

    eval_tests.extend(mass_test(tol=tol,**jargs))

    return eval_tests
Ejemplo n.º 6
0
def mass_test(N,alpha,scale=1.,shift=0.,tol=1e-8):

    tests = ValidationContainer()
    jargs = dict(N=N,alpha=alpha,scale=scale,shift=shift)

    def dgen1(**kwargs):
        from spyctral.laguerre.quad import gq
        from spyctral.laguerre.eval import laguerre_polynomial

        [r,w] = gq(**kwargs)
        ps = laguerre_polynomial(r,range(N),alpha=alpha,scale=scale,shift=shift)
        return  [w,ps]

    def val1(data,**kwargs):
        from numpy import dot, eye
        from numpy.linalg import norm
        [w,ps] = data
        mass = dot(ps.conj().T*w, ps)
        temp = min([N,10])
        return norm(mass[:temp,:temp] - eye(temp))<tol

    tests.append(ValidationTest(\
            description = "Laguerre Orthonormal poly mass matrix",
            parameters = jargs,
            data_generator = dgen1,
            validator = val1))

    def dgen2(**kwargs):
        from spyctral.laguerre.quad import pgq
        from spyctral.laguerre.eval import laguerre_function

        [r,w] = pgq(**kwargs)
        ps = laguerre_function(r,range(N),alpha=alpha,scale=scale,shift=shift)
        return [w,ps]

    def val2(data,**kwargs):
        from numpy import dot, eye
        from numpy.linalg import norm
        [w,ps] = data
        mass = dot(ps.conj().T*w, ps)
        temp = min([N,50])
        return norm(mass[:temp,:temp] - eye(temp))<tol

    return tests
Ejemplo n.º 7
0
def pi_gauss_test(N,alpha,scale=1.,shift=0.,tol=1e-8):
    """
    Defines all the tests for pi-Gauss quadrature nodes. Returns a
    ValidationContainer.
    """

    from spyctral.laguerre.quad import pgq
    from numpy import abs, max, all
    tests = ValidationContainer()

    def val1(data,**kwargs):
        from spyctral.laguerre.misc import interval
        r = data[0]
        lint = interval(scale=scale,shift=shift)
        return all((r-lint[0])>-tol)

    jargs = dict(N=N,alpha=alpha,scale=scale,shift=shift)

    tests.append(ValidationTest(\
         description="Laguerre pi-Gauss quadrature points inside interval",
         parameters = jargs,
         data_generator = pgq,
         validator = val1))
    
    def val2(data,**kwargs):
        w = data[1]
        return all(w>=-tol)

    tests.append(ValidationTest(\
            description = "Laguerre pi-Gauss quadrature weights positive",
            parameters = jargs,
            data_generator = pgq,
            validator = val2))

    def dgen1(**kwargs):
        from spyctral.laguerre.eval import laguerre_function
        from spyctral.laguerre.weights import sqrt_weight
        [x,w] = pgq(**kwargs)
        ps = laguerre_function(x,range(2*N),alpha=alpha,scale=scale,shift=shift)
        ps[:,0] = 0
        ps = (ps.T*sqrt_weight(x,alpha=alpha,scale=scale,shift=shift)).T
        return [w,ps]

    def val3(data,**kwargs):
        from numpy import dot
        [w,ps] = data
        errs = dot(w.conj().T,ps)
        return max(abs(errs))<tol

    tests.append(ValidationTest(\
            description = "Laguerre pi-Gauss quadrature integration accuracy",
            parameters = jargs,
            data_generator = dgen1,
            validator = val3))

    return tests
Ejemplo n.º 8
0
def gauss_test(N,alpha,beta,scale=1.,shift=0.,tol=1e-8):
    """
    Defines all the tests for Gauss quadrature nodes. Returns a
    ValidationContainer.
    """

    from spyctral.jacobi.quad import gq
    from numpy import abs, max, all
    tests = ValidationContainer()

    def val1(data,**kwargs):
        r = data[0]
        return max(abs(r-shift)/scale)<1+tol

    jargs = dict(N=N,alpha=alpha,beta=beta,scale=scale,shift=shift)

    tests.append(ValidationTest(\
         description="Jacobi Gauss quadrature points inside interval",
         parameters = jargs,
         data_generator = gq,
         validator = val1))
    
    def val2(data,**kwargs):
        w = data[1]
        return all(w>=-tol)

    tests.append(ValidationTest(\
            description = "Jacobi Gauss quadrature weights positive",
            parameters = jargs,
            data_generator = gq,
            validator = val2))

    def dgen1(**kwargs):
        from spyctral.jacobi.eval import jacobi_polynomial
        [x,w] = gq(**kwargs)
        ps = jacobi_polynomial(x,range(2*N),alpha=alpha,beta=beta,scale=scale,shift=shift)
        ps[:,0] = 0
        return [w,ps]

    def val3(data,**kwargs):
        from numpy import dot
        [w,ps] = data
        errs = dot(w.conj().T,ps)
        return max(abs(errs))<tol

    tests.append(ValidationTest(\
            description = "Jacobi Gauss quadrature integration accuracy",
            parameters = jargs,
            data_generator = dgen1,
            validator = val3))

    return tests
Ejemplo n.º 9
0
def quadrature_test(N,alpha):
    from scipy import rand, randn

    tol = 1e-8
    quad_tests = ValidationContainer()

    jargs = dict(N=N,alpha=alpha)

    quad_tests.extend(gauss_test(tol=tol,**jargs))
    quad_tests.extend(pi_gauss_test(tol=tol,**jargs))
    quad_tests.extend(gauss_radau_test(r0=0.,tol=tol,**jargs))
    if alpha==0:
        quad_tests.extend(pi_gauss_radau_test(r0=0.,tol=tol,**jargs))

    shift = randn()
    scale = 2*rand()
    jargs['shift'] = shift
    jargs['scale'] = scale

    quad_tests.extend(gauss_test(tol=tol,**jargs))
    quad_tests.extend(pi_gauss_test(tol=tol,**jargs))
    quad_tests.extend(gauss_radau_test(r0=shift, tol=tol,**jargs))
    if alpha==0:
        quad_tests.extend(pi_gauss_radau_test(r0=shift, tol=tol,**jargs))

    return quad_tests
Ejemplo n.º 10
0
def quadrature_test(N,alpha,beta):
    from scipy import rand, randn

    tol = 1e-8
    quad_tests = ValidationContainer()

    jargs = dict(N=N,alpha=alpha,beta=beta)

    quad_tests.extend(gauss_test(tol=tol,**jargs))
    quad_tests.extend(gauss_radau_test(r0=-1.,tol=tol,**jargs))
    quad_tests.extend(gauss_radau_test(r0=1.,tol=tol,**jargs))
    quad_tests.extend(gauss_lobatto_test(tol=tol,**jargs))

    shift = randn()
    scale = 2*rand()
    jargs['shift'] = shift
    jargs['scale'] = scale

    quad_tests.extend(gauss_test(tol=tol,**jargs))
    quad_tests.extend(gauss_radau_test(r0=-(scale)+shift, tol=tol,**jargs))
    quad_tests.extend(gauss_radau_test(r0=scale+shift, tol=tol,**jargs))
    quad_tests.extend(gauss_lobatto_test(tol=tol,**jargs))

    return quad_tests