使用finitie系列

时间:2017-07-07 23:41:01

标签: matlab while-loop

给出近似pi

的等式

Here is the equation to approximate pi

我需要获得与n实际值10^(-12)内的近似值所需的术语数(pi)。我必须找到n的代码如下:

]

code to find n

我所拥有的while循环语句似乎永远不会结束,所以我觉得我的代码一定是错的。

1 个答案:

答案 0 :(得分:1)

尝试沿着这些线条(从图像转录),增加近似项n 内部无限while循环的数量:

s = 1
n = 1
while true
    s = abs(pi - approximate_pi(n))
    if s <= 0.001
        break
    end
    n = n + 1
end

在相关的说明中,如果您事先知道pi的值,则此计算有点无意义。终止条件n-th项的绝对量值上。

只有当你试图找出你的逼近序列在某个误差范围内产生结果的最小n时,你的方式才有意义。

修改即可。所以,通常你会这样做:

n = 1;
sum_running = 0
sum_target = (pi^2 - 8) / 16;
while true
    sum_running += 1 / ((2*n-1)^2 * (2*n+1)^2);
    if abs(sum_target - sum_running) <= 10e-12
        break
    end
    n += 1;
end
pi_approx = sqrt(16*sum_running + 8)

对于每个新pi,无需为n项重新计算n近似值。这具有O(n)复杂度,而您的初始解决方案为O(n^2),因此对于大型n来说速度要快得多。