Finding jumps/discontinuities in a univariate function

I want to find jumps (or at least one jump, if it exists) in a univariate function on a given interval. Eg looking for a jump in

f(x) = x > 0 ? one(x) : zero(x)

on [-2,2] should give me \approx 0.

I searched the literature and found that this is called “edge detection” in image processing, but in contrast, I can readily evaluate the function just anywhere, also, I just need univariate. I have no derivatives (that I would trust).

I am aware that such algorithms are heuristic, may not find edges and may return bogus ones. This is just needed for a plotting problem though. I am not familiar with these algorithms and thought of asking before devising my own, so suggestions for specific Julia packages, or papers/textbooks to read, would be welcome.

I don’t know if a Julia implementation, but Chebfun has a nice algorithm for doing this. I believe it’s built on using bisection, so if you only need one jump should be easy to implement.

Can you look for large absolute values of diff(x)?

After some digging, I found the algorithm described in

  title={Piecewise-smooth chebfuns},
  author={Pach{\'o}n, Ricardo and Platte, Rodrigo B and Trefethen, Lloyd N},
  journal={IMA journal of numerical analysis},

Specifically, it is detectedge(f, a, c) on page 8, and is conceptually very simple: calculate f, f', f'', f''' by differences on a grid, select the largest one, refine that cell, and see if the derivatives increased. I should be able to adapt this easily for my purposes.

@dpsanders: This is what the above method uses, except with a recursive refinement.

Thanks for all the help.

1 Like

Great! If you implement it, I might incorporate it into ApproxFun.

1 Like