Source code for finitediff.grid.util

# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function)

import numpy as np
from ..util import interpolate_ahead, avg_stddev


[docs]def locate_discontinuity(grid, y, consider, trnsfm=lambda x: x, ntrail=2): y = np.asarray(y, dtype=np.float64) dy = np.diff(y) tg = trnsfm(grid) dtg = np.diff(tg) err = np.zeros(y.size) for d in ('fw', 'bw'): est, slc = interpolate_ahead(tg, y, ntrail, d) start = (ntrail - 1) if d == 'fw' else 0 stop = -(ntrail - 1) if d == 'bw' else None err[slc] += np.abs(y[slc] - est)/dtg[start:stop]*dy[start:stop] imax = np.argsort(err)[-consider:][::-1] return [(tg[m], err[m]) for m in imax]
[docs]def pool_discontinuity_approx(loc_res, consistency_criterion=10): points = np.array(loc_res) w1 = np.abs(points[:, 1]) return avg_stddev(points[:, 0], w1)
[docs]def grid_error(grid, y, ntrail=2): """ Estimates error at each grid point from extrapolation. Extrapolates from left ('fw') or from right ('bw'). Parameters ---------- grid : array y : array ntrail : int Number of points to include in the look-ahead extrapolation. """ est, _ = interpolate_ahead(grid, y, ntrail, direction='both') return est - y