示例#1
0
    def testConstrainedOptimisation(self):
        k = 4
        g = pcb.PlaneWaves(numpy.array([[3.0/5,4.0/5]]), k).values
#        g = pcb.FourierBessel(numpy.array([-2,-1]), numpy.array([5]),k)
        npw = 3
        nq = 8
        ini = pcb.circleDirections(npw)
        triquad = puq.trianglequadrature(nq)
        linearopt = puo.LeastSquaresFit(g, triquad)
        pwpg = puo.PWPenaltyBasisGenerator(k, 1, 2)
        basis = puo.optimalbasis3(linearopt.optimise, pwpg.finalbasis, ini)
        (coeffs, l2err) = linearopt.optimise(basis)        
        self.assertAlmostEqual(sum(l2err),0)        
示例#2
0
    def testOptimalBasis3(self):
        """ Can we find the right direction to approximate a plane wave?"""
        k = 4
        g = pcb.PlaneWaves(numpy.array([[3.0/5,4.0/5]]), k).values
#        g = pcb.FourierBessel(numpy.array([-2,-1]), numpy.array([5]),k)
        npw = 3
        nq = 8
        gen, ini = puo.pwbasisgeneration(k, npw)
        triquad = puq.trianglequadrature(nq)
        linearopt = puo.LeastSquaresFit(g, triquad)
        basis = puo.optimalbasis3(linearopt.optimise, gen, ini)
        (coeffs, l2err) = linearopt.optimise(basis)
        self.assertAlmostEqual(sum(l2err),0)
示例#3
0
 def getNearbyBases(self, indices, x):
     etonbcdata = {}
     self.etonbcs = {}
     for e in self.mesh.partition:
         xe = x[indices[e]:indices[e+1]]
         bc = self.etobc[e]
         fs = self.mesh.etof[e]
         qp = np.vstack([self.mqs.quadpoints(f) for f in fs])
         qw = np.concatenate([self.mqs.quadweights(f) for f in fs])
         lsf = puo.LeastSquaresFit(pcb.BasisReduce(pcb.BasisCombine(bc.getBasis()),xe).values, (qp,qw))            
         nbcs = bc.nearbybases(xe)
         optimisednbcs = []
         nbcdata = []
         for i, nbc in enumerate(nbcs):
             newnbc = puo.optimalbasis3(lsf.optimise, nbc.pwbasis, nbc.params, None, nbc.newparams) if nbc.npw > 0 else nbc
             optimisednbcs.append(newnbc)
             (_, l2err) = lsf.optimise(pcb.BasisCombine(newnbc.getBasis()))
             nbcdata.append((i, newnbc.n, sum(l2err)))
         etonbcdata[e] = nbcdata
         self.etonbcs[e] = optimisednbcs
     return etonbcdata