Re: Interval Arithmetic project



This application of interval analysis for numeric
sub-type determination
at compile time seems to me to be rather different
from computation
with intervals, as is done by Mathematica  (  using
Interval[{a,b }].)
There may be more of a relationship than I see right
here, but
I think the primary use of this CMU stuff is to
determine when possible
that   (sqrt x)   will return a [real] double-float
 and not a complex number.
RJF


----- Original Message -----
From: Raymond Toy <raymond.toy at ericsson.com>
Date: Thursday, May 4, 2006 2:15 pm
Subject: Re: [Maxima] Re: Interval Arithmetic project

> >>>>> "Raymond" == Raymond Rogers <Rogers> writes:
> 
>    Raymond>  I have "Interval Methods for Circuit
Analysis" by L V 
> Kolev.  I think it's
>    Raymond> a good book.  Of course it is dealing
with circuit 
> tolerances rather than
>    Raymond> floating point calculation errors.
> 
>    Raymond> But interval analysis is limited.
>    Raymond> When you enter an equation for
Interval Analysis each 
> calculation is
>    Raymond> independent; two different 10 ohm
resistors have 
> different values.  Now in a
>    Raymond> lot of circuit cases (parameters of
linear equations) 
> you can accomplish
>    Raymond> isolation of part calculations; but
consider (my case)
>    Raymond> int((x+a)/(x+b)),x=[c,d]) , you can't
determine the 
> answer by straight
>    Raymond> forward interval analysis since the
maximum could be 
> at an intermediate
>    Raymond> value of v (say x=-b), and "interval
analysis" is 
> really endpoint analysis.
> 
> (defun foo (x)
>  (declare (type (double-float 9.5d0 10.5d0) x))
>  (/ (+ x 20) (+ x 10)))
> 
> With cmucl, if you (compile 'foo) and then
(describe 'foo), you
> get:
> 
> Its result type is:
>  (DOUBLE-FLOAT 1.4390243902439024d0
1.564102564102564d0)
> 
> That is, (x+20)/(x+10) is always between 1.439...
and 1.564... if x is
> [9.5,10.5].  I think that's right.
> 
> Substitute your favorite values for a and b.  Or
you could even do
> 
> (defun foo2 (x a b)
>  (declare (type (double-float 9.5d0 10.5d0) x)
>           (type (double-float 19d0 21d0) a)
>           (type (double-float 9.9d0 10.1d0) b))
>  (/ (+ x a) (+ x b)))
> 
> CMUCL will tell you that the result is always in
the interval
> [1.383..., 1.6237...]
> 
> CMUCL isn't perfect here.  Round-off may very well
cause the answers
> to be incorrect.
> 
> I don't quite understand your comment.
> 
> Ray
> 
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>