Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

Re: Accuracy problem in Mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg49102] Re: [mg49061] Accuracy problem in Mathematica
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Thu, 1 Jul 2004 05:25:53 -0400 (EDT)
  • References: <200406300934.FAA05317@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

aaaa wrote:
> Hello,
> 
> I'm having a problem with a calculation in Mathematica which I can't 
> solve. I have an expression which I know to be (from analytical reasons) 
> always between 0 and 1. It's a function of a and n ( n being natural and 
> a rational) and it looks like this:
> 
> 1/(1-a^2)^n +
> 
> Sum[((2*n - k - 1)!/((n - 1)!*(n - k)!*2^(2*n - k)))*(1/(1 + a)^k - 1/(1 
> - a)^k), {k, 1, n}]
> 
>      
> 
> Let's say a=0.5.
> 
> Now, when I try to calculate for small n, it's ok. When calculating for 
> large n's (around 400 and above) I'm starting to get wrong results (the 
> number not being between 0 and 1). The problem is that the first term 
> (the first line before the sum) is VERY VERY close to the negative of 
> the second term (the sum), and it's getting closer as n grows. When 
> using large n's, Mathematica says they are the same number or even that 
> the last term is bigger (which means the whole expression becomes 
> negative) - which is wrong. It's a matter of accuracy, and I'm not sure 
> how I can fix it.
> 
> Can anybody help me?
> 
> 
> 
> Itamar


One way to avoid this cancellation error is to use higher precision in 
the input.

f[a_,n_] := 1/(1-a^2)^n + Sum[((2*n - k - 1)!/((n - 1)!*(n - k)!*
   2^(2*n - k)))*(1/(1 + a)^k - 1/(1 - a)^k), {k, 1, n}]

Either of the below will suffice. The first is likely to be generally 
faster for computation (it avoids costly integer arithmetic that will 
arise with large n).

In[7]:= f[N[1/2,100],400]
Out[7]= 0.0561926714876947832018238164192060366422234786

In[8]:= N[f[1/2,400]]
Out[8]= 0.0561927


Daniel Lichtblau
Wolfram Research



  • Prev by Date: Re: Accuracy problem in Mathematica
  • Next by Date: Re:MATHEMATICA AND FINANCIAL CALCULATIONS?
  • Previous by thread: Re: Accuracy problem in Mathematica
  • Next by thread: Re: Accuracy problem in Mathematica