分页: 1 / 1

pi的两个近似公式

发表于 : 2023年 7月 5日 23:00
(ツ)
第一个
pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...

第二个
pi/6 = w - 1/3 * w^3 + 1/5 * w^5 - 1/7 * w^7 +...., w = 1/sqrt(3)

第二个收敛速度要快很多啊,大约10~20项就差不多了,第一个要10000项才能跟第二个差不多的误差.

提供code懒人包

代码: 全选

N = 10000;

multiplier = 1;
sum = 0;
for i = 1 : N
    sum = sum + multiplier / (2 * i - 1);
    multiplier = -multiplier;
end

sum = sum * 4

代码: 全选

N = 20;

multiplier = 1;
w = 1/sqrt(3);
sum = 0;
for i = 1 : N
    order = 2 * i - 1
    sum = sum + multiplier * w^order / order;
    multiplier = -multiplier;
end

sum = sum * 6

Re: pi的两个近似公式

发表于 : 2023年 7月 5日 23:07
TheMatrix
这好像不是python.

Re: pi的两个近似公式

发表于 : 2023年 7月 5日 23:08
randomatrices
这俩个都不行吧. 最快的是用椭圆函数, AGM那些, 一步4位精度,俩步就到八位。现在pi 已经算到万亿位了吧, 谁会用这俩个初级的东西?

Re: pi的两个近似公式

发表于 : 2023年 7月 6日 10:31
verdelite
中国共产党未命空间党小组 写了: 2023年 7月 6日 06:39 一看就是matlab啊
好久没用了,看第一眼竟然没想起来是哪个语言。

Re: pi的两个近似公式

发表于 : 2023年 7月 6日 14:39
TheMatrix
中国共产党未命空间党小组 写了: 2023年 7月 6日 06:39 一看就是matlab啊
谢谢。我没用过matlab。

Re: pi的两个近似公式

发表于 : 2023年 7月 6日 21:48
取诸怀抱
顺手改成python。

代码: 全选

N = 10000;

multiplier = 1;
sum = 0;
for i in arange(1, N):
    sum = sum + multiplier / (2 * i - 1);
    multiplier = -1*multiplier;

sum = sum * 4
print(sum)

代码: 全选

N = 20;

multiplier = 1;
w = 1/sqrt(3);
sum = 0;
for i in arange(1, N):
    order = 2 * i - 1
    sum = sum + multiplier * w**order / order;
    multiplier = -multiplier;

sum = sum * 6
print(sum)

Re: pi的两个近似公式

发表于 : 2023年 7月 6日 21:51
SunnyA
TheMatrix 写了: 2023年 7月 5日 23:07 这好像不是python.
matlab

Re: pi的两个近似公式

发表于 : 2023年 7月 6日 23:09
(ツ)
取诸怀抱 写了: 2023年 7月 6日 21:48 顺手改成python。

代码: 全选

N = 10000;

multiplier = 1;
sum = 0;
for i in arange(1, N):
    sum = sum + multiplier / (2 * i - 1);
    multiplier = -1*multiplier;

sum = sum * 4
print(sum)

代码: 全选

N = 20;

multiplier = 1;
w = 1/sqrt(3);
sum = 0;
for i in arange(1, N):
    order = 2 * i - 1
    sum = sum + multiplier * w**order / order;
    multiplier = -multiplier;

sum = sum * 6
print(sum)
帮你改改

代码: 全选

import math
N = 100
indices = list(range(N))

print(sum([1 / (i * 2 + 1) if i % 2 == 0 else -1 / (i * 2 + 1) for i in indices]) * 4)

w = 1 / math.sqrt(3)
print(sum([w**(i * 2 + 1) / (i * 2 + 1) if i % 2 == 0 else -w**(i * 2 + 1) / (i * 2 + 1) for i in indices]) * 6)
再补一个超简洁版

代码: 全选

sum [(-1) ** x / (x * 2 + 1) | x <- [0..100]] * 4

代码: 全选

sum [(-1) ** x / (x * 2 + 1) * ((1 / (sqrt 3)) ** (x * 2 + 1)) | x <- [0..10]] * 6

Re: pi的两个近似公式

发表于 : 2023年 7月 7日 10:32
SunnyA
(ツ) 写了: 2023年 7月 6日 23:09 帮你改改

代码: 全选

import math
N = 100
indices = list(range(N))

print(sum([1 / (i * 2 + 1) if i % 2 == 0 else -1 / (i * 2 + 1) for i in indices]) * 4)

w = 1 / math.sqrt(3)
print(sum([w**(i * 2 + 1) / (i * 2 + 1) if i % 2 == 0 else -w**(i * 2 + 1) / (i * 2 + 1) for i in indices]) * 6)
再给你改改:

sum((-1)**(n+1)/(2*n-1) for n in range(1,1000000))*4