MathGroup Archive 1992

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Would you post this Mathematica question to news group for me, please?

  • To: MathGroup at yoda.physics.unc.edu
  • Subject: Re: Would you post this Mathematica question to news group for me, please?
  • From: keiper
  • Date: Mon, 6 Jul 92 08:14:31 CDT

andrew at ll.mit.edu (Andrew Hecht) writes:

	> I have a problem with mathematica, version 2.0 (on NeXT): When I
	> perform the following iteration using numbers with high precision, I
	> get erroneous results.  For example, with

	>	a = 3.75000000000000000000000000000000000000000000000...
	>	t = a/2

	> and using the following iteration technique:

	> 	x = t; Do[Print[x]; x = a x - x^2 ,{140}] ; N[x,80]

	> the results for the 135th through 140th iteration are

	>	3.0, 2.0, 0.0, 0.0
 
Yes, that's one of the problems with significance arithmetic.  All
uncertainties in the values in any expression are (and must be) treated
as independent.  When you do arithmetic with uncertain numbers you
get an answer containing only those digits which are known to be correct
based on the assumption of independence of all uncertainties.  In
many iterations the uncertainties are not at all independent and in fact
they tend to cancel each other.  A more sophisticated error analysis
would reveal just how well or ill conditioned the iteration may be, but
such analysis would be completely impractical if built into the basic
arithmetic of Mathematica.  (It would be possible to do by giving a serial
number to a symbolic representation for each rounding error throughout
the calculation, but the result would be huge and unusable.)

Since it is not practical to build error analysis into basic arithmetic
and the overly pessimistic results produced by the repeated use of the
triangle inequality are often not acceptable you have to somehow prevent
the degradation of precision that occurs with the default arithmetic.
In Version 2.1 you can set the global variable $MinPrecision to some positive
value and then every result will have at least that precision.  NOTE HOWEVER
THAT THIS WILL OFTEN PRODUCE DIGITS THAT ARE UNJUSTIFIED.  YOU WILL HAVE TO
DO YOUR OWN ERROR ANALYSIS TO KNOW HOW MANY DIGITS ARE CORRECT.  It is
highly recommended that you only change $MinPrecision and $MaxPrecision
within the confines of a Block[ ] statement to prevent the effects of their
changes interfering with all of your calculations.  (Yes, that's Block[ ].
Do not use Module[ ] for this because it won't work.)

Prior to Version 2.1 about all you can do is use SetPrecision[ ] to expliciily
force the precision of each calculation in the iteration to be a certain
value.

Jerry B. Keiper
keiper at wri.com





  • Prev by Date: Re: background job in mma
  • Next by Date: Project CALC Mathematica notebooks.
  • Previous by thread: Fast hartley transform (no power of 2 or 4 required)
  • Next by thread: Re: Would you post this Mathematica question to news group for me, please?