Пример #1
0
 def __call__(self, x):
     for n, (a, b, order) in enumerate(self._mesh.iter_elems()):
         if b < x:
             continue
         y = _fekete.eval_poly(array([float(x)]), self._values[n],
                 a, b)[0]
         return y
Пример #2
0
 def __call__(self, x):
     for n, (a, b, order) in enumerate(self._mesh.iter_elems()):
         if b < x:
             continue
         y = _fekete.eval_poly(array([float(x)]), self._values[n],
                 a, b)[0]
         return y
Пример #3
0
    def get_values_in_element(self, n, x):
        """
        Return the values in points 'x' in the element 'n'.

        'x' is a numpy array of points
        'n' is an element id

        It returns a numpy array of values of the function in points 'x'.
        All points 'x' must be in the element 'n'.
        """
        a, b, order = self._mesh.get_element_by_id(n)
        assert (a<=x).all()
        assert (x<=b).all()
        return _fekete.eval_poly(x, self._values[n], a, b)
Пример #4
0
    def get_values_in_element(self, n, x):
        """
        Return the values in points 'x' in the element 'n'.

        'x' is a numpy array of points
        'n' is an element id

        It returns a numpy array of values of the function in points 'x'.
        All points 'x' must be in the element 'n'.
        """
        a, b, order = self._mesh.get_element_by_id(n)
        assert (a <= x).all()
        assert (x <= b).all()
        return _fekete.eval_poly(x, self._values[n], a, b)
Пример #5
0
 def __pow__(self, o):
     if isinstance(o, (int, long)):
         pts = self._mesh._points
         orders = empty(len(self._mesh._orders), dtype="int")
         values = []
         for n, (a, b, order) in enumerate(self._mesh.iter_elems()):
             order = o*order
             x = _fekete.get_fekete_points_phys(order, a, b)
             vals = _fekete.eval_poly(x, self._values[n], a, b)**o
             values.append(vals)
             orders[n] = order
         mesh = Mesh1D(pts, orders)
         return Function(values, mesh)
     else:
         return NotImplemented
Пример #6
0
 def __pow__(self, o):
     if isinstance(o, (int, long)):
         pts = self._mesh._points
         orders = empty(len(self._mesh._orders), dtype="int")
         values = []
         for n, (a, b, order) in enumerate(self._mesh.iter_elems()):
             order = o * order
             x = _fekete.get_fekete_points_phys(order, a, b)
             vals = _fekete.eval_poly(x, self._values[n], a, b)**o
             values.append(vals)
             orders[n] = order
         mesh = Mesh1D(pts, orders)
         return Function(values, mesh)
     else:
         return NotImplemented
Пример #7
0
    def l2_norm(self, method="Fekete"):
        """
        Calculates the L2 norm of the function.

        method == "Fekete" or "FE": Use Legendre interpolation, or first
            project to a FE basis and then calculate the L2 norm
        """
        if method=="Fekete":
            r = 0
            for n, (a, b, order) in enumerate(self._mesh.iter_elems()):
                x, w = _fekete.get_gauss_points_phys(a, b, order+1)
                vals = _fekete.eval_poly(x, self._values[n], a, b)
                r += _fekete.int_f2(w, vals)
            return sqrt(r)
        elif method=="FE":
            self.calculate_FE_coeffs()
            return self._fe_sol.l2_norm()
Пример #8
0
    def l2_norm(self, method="Fekete"):
        """
        Calculates the L2 norm of the function.

        method == "Fekete" or "FE": Use Legendre interpolation, or first
            project to a FE basis and then calculate the L2 norm
        """
        if method == "Fekete":
            r = 0
            for n, (a, b, order) in enumerate(self._mesh.iter_elems()):
                x, w = _fekete.get_gauss_points_phys(a, b, order + 1)
                vals = _fekete.eval_poly(x, self._values[n], a, b)
                r += _fekete.int_f2(w, vals)
            return sqrt(r)
        elif method == "FE":
            self.calculate_FE_coeffs()
            return self._fe_sol.l2_norm()