Re: can't translate 3D model to 0,0,0
- To: mathgroup at smc.vnet.net
- Subject: [mg88437] Re: can't translate 3D model to 0,0,0
- From: "Szabolcs HorvÃt" <szhorvat at gmail.com>
- Date: Mon, 5 May 2008 06:14:38 -0400 (EDT)
- References: <fvhe4g$3v9$1@smc.vnet.net> <481C4C0F.9080900@gmail.com>
On Sat, May 3, 2008 at 2:20 PM, william parr <willpowers69 at hotmail.com> wrote: > > Hi Szabolcs, > > sorry, I don't understand. for which mean do you get 0,0,0? your final > output is: > > Out[3]= {-1.55431*10^-17, -6.66134*10^-18, 4.44089*10^-18} > > I know it is very close to 0,0,0, but why is it not exactly 0,0,0? We're working with inexact numbers (more precisely: machine precision numbers, which have a precision of approx. 16 digits). It is expected that the result cannot be _exactly_ zero because of numerical errors. Since the numbers in the data are of order of magnitude of 1, and we're working with ~ 16 digits of precision, the numerical error simply cannot be much less than 10^-16. In fact, Mathematica does a much better job with this than programming languages that were not specifically designed for doing math. It uses a special summation algorithm to minimize the numerical error (see the Method option of Total) For example, let's try a similar computation in both Mathematica and Python: The Python version: In [1]: from random import random In [2]: data = [random() for x in xrange(1000000)] In [3]: m = sum(data)/len(data) In [4]: mdata = [x - m for x in data] In [5]: sum(mdata)/len(mdata) Out[5]: -1.2785664860182067e-014 The Mathematica version: In[1]:= data = RandomReal[1, 1000000]; In[2]:= Mean[data - Mean[data]] Out[2]= 2.01783*10^-17 Note that the error is 3 orders of magnitude smaller in the case of Mathematica. > also, > i've found with different models the means are slightly different (not > surprisingly): Of course: RandomReal generates a different sequence of points with each invocation, so the numerical error will be different, too. > > In[6]:= b = RandomReal[1, {100, 3}]; > mb = Mean[b]; > Mean[# - mb & /@ b] > > Out[8]= {1.77636*10^-17, 8.88178*10^-18, 3.9968*10^-17} > > > In[9]:= a = RandomReal[1, {100, 3}]; > ma = Mean[a]; > Mean[# - ma & /@ a] > > Out[11]= {2.05391*10^-17, 2.77556*10^-18, -6.66134*10^-18} > > am i missing the point somehow? > > the models I am working on are of the form in your demonstration, ie: > > {{0.96169, 0.0737274, 0.528905}, {0.297682, 0.741866, 0.67568},..., > {0.584149, 0.95142, 0.0996909}} >