Approximating Pi by Using Ramanujan's Formula
10 views (last 30 days)
Show older comments
Hi. This is my first post so please let me know if I violate any kind of rules. Thank you in advance.
I intend to approximate pi by summing a specified number of terms (k). The output I got was nowhere near what I wanted. Could someone help me please?
Here is the equation I'm using:

And there is the code:
k = input('Number of terms: ');
pi2 = sum(factorial([1:k]*4).*(1103+26390*[1:k]));
pi2 = pi2/((factorial([1:k])^4)*396^(4*[1:k]));
pi2 = (pi2*(2*sqrt(2)/9801))^(-1);
fprintf('Method: %.20f\n', pi2);
5 Comments
Bruno Luong
on 1 Sep 2020
Edited: Bruno Luong
on 1 Sep 2020
You already get inexact result even for one term since the division in double is inexact. As long as D and N is finite the calculation is OK (and inexact anyway for partial sum).
Actually the result doesn't change after N=2 and it's already equal to 1/pi at 15 digits !!!
>> N=1:42;
>> Ramanujan=@(N)(2*sqrt(2)/9801)*sum((factorial(4*(0:N)).*(1103+26390*(0:N))./((factorial(0:N).^4).*(396.^(4*(0:N))))));
>> A=arrayfun(Ramanujan, N); % only the last term is NaN
>> A==1/pi
ans =
1×42 logical array
Columns 1 through 26
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Columns 27 through 42
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
Accepted Answer
Stephen23
on 1 Sep 2020
>> k = 5;
>> V = 0:k;
>> N = factorial(4.*V).*(1103+26390.*V);
>> D = (factorial(V).^4).*(396.^(4.*V));
>> (2*sqrt(2)/9801)*sum(N./D)
ans = 3.183098861837907e-01
>> 1./pi
ans = 3.183098861837907e-01
0 Comments
More Answers (0)
See Also
Categories
Find more on Biological and Health Sciences in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!