Re: Accuracy problem in Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg49110] Re: Accuracy problem in Mathematica
- From: Bill Rowe <readnewsciv at earthlink.net>
- Date: Thu, 1 Jul 2004 05:26:09 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
On 6/30/04 at 5:34 AM, aaa at huji.ac.il (aaaa) wrote: >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? The problem is setting a to 0.5. This causes Mathematica to use machine numbers for the entire computation. The solution is to increase the precision of a or to make it an exact value, i.e., either have a = 1/2 or a = N[1/2, m] for some reasonably large m For example, In[1]:= a = 1/2; n = 400; 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}]] Out[3]= 0.05619267148769478 In[4]:= a = N[1/2, 100]; n = 400; 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}]] Out[6]= 0.05619267148769478 -- To reply via email subtract one hundred and four