Example #1
0
def microlocal():
    N = 20
    k = 20    
    qxw = puq.squarequadrature(N)
    g = pcb.BasisReduce(pcb.BasisCombine([pcb.FourierHankel([-1,-0.5], [0], k), pcb.FourierHankel([-0.2,0.5], [0], k)]), [1,1])
    theta, proj, projd, projdd = pwproduniform(g.values, qxw, k, 500)
    mp.plot(theta, proj[0])
Example #2
0
 def testL2Prod(self):
     N = 20
     k = 10
     qxw = puq.squarequadrature(N)
     D = 1
     g = pcb.PlaneWaves(pcb.circleDirections(40)[15], k)
     t1 = prp.findpw(prp.L2Prod(g.values, qxw, k), D, maxtheta = 1)
     self.assertAlmostEqual(t1, (2 * math.pi * 15) / 40)
Example #3
0
            print nfb, npw, l2err
            print basis
            print coeffs
            bases.append(basis)
            coefflist.append(coeffs)
    return pcb.BasisReduce(bases[-1], coefflist[-1])

def runpwbasis(k, u, Npw, quadrule):
    bc = pcad.PWFBCreator(k, origin, npw, nfb, params = None)
    newnbc = puo.optimalbasis3(lsf.optimise, nbc.pwbasis, nbc.params, None, nbc.newparams) if nbc.npw > 0 else nbc

    gen, ini = pcad.pwbasisgeneration(k, Npw)
    basis, (coeffs, err) = pcad.optimalbasis2(u, gen, ini, quadrule)
    l2err = math.sqrt(np.vdot(err,err))
    print l2err, basis, coeffs
    return pcb.BasisReduce(basis, coeffs)

if __name__ == '__main__':
    k=15
    origin1 = (-1,-1)
    origin2 = (2,2)
    fh1 = pcb.FourierHankel(origin1, [0], k)
    fh2 = pcb.FourierHankel(origin2, [0], k)
    fh = lambda p : fh1.values(p) + fh2.values(p)
    Npw = 8
    Nq = 15
    quadrule = puq.squarequadrature(Nq)
    runpwbasis(k, fh, Npw, quadrule)
    fs = runadaptivebasis2(k, fh, Npw, [0.5,0.5], quadrule)
    plotsquare3d([f.values for f in fs])
    
Example #4
0

def pwproduniform(g, qxw, k, n):
    theta = np.linspace(0, 2*math.pi, n, endpoint=False)
    return (theta,)+ pap.L2Prod(g, qxw, k).products(theta)

def qrp(qxw, dirs, k):
    qx,qw = qxw
    P = np.sqrt(qw.reshape(-1,1)) * pcb.PlaneWaves(dirs, k).values(qx)
    Q,R = sl.qr(P)
    print R

if __name__ == '__main__':
    N = 20
    k = 20    
    qxw = puq.squarequadrature(N)
    D = math.sqrt(2)
    D = 1
#    
#    mesh = tum.regularsquaremesh()
#    e = 0
#    mqs = pmmu.MeshQuadratures(mesh, puq.legendrequadrature(N))
#    qx = np.vstack([mqs.quadpoints(f) for f in mesh.etof[e]])
#    qw = np.concatenate([mqs.quadweights(f) for f in mesh.etof[e]])
#    qxw = (qx,qw)
    
    qrp(qxw, pcb.circleDirections(4), k)
    
    g = pcb.PlaneWaves(pcb.circleDirections(40)[15], k)
    g = pcb.FourierHankel([-1,-0.5], [10], k)
    g = pcb.BasisReduce(pcb.PlaneWaves(pcb.circleDirections(20)[[5,8]], k), [3,1])