Approximating Pi by Using Ramanujan's Formula
Afficher commentaires plus anciens
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 commentaires
Walter Roberson
le 1 Sep 2020
You are taking sum of the numerator only, and then dividing by the vector that is the denominator.
Note: you also need to vectorize your code. You are working with vectors derived from 1:k so you need to use vector operations such as .^
Note: as the factorial documentation explains, you will only get an exact result when its input is 21 or less. This means in Ramanujan's Formula the term (4*k)! restricts k to 5 or less. Larger values of k will return inexact values for that factorial (inexact values can be calculated up to 170!).
Peter Wang
le 1 Sep 2020
Modifié(e) : Peter Wang
le 1 Sep 2020
Walter Roberson
le 1 Sep 2020
Beyond 21 you should probably be using the Symbolic Toolbox
Bruno Luong
le 1 Sep 2020
Modifié(e) : Bruno Luong
le 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
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Biological and Health Sciences dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!