MathGroup Archive 2002

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

Search the Archive

Re: Loss of precision when using Simplify

  • To: mathgroup at smc.vnet.net
  • Subject: [mg36962] Re: [mg36925] Loss of precision when using Simplify
  • From: "Carl K. Woll" <carlw at u.washington.edu>
  • Date: Thu, 3 Oct 2002 00:16:59 -0400 (EDT)
  • References: <9A5250F0-D610-11D6-B988-00039311C1CC@platon.c.u-tokyo.ac.jp>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Andrzej,

Technical support has responded to my query. They say that one of the
simplifications that Mathematica does when using Simplify is to Factor the
expression, and factoring an expression consisting of inexact numbers leads
to the type of behavior I observed. They stated that changing the behavior
of Simplify to avoid the problems I noticed would make Simplify less
capable, and that the majority of users would prefer to have Simplify behave
the way it currently does.

Of course, that doesn't answer the question about why the number of terms in
the expression would cause the coefficients to go from rational to inexact
to rational again.

At any rate, I have another lesson learned. When using Simplify, check the
result if you are mixing infinite precision and inexact numbers, as the
result may not be what you wanted. In the past I always assumed that the
result of using Simplify on an expression produced a result equivalent to
the original expression, but now I discover that this is not true.

Carl Woll
Physics Dept
U of Washington

----- Original Message -----
From: "Andrzej Kozlowski" <andrzej at platon.c.u-tokyo.ac.jp>
To: mathgroup at smc.vnet.net
Subject: [mg36962] Re: [mg36925] Loss of precision when using Simplify


> Dear Carl
>
> You have discovered what is perhaps a bug but maybe something even mor
> einteresting . However, I think you stopped your investigation a little
> prematurely. Here is a function that just computes the coefficient of
> x[1] in your Simplified expression for various values of n:
>
> CW[n_] := Coefficient[Simplify[1.001`17 + Sum[(x[i] - 1.001`17)/2^i,
> {i, \
> n}]], x[1]]
>
> Now lets try CW for the first 100 values of n:
>
>
> In[30]:=
> Table[CW[n], {n, 100}]
>
> Out[30]=
> {1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2,
>    0.5`12.3085, 0.5`12.0074, 0.5`11.7064, 0.5`11.4054,
>    0.5`11.1043, 0.5`10.8033, 0.5`10.5023, 0.5`10.2012,
>    0.5`9.9002, 0.5`9.5992, 0.5`9.2982, 0.5`8.9971,
>    0.5`8.6961, 0.5`8.3951, 0.5`8.094, 0.5`7.793, 0.5`7.492,
>    0.5`7.1909, 0.5`6.8899, 0.5`6.5889, 0.5`6.2879,
>    0.5`5.9868, 0.5`5.6858, 0.5`5.3848, 0.5`5.0837,
>    0.5`4.7827, 0.5`4.4817, 0.5`4.1806, 0.5`3.8796,
>    0.5`3.5786, 0.5`3.2776, 0.5`2.9765, 0.5`2.6755,
>    0.5`2.3745, 0.5`2.3745, 0.5`1.7724, 0.5`1.7724,
>    0.5`1.1703, 0.5`1.1703, 0.5`0.5683, 0``0.1423, 0``0.1423,
>    0``0.1423, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2,
>    1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2,
>    1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2,
>    1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2, 1/2,
>    1/2, 1/2, 1/2}
>
> In[31]:= Map[Length,Split[#]]
>
> Out[31]=
> {12,43,45}
>
> This is indeed curious.The problem seems to occur for values between 13
> and 55 and then go away (for good???)  At first I thought it maybe in
> some fascinating way related to some properties of the integer n, but
> now I am not sure. It certainly worth a careful examination. I hope
> whoever discovers the cause of this will let us know.
>
> Andrzej
>
> Andrzej Kozlowski
> Yokohama, Japan
> http://www.mimuw.edu.pl/~akoz/
> http://platon.c.u-tokyo.ac.jp/andrzej/
>
>
> On Wednesday, October 2, 2002, at 04:32 PM, Carl K. Woll wrote:
>
> > To Technical Support and the Mathematica User community,
> >
> > I'm writing to report what I consider to be a bug. First, I want to
> > show a
> > simplified example of the problem. Consider the following expression:
> >
> > expr=0.22 + x[0] + (3*(-0.16+ x[1]))/4 + (9*(0.546 + x[2]))/16;
> >
> > When simplified I expected to get some real number plus
> > x[0]+3x[1]/4+9x[2]/16, but instead I get the following:
> >
> > Simplify[expr]
> > 0.407125 + x[0] + 0.75 x[1] + 0.5625 x[2]
> >
> > As you can see, for some reason Mathematica converted the fractions
> > 3/4 and
> > 9/16 to real machine numbers. I consider this to be a bug.
> >
> > Now, for an example more representative of the situation that I've been
> > coming across.
> >
> > expr12 = 1.001`17 + Sum[(x[i] - 1.001`17)/2^i, {i, 12}];
> > expr13 = 1.001`17 + Sum[(x[i] - 1.001`17)/2^i, {i, 13}];
> > expr55 = 1.001`17 + Sum[(x[i] - 1.001`17)/2^i, {i, 55}];
> >
> > As you can see, I have replaced the real numbers by extended precision
> > numbers. The simplified example above demonstrates that the problem
> > exists
> > when using machine numbers. Now, we'll see what happens when we use
> > arbitrary precision numbers. First, let's simplify the expression with
> > 12
> > terms.
> >
> > Simplify[expr12]
> > (1.0010000000000 + 2048 x[1] + 1024 x[2] + 512 x[3] + 256 x[4] + 128
> > x[5] +
> >
> >     64 x[6] + 32 x[7] + 16 x[8] + 8 x[9] + 4 x[10] + 2 x[11] + x[12])
> > / 4096
> >
> > As you can see, a sum with 12 terms upon simplification has
> > coefficients
> > which are still integers as they should be. However, increasing the
> > number
> > of terms to 13 yields
> >
> > Simplify[expr13]
> > 0.0001221923828125 + 0.500000000000 x[1] + 0.250000000000 x[2] +
> >
> >   0.1250000000000 x[3] + 0.0625000000000 x[4] + 0.0312500000000 x[5] +
> >
> >   0.01562500000000 x[6] + 0.00781250000000 x[7] + 0.00390625000000
> > x[8] +
> >
> >   0.001953125000000 x[9] + 0.000976562500000 x[10] + 0.000488281250000
> > x[11]
> > +
> >
> >   0.000244140625000 x[12] + 0.0001220703125000 x[13]
> >
> > Now, all of the coefficients are converted to real numbers,
> > replicating the
> > bug from the simplified example. Finally, let's see what happens when
> > we
> > have 55 terms. Rather than putting the resulting expression here, I
> > will
> > just leave it at the end of the post. The result though is somewhat
> > surprising. Each of the coefficients of the x[i] are again real
> > numbers, but
> > now their precision is only 0! The proper result of course is the sum
> > of
> > some real number (with a precision close to 0 due to numerical
> > cancellation)
> > and an expression consisting of rational numbers multiplied by x[i].
> > The
> > loss of precision of the coefficients of the x[i] is precisely what
> > occurred
> > to me. Of course, in this simple example, simply using Expand instead
> > of
> > Simplify produces the expected result, and is my workaround. I hope you
> > agree with me that this is a bug, and one that Wolfram needs to
> > correct.
> >
> > Carl Woll
> > Physics Dept
> > U of Washington
> >
> > Simplify[expr55]
> >      -16                            -1             -1             -1
> > 0. 10    + 0. x[1] + 0. x[2] + 0. 10   x[3] + 0. 10   x[4] + 0. 10
> > x[5] +
> >
> >        -2             -2             -2             -3             -3
> >   0. 10   x[6] + 0. 10   x[7] + 0. 10   x[8] + 0. 10   x[9] + 0. 10
> > x[10]
> > +
> >
> >        -3              -3              -4              -4
> > -4
> >   0. 10   x[11] + 0. 10   x[12] + 0. 10   x[13] + 0. 10   x[14] + 0. 10
> > x[15] +
> >
> >        -5              -5              -5              -6
> > -6
> >   0. 10   x[16] + 0. 10   x[17] + 0. 10   x[18] + 0. 10   x[19] + 0. 10
> > x[20] +
> >
> >        -6              -6              -7              -7
> > -7
> >   0. 10   x[21] + 0. 10   x[22] + 0. 10   x[23] + 0. 10   x[24] + 0. 10
> > x[25] +
> >
> >        -8              -8              -8              -9
> > -9
> >   0. 10   x[26] + 0. 10   x[27] + 0. 10   x[28] + 0. 10   x[29] + 0. 10
> > x[30] +
> >
> >        -9              -9              -10              -10
> >   0. 10   x[31] + 0. 10   x[32] + 0. 10    x[33] + 0. 10    x[34] +
> >
> >        -10              -11              -11              -11
> >   0. 10    x[35] + 0. 10    x[36] + 0. 10    x[37] + 0. 10    x[38] +
> >
> >        -12              -12              -12              -12
> >   0. 10    x[39] + 0. 10    x[40] + 0. 10    x[41] + 0. 10    x[42] +
> >
> >        -13              -13              -13              -14
> >   0. 10    x[43] + 0. 10    x[44] + 0. 10    x[45] + 0. 10    x[46] +
> >
> >        -14              -14              -15              -15
> >   0. 10    x[47] + 0. 10    x[48] + 0. 10    x[49] + 0. 10    x[50] +
> >
> >        -15              -15              -16              -16
> >     -
> > 16
> >   0. 10    x[51] + 0. 10    x[52] + 0. 10    x[53] + 0. 10    x[54] +
> > 0. 10
> > x[55]
> >
> >
> >
> >
> >
> >
> >
>



  • Prev by Date: Re: Loss of precision when using Simplify
  • Next by Date: RE: Re: Re: Request for Mathematica Programming help.
  • Previous by thread: Re: Loss of precision when using Simplify
  • Next by thread: Re: Loss of precision when using Simplify