Approximating Pi by Using Ramanujan's Formula
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Peter Wang
el 1 de Sept. de 2020
Editada: Bruno Luong
el 1 de Sept. de 2020
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 comentarios
Bruno Luong
el 1 de Sept. de 2020
Editada: Bruno Luong
el 1 de Sept. de 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
Respuesta aceptada
Stephen23
el 1 de Sept. de 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 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Biological and Health Sciences en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!