[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re: [srfi-70] Limit

This page is part of the web mail archives of SRFI 70 from before July 7th, 2015. The new archives for SRFI 70 contain all messages, not just those from before July 7th, 2015.



  
======= At 2005-06-14, 03:33:33 Aubrey Jaffer wrote: =======

>That bug has been corrected:
>
>> (limit (lambda (x) (* -1 x (log x))) 0 1e-9)
>102.70578127633066e-12
>> (limit (lambda (x) (* -1 x (log x))) 0 1e-222)
>0.0
>
>http://savannah.gnu.org/cgi-bin/viewcvs/scm/scm/Transcen.scm?rev=HEAD&content-type=text/vnd.viewcvs-markup
>has the new limit code.
>
>http://swiss.csail.mit.edu/~jaffer/III/Limit.html
>explains the mathematics and algorithm.
>
>The documentation for the new limit procedure is appended.
>
> | When you try to fix the reference implementation, you will find that
> | it cannot be fixed because it comes from the "black box" procedure:
>
>It took some hard work, but the new limit procedure does treat its
>procedure argument as a black box, never calling it at the limit
>point.  It essentially detects whether the function is convex or
>concave near the limit point and uses polynomial extrapolation, either
>from the function or its inverse, to estimate the limit value.  The
>inverse function extrapolation is currently limited to quadratic;
>higher order fitting can certainly be done, but the equations get big.
>
> | Bottom line: In the end, LIMIT might do more harm than it is worth.
> | You might want to reconsider if it is a feature that is essential for
> | the Scheme programming language itself.
>
>The new limit procedure works better than I had expected; even
>handling a nasty example from an old Macsyma manual (see appended
>examples).  Arguments that limits are too esoteric or new
>counterexamples may yet scuttle them from srfi-70.
>

A counterexample:

> (limit (lambda (x) (exp (expt x -2))) 0.1 0.2)
+1/0
> (exp (expt 0.1 -2))
2.6881171418161084e+043
> (limit (lambda (x) (exp (expt x -2))) 0.1 0.1000001)
+1/0
> (limit (lambda (x) (exp (expt x -2))) 0.1 0.1000000001)
+1/0

As I understand the problem, a 'limit that treats the procedure as 
a "black box" is unsolvable. Even if you fix this particular 
counterexample, the new 'limit will have other counterexamples. 
Something similar to the halting-problem.

The additional argument k itself shows that the 'limit seems 
un-Scheme-ish. Could you tell another Scheme procedrue (either 
from R?RS or some other SRFI) that has a similar additional 
argument?

For Computer Algebra Systems, procedures such as 'limit are only
supposed to "do right" for daily inputs. But Scheme is requested
to be "well-defined" "unambiguous, aesthetically appealing, and 
consistent specications". Copying something from CASs into Scheme 
is is both overly ambitious and unnecessary.

-
Chongkai Zhu
The right idea was actually had very early, but somehow didn't win for a long time.