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
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)
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)
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
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
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()
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()