On 05/30/2012 11:12 AM, Jens Axel Søgaard wrote:
Hi All,

Attached is my version of a 2d-plotter that handles singularities.
Give it a spin with your favorite ill-behaved functions and
report back with ones badly handled.

For approaches like this, I think the definition of "well-behaved" is "locally Lipschitz continuous with Lipschitz constant < K", where K depends on the constants used to detect discontinuities (e.g. machine-epsilon, number-of-regions). For everywhere-differentiable functions, K is the maximum absolute derivative on the domain plotted, scaled by various plot- and detection-specific factors.

(Yes, "Lipschitz" is like, the most unfortunate name for a mathematical property EVER. It takes undergraduate math majors a whole semester to get over it, if they ever do.)

Knowing that, it doesn't take long to find an ill-behaved function. We just need one that's differentiable but not locally Lipschitz:

    (λ (x) (* (expt (abs x) 3/2) (sin (/ x))))

Things like this will always be ill-behaved when plotted on some domain, no matter how fine the discontinuity detection is.

Further, there are locally and globally Lipschitz functions whose K is too large. (I didn't spend time finding one, though.) For each one, some constant assignment in the discontinuity detection will make them plot nicely. But for any constant assignment, there are infinitely many of them.

</analysis_lesson>

That doesn't mean I won't try something like this. The definition of "functions without discontinuities that are well-behaved when plotted non-adaptively" is also "locally Lipschitz continuous with Lipschitz constant < K", where K depends on different constants like the discretization step size. I would be perfectly happy with an adaptive sampler or just discontinuity detection if I could show that its set of ill-behaved functions is no larger than those for the current sampler. That'll take some time.

Also, I'm still considering letting users specify discontinuities. That would allow them to tell plot what kind they are: removable, removable singularity, right-step, left-step, etc. Those kinds of properties are pretty much undetectable.

Neil ⊥
____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to