MathGroup Archive 1998

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

Search the Archive

Re: Can it be done - easily?

Barry Culhane wrote:

> Myself and two workmates are software developers.  One guy wanted a
> formula to calculate a result for the following equation...
>      Z = sum of X/Y where X is a fixed number, and Y ranges from A-B in
> fixed steps...
>      i.e... X=10000 ; Y=100,200,300...1000
>      i.e... Z= 10000/100 + 10000/200 + ... 10000/1000 =  292.896
> He and I tried to figure out a simple formula to calculate it, but
> couldn't. The third guy said it was *not* *possible* to derive a
> formula - we think he's wrong, but can't prove it.  

He's wrong -- sort of.  There is a formula, but it is not that simple:

	In[1]:= f[x_,a_,b_,d_] = x Sum[1/(a + i*d), {i, 0, (b-a)/d}]
		                    b                 a
		x (PolyGamma[0, 1 + -] - PolyGamma[0, -])
		                    d                 d

For your parameter values, x=10000, a=100, b=1000, d=100, the exact sum

	In[2]:= f[10000,100,1000,100]

with numerical value,

	In[3]:= N[%]
	Out[3]= 292.897

> MathCad can solve
> it in the blink of an eye, even if the value of Y ranges from 1 to 1e6
> in steps of 1 !!!

But Mathematica can give you the exact formula for any X and Y!  Also,
using NSum (numerical summation) instead of Sum, we find

	In[4]:= Nf[x_,a_,b_,d_] := x NSum[1/(a + i*d), {i, 0, (b-a)/d}]

	In[5]:= Nf[x,1,10^6,1]//Timing
	Out[5]= {0.14 Second,14.3927 x}	
which is the correct result for any value of x.

> Can anyone come up with a simple formula to give a reasonably accurate
> result?  It is too slow to actually divide X by Y for each value of Y
> as there may be 1000 or even 100,000 values of Y.

Obviously, X is a constant that can should be factored out of the
computation (as is done above).  For appropriate parameter ranges, NSum
uses the Euler-Maclaurin formula which greatly speeds up the

There is a simple asymptotic formula which you can use: For large n, the
harmonic series

	Sum[1/i, {i, 1, n}]

is well approximated by

	                  1      1      1       1        1 5
	(EulerGamma - Log[-]) + --- - ----- + ------ + O[-]
	                  n     2 n       2        4     n
	                              12 n    120 n

where EulerGamma is 0.577215664901532860606512090...  Inserting n = 10^6
into this truncated asymptotic series, one gets 14.3927 which agrees
with the above computation using NSum.


Paul Abbott                                   Phone: +61-8-9380-2734
Department of Physics                           Fax: +61-8-9380-1014
The University of Western Australia            Nedlands WA  6907       
mailto:paul at  AUSTRALIA                   

            God IS a weakly left-handed dice player

  • Prev by Date: Re: Re: Corrupt Mathematica Notebooks
  • Next by Date: Re: Editable Images of the Globe?
  • Previous by thread: Re: Can it be done - easily?
  • Next by thread: Re: Can it be done - easily?