Example #1
0
    def __init__(self, target_eigenvalue, init_state_vect, dgl_coefficients, domain):

        if not all([isinstance(state, (int, float, long)) for state in init_state_vect]) \
                and len(init_state_vect) == 4 and isinstance(init_state_vect, (list, tuple)):
            raise TypeError
        if not len(dgl_coefficients) == 3 and isinstance(dgl_coefficients, (list, tuple)) \
                and all([callable(coef) or isinstance(coef, (int, float, long)) for coef in dgl_coefficients]):
            raise TypeError
        if not isinstance(domain, (np.ndarray, list)) \
                or not all([isinstance(num, (int, long, float)) for num in domain]):
            raise TypeError

        if isinstance(target_eigenvalue, complex):
            self._eig_val_real = target_eigenvalue.real
            self._eig_val_imag = target_eigenvalue.imag
        elif isinstance(target_eigenvalue, (int, long, float)):
            self._eig_val_real = target_eigenvalue
            self._eig_val_imag = 0.
        else:
            raise TypeError

        self._init_state_vect = init_state_vect
        self._a2, self._a1, self._a0 = [ut._convert_to_function(coef) for coef in dgl_coefficients]
        self._domain = domain

        state_vect = self._transform_eigenfunction()
        self._transf_eig_func_real, self._transf_d_eig_func_real = state_vect[0:2]
        self._transf_eig_func_imag, self._transf_d_eig_func_imag = state_vect[2:4]

        Function.__init__(self, self._phi, nonzero=(domain[0], domain[-1]), derivative_handles=[self._d_phi])
Example #2
0
    def __init__(self, omega, param, spatial_domain, norm_fac=1.):
        self._omega = omega
        self._param = param
        self.norm_fac = norm_fac

        a2, a1, a0, _, _ = self._param
        self._eta = -a1 / 2. / a2
        Function.__init__(self, self._phi, nonzero=spatial_domain, derivative_handles=[self._d_phi, self._dd_phi])
Example #3
0
    def __init__(self, function, M, b, l, scale_func=None, nested_lambda=False):

        if not callable(function):
            raise TypeError
        if not isinstance(M, np.ndarray) or len(M.shape) != 2 or np.diff(M.shape) != 0 or M.shape[0]%1 != 0:
            raise TypeError
        if not all([isinstance(num, (int, long, float)) for num in [b, l]]):
            raise TypeError

        self.function = function
        self.M = M
        self.b = b
        self.l = l
        if scale_func == None:
            self.scale_func = lambda z: 1
        else:
            self.scale_func = scale_func

        self.n = int(M.shape[0]/2)
        self.l0 = l/self.n
        self.z_disc = np.array([(i+1)*self.l0 for i in range(self.n)])

        if not nested_lambda:
            # iteration mode
            Function.__init__(self,
                              self._call_transformed_func,
                              nonzero=(0, l),
                              derivative_handles=[])
        else:
            # nested lambda mode
            self.x_func_vec = list()

            for i in range(self.n):
                self.x_func_vec.append(AddMulFunction(
                    partial(lambda z, k: self.scale_func(k*self.l0 + z)*self.function(k*self.l0 + z), k=i)))
            for i in range(self.n):
                self.x_func_vec.append(AddMulFunction(
                    partial(lambda z, k: self.scale_func(self.l - k*self.l0 - z)*self.function(self.l - k*self.l0 - z), k=i)))

            self.y_func_vec = np.dot(self.x_func_vec, np.transpose(M))

            Function.__init__(self,
                              self._call_transformed_func_vec,
                              nonzero=(0, l),
                              derivative_handles=[])
Example #4
0
 def __init__(self, om, param, spatial_domain, phi_0=1):
     self._om = om
     self._param = param
     self.phi_0 = phi_0
     Function.__init__(self, self._phi, nonzero=spatial_domain, derivative_handles=[self._d_phi, self._dd_phi])