2017-07-07 42 views
-1

给出的等式来近似pi近似PI使用finitie系列

Here is the equation to approximate pi

我需要的术语(n)所需要获得的近似即内的pi实际值的10^(-12)数。该代码我必须要找到n看起来是这样的:

]

code to find n

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

+3

它永远不会结束,因为你并没有在'while while true'循环中增加'n'(近似值序列项的计数)。 – randomir

+0

我恢复了一些编辑,因为它们包含答案的一部分。请注意,使用Matlab调试器可能对自己发现这样的错误非常有用。我可否要求你将代码作为文本而不是未来的图像? – m7913d

回答

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要快得多。

+0

感谢您的及时回复。我只是试图把n = n + 1放入循环中,但它仍然没有结束。你认为我的while循环看起来正确吗?或者,我该如何增加第n期 –

+0

问题可能出在双'sqrt'上。删除while循环中的一个(参见更新)。 – randomir

+0

感谢您指出。我将abs()添加到s函数部分,但是我的循环仍然没有结束。 n = 1的 S = 1 而真 S = ABS(PI - approximate_pi(n))的 如果s <= 10 ^( - 12) 断裂 端 N = N + 1 端 –