Approximating Pi by Using Ramanujan's Formula

16 ビュー (過去 30 日間)
Peter Wang
Peter Wang 2020 年 9 月 1 日
編集済み: Bruno Luong 2020 年 9 月 1 日
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 件のコメント
Walter Roberson
Walter Roberson 2020 年 9 月 1 日
Beyond 21 you should probably be using the Symbolic Toolbox
Bruno Luong
Bruno Luong 2020 年 9 月 1 日
編集済み: Bruno Luong 2020 年 9 月 1 日
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

サインインしてコメントする。

採用された回答

Stephen23
Stephen23 2020 年 9 月 1 日
>> 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 件)

カテゴリ

Help Center および File ExchangeBiological and Health Sciences についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by