class Mset(Space): def __init__(self, map): map.isComplex = True self.Psetting = map.Psetting Space.__init__(self, map.dim, map.isComplex) self.map = map # self.map.Psetting = [(False,0.0),(False,0.0)] self.mset_data = numpy.array([]) self.point = Point(map.dim,map.isComplex) self.ms = MapSystem(self.map) def mset(self, p, iter, grid, xmin=0.0, xmax=1.0, ymin=-0.5, ymax=0.5, yShift=True): p = numpy.array([p+0.j for i in range(grid)]) x = numpy.arange(xmin, xmax, (xmax - xmin)/grid) y = numpy.arange(ymin, ymax, (ymax - ymin)/grid) if yShift == True: self.get_sign_inversion(iter, p, x, y, grid) else: #todo self.get_sign_inversion(iter, p, x, y, grid) def get_sign_inversion(self, iter, p, x, y, grid): for dy in y: iy = numpy.array([dy for i in range(grid) ]) q = x + 1.j*iy data = self.evolves(q, p, iter) index = self.where_sign_inversion(data[1].imag) for i in index: point = (q[i-1].real + q[i].real) /2.0 + 1.j*dy self.mset_data = numpy.append(self.mset_data, point) if numpy.abs(dy)<=(y.max()-y.min())/grid: real = numpy.arange(x.min(), x.max(), (x.max() - x.min())/grid) + 0.j self.mset_data = numpy.append(self.mset_data,real) def evolves(self, q, p, iter, Psetting=[(False,0.0),(False,0.0)] ): #self.map.Psetting = Psetting self.ms = MapSystem(self.map) self.ms.setPeriodic(Psetting) point = Point(self.map.dim, self.map.isComplex, [q,p]) self.ms.setInit(point) self.ms.setMaxImag(None) self.ms.evolves(iter) return self.ms.P.data def where_sign_inversion(self, x): x1 = numpy.insert(x, 0, 0.0) x2 = numpy.insert(x,len(x),0.0) return numpy.where(x1*x2 < 0)[0] def get_mset(self): return self.mset_data.real, self.mset_data.imag
def get_map(self, map, xmin, xmax, ymin, ymax, sample, iter): map.Psetting = self.Psetting ms = MapSystem(map, True) ms.setPeriodic(map.Psetting) x = numpy.random.random(sample) y = numpy.arange(ymin, ymax, (ymax - ymin)/sample) point = Point(map.dim, map.isComplex, [x,y]) ms.setInit(point) ms.evolves(iter) data = [[],[]] for i in range(1,len(ms.Remain)): data[0].append(numpy.array(ms.Trajectory[i]).transpose()[0]) data[1].append(numpy.array(ms.Trajectory[i]).transpose()[1]) return data