Matlab—计算圆周率近似值的4种方法

Matlab—计算圆周率近似值的4种方法

1.莱布尼茨公式

莱布尼茨公式
下面展示 代码——莱布尼茨公式

function s=count_pi(n)
s=0;
for n=1:n  
    s=s+(-1)^(n-1)/(2*n-1);
end
    pi=4*s;
    fprintf('π的近似值为%.6f ',pi)

2.欧拉公式

2.1 欧拉公式①
欧拉公式①
下面展示 代码——欧拉公式①

function s=count_pi(n)
s=0;
for n=1:n  
    s=s+1/n^2;
end
    pi=sqrt(6*s);
    fprintf('π的近似值为%.6f ',pi)

2.2 欧拉公式②
欧拉公式②
下面展示 代码——欧拉公式②

function s=count_pi(n)
s=0;
for n=0:n 
     s=s+(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6));
end
     pi=s;
     fprintf('π的近似值为%.6f ',pi)

3.拉马努金公式

3.1 拉马努金公式①
拉马努金公式①
下面展示 代码——拉马努金公式①

function s=count_pi(n)
s=0;
for n=0:n  
    s=((factorial(4*n)*(1103+26390*n))/((factorial(n))^4*396^(4*n)))+s;
end
    s=(2*sqrt(2)/9801)*s;
    pi=1/s;
    fprintf('π的近似值为%.6f ',pi)

3.2 拉马努金公式②
拉马努金公式②

下面展示 代码——拉马努金公式②

function s=count_pi(n)
s=0;
for n=0:n  
    s=s+factorial(6*n)*(13591409+545140134*n)/(factorial(3*n)*(factorial(n))^3*(-640320)^(3*n));
end
    a=426880*sqrt(10005)/s;
    pi=a;
    fprintf('π的近似值为%.6f ',pi)

4.蒙特卡洛方法

4.1 蒙特卡洛方法①

下面展示 代码——蒙特卡洛方法①

function s=count_pi(n)
s=0;
n=10^n;
for n=1:n;
    x=rand(1);
    y=rand(1);
    if x^2+y^2<=1
        s=s+1;
    end
    
end

4.2 蒙特卡洛方法②

下面展示 代码——蒙特卡洛方法②

function s=count_pi(n)
s=0;
for n=1:n  
    s=s+(-1)^(n-1)/(2*n-1);
end
    pi=4*s;
    fprintf('π的近似值为%.6f ',pi)

5.代码集合

下面展示 代码集合

function s=count_pi(n,flag)
%Mtalab计算Π的7种方法
%flag=1,2,3时,n取值尽可能大,数值越大,精确度越高
%flag=4时,n取值不宜超过40,否则输出结果为无效数值NaN
%flag=5时,n取值不宜超过27,否则输出结果为无效数值NaN
%flag=6,7时,n由于采用蒙特卡洛方法,误差是概率误差,所以只能得出一个近似值Π
%每次end之后,pi的赋值仅为个人习惯

%% Method 1 莱布尼茨公式
if flag==1
    s=0;
for n=1:n  
    s=s+(-1)^(n-1)/(2*n-1);
end
    pi=4*s;
    fprintf('π的近似值为%.6f ',pi)

%% Method 2 欧拉公式①
elseif flag==2
    s=0;
    for n=1:n  
        s=s+1/n^2;
    end
        pi=sqrt(6*s);
        fprintf('π的近似值为%.6f ',pi)
    
%% Method 3 欧拉公式②
elseif flag==3
    s=0;
    for n=0:n 
        s=s+(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6));
    end
        pi=s;
        fprintf('π的近似值为%.6f ',pi)
    
%% Method 4 拉马努金公式①
elseif flag==4
    s=0;
    for n=0:n  
        s=((factorial(4*n)*(1103+26390*n))/((factorial(n))^4*396^(4*n)))+s;
    end
        s=(2*sqrt(2)/9801)*s;
        pi=1/s;
        fprintf('π的近似值为%.6f ',pi)
    
%% Method 5 拉马努金公式②
elseif flag==5
    s=0;
    for n=0:n  
        s=s+factorial(6*n)*(13591409+545140134*n)/(factorial(3*n)*(factorial(n))^3*(-640320)^(3*n));
    end
        a=426880*sqrt(10005)/s;
        pi=a;
        fprintf('π的近似值为%.6f ',pi)
 
%% Method 6 蒙特卡洛方法①
elseif flag==6
    s=0;
    n=10^n;
    for n=1:n
        x=rand(1);
        y=rand(1);
    if x^2+y^2 <= 1
        s=s+1;
    end
end
    pi=s/n*4;
    fprintf('π的近似值为%.6f ',pi)
 
%% Method 7 蒙特卡洛方法②
elseif flag==7
    z=rand(n,2);
    a=z(:,1).^2+z(:,2).^2;
    b=(a<=1);
    m=sum(b);
    y=4*m/n;
    pi=y;
    fprintf('π的近似值为%.6f ',pi)
    
end


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MoziCat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值