Beispiel #1
0
 def endpoints(f):
     f0 = sp.mirror0(sp.matC(f), -1)
     aa = f - sp.unmirror0(
         sp.I_space(0, h / 2)(sp.I_space_inv(-h / 2, h / 2)(f0)))
     bb = f - sp.unmirror0(
         sp.I_space(-h / 2, 0)(sp.I_space_inv(-h / 2, h / 2)(f0)))
     return sp.matB(aa) + sp.matB1(bb)
Beispiel #2
0
 def midpoints(f):
     f = sp.mirror0(sp.matC(f), -1)
     # Shift function with S, Sinv to avoid division by zero at x=0, x=pi
     f = sp.I_space_inv(-h/2, h/2)(f)
     f = sp.T_space(+h/2)(f)
     f = f/sp.Omega_d(f.shape[0])
     f = sp.T_space(-h/2)(f)
     f = sp.unmirror0(f)
     return f
Beispiel #3
0
 def midpoints(f):
     f = sp.mirror0(sp.matC(f), -1)
     # Shift function with S, Sinv to avoid division by zero at x=0, x=pi
     f = sp.I_space_inv(-h / 2, h / 2)(f)
     f = sp.T_space(+h / 2)(f)
     f = f / sp.Omega_d(f.shape[0])
     f = sp.T_space(-h / 2)(f)
     f = sp.unmirror0(f)
     return f
Beispiel #4
0
def H1d_regular(f):
    r'''

    .. math::
        \widetilde{\mathbf{H}}^{1}=
            \mathbf{M}_{1}^{\dagger}
            {\mathbf{I}^{-\frac{h}{2},\frac{h}{2}}}^{-1}
            \mathbf{M}_{1}^{+}
            \mathbf{A}^{-1}
    '''
    f = f/sp.A_diag(f.shape[0])
    f = sp.mirror0(f, +1)
    N = f.shape[0]; h = 2*pi/N
    f = sp.I_space_inv(-h/2, +h/2)(f)
    f = sp.unmirror0(f)
    return f
Beispiel #5
0
def H0_regular(f):
    r'''

    .. math::
        \mathbf{H}^{0}=
            \mathbf{A}
            \mathbf{M}_{0}^{\dagger}
            \mathbf{I}^{-\frac{h}{2},\frac{h}{2}}
            \mathbf{M}_{0}^{+}
    '''
    f = sp.mirror0(f, +1)
    N = f.shape[0]; h = 2*pi/N
    f = sp.I_space(-h/2, h/2)(f)
    f = sp.unmirror0(f)
    f = f*sp.A_diag(f.shape[0])
    return  f
Beispiel #6
0
def H0_regular(f):
    r'''

    .. math::
        \mathbf{H}^{0}=
            \mathbf{A}
            \mathbf{M}_{0}^{\dagger}
            \mathbf{I}^{-\frac{h}{2},\frac{h}{2}}
            \mathbf{M}_{0}^{+}
    '''
    f = sp.mirror0(f, +1)
    N = f.shape[0]
    h = 2 * pi / N
    f = sp.I_space(-h / 2, h / 2)(f)
    f = sp.unmirror0(f)
    f = f * sp.A_diag(f.shape[0])
    return f
Beispiel #7
0
def H1d_regular(f):
    r'''

    .. math::
        \widetilde{\mathbf{H}}^{1}=
            \mathbf{M}_{1}^{\dagger}
            {\mathbf{I}^{-\frac{h}{2},\frac{h}{2}}}^{-1}
            \mathbf{M}_{1}^{+}
            \mathbf{A}^{-1}
    '''
    f = f / sp.A_diag(f.shape[0])
    f = sp.mirror0(f, +1)
    N = f.shape[0]
    h = 2 * pi / N
    f = sp.I_space_inv(-h / 2, +h / 2)(f)
    f = sp.unmirror0(f)
    return f
Beispiel #8
0
def S_cheb_pinv(f):
    '''
    Interpolate from dual to primal vertices.
    Since there are smaller number of dual vertices, 
    this is only a pseudo inverse of S_cheb, and not an 
    exact inverse.
    >>> allclose(  S_cheb_pinv(array([ -1/sqrt(2),  1/sqrt(2)])), 
    ...            array([ -1, 0, 1]))
    True
    >>> allclose(  S_cheb_pinv(array([ 1/sqrt(2),  -1/sqrt(2)])), 
    ...            array([ 1, 0, -1]))
    True
    >>> sp.to_matrix(S_cheb_pinv, 2).round(3)
    array([[ 1.207, -0.207],
           [ 0.5  ,  0.5  ],
           [-0.207,  1.207]])
    '''
    f = sp.mirror1(f, +1)
    N = f.shape[0]; h = 2*pi/N
    f = sp.Finv(sp.F(f)*sp.S_diag(N, -h/2))
    f = sp.unmirror0(f)
    return real(f)
Beispiel #9
0
def S_cheb_pinv(f):
    '''
    Interpolate from dual to primal vertices.
    Since there are smaller number of dual vertices, 
    this is only a pseudo inverse of S_cheb, and not an 
    exact inverse.
    >>> allclose(  S_cheb_pinv(array([ -1/sqrt(2),  1/sqrt(2)])), 
    ...            array([ -1, 0, 1]))
    True
    >>> allclose(  S_cheb_pinv(array([ 1/sqrt(2),  -1/sqrt(2)])), 
    ...            array([ 1, 0, -1]))
    True
    >>> sp.to_matrix(S_cheb_pinv, 2).round(3)
    array([[ 1.207, -0.207],
           [ 0.5  ,  0.5  ],
           [-0.207,  1.207]])
    '''
    f = sp.mirror1(f, +1)
    N = f.shape[0]
    h = 2 * pi / N
    f = sp.Finv(sp.F(f) * sp.S_diag(N, -h / 2))
    f = sp.unmirror0(f)
    return real(f)
Beispiel #10
0
 def endpoints(f):
     f0 = sp.mirror0(sp.matC(f), -1)
     aa = f - sp.unmirror0(sp.I_space(0, h/2)(sp.I_space_inv(-h/2, h/2)(f0)))
     bb = f - sp.unmirror0(sp.I_space(-h/2, 0)(sp.I_space_inv(-h/2, h/2)(f0)))
     return sp.matB(aa) + sp.matB1(bb)