[PURRS-devel] Re: CoStLy 0.3

Markus Neher markus.neher at math.uni-karlsruhe.de
Mon Dec 9 17:00:31 CET 2002


Dear Roberto,

> thanks for the beta.  In order to be able to use it we had to make
> the corrections you will find in the attached patch.  They fall into
> 5 categories:

Thank you very much. We have updated our code accordingly.

> 
> 1) namespace errors whereby some std:: qualifications were missing;
> 2) namespace errors when compiling (as we have to) with FILIB_NAMESPACES
>    defined;
 > 3) incorrect uses of abs() (an int -> int function) instead of fabs()
 >    (double -> double);
 > 5) unused variables (causing annoying warnings).

Thank you for the information and for the elimnation of the unused 
variables. Our compiler (gcc 2.95) did not show us any errors. Which 
compiler are you using? It seems to be better than ours.

> 4) undefined type `Complex';

This error is puzzling. The Complex data type is contained in the C++ 
standard (see File Complex.h). It is simply the double version of the 
complex data type:   typedef complex<double> Complex;

> We are now using the revised beta version.  However, we could not disable
> our wrapper around the pow() function, since CoStLy still throws an 
> exception
> for invocations like, e.g., pow(([-0.5, -0.5],[0, 0]), ([-1, -1],[0, 0])).

In CoStLy 0.3, we have several power functions (see documentation) which 
perform differently. There is a special function for integer exponents, 
namely

power(Z,n)   (Z: cinterval, n: integer)

Here, the logarithm is not used. power( ([-0.5, -0.5],[0, 0]), -1 ) is 
well defined. There are also new root functions that compute all roots, 
even for intervals that intersect the negative real axis.

Do you have a priori information on the type of exponents that occur in 
your computations? For example, if you knew that only integer exponents 
occurred then you could replace all calls of pow(Z,P) (Z,P: cintervals) 
by calls of power(Z,n) (Z: cinterval; n:integer).
Or, for real or complex interval exponents, you could use pow_all 
instead of pow. pow_all computes an enclosure of all solutions of Z^P. 
pow_all never throws an exception, but sometimes a list of intervals 
(which cover the solution set) and sometimes the whole complex plane is 
returned.

The pow function is implemented as  pow(Z,P) = e^(P*ln(Z))  with the 
principal branch of the logarithm. For our applications, we need this 
function to be analytic on its domain. That's why Z must not intersect 
the negative real axis.

Best regards,

Ingo Eble and Markus Neher





More information about the PURRS-devel mailing list