给出的等式来近似pi
近似PI使用finitie系列
我需要的术语(n
)所需要获得的近似即内的pi
实际值的10^(-12)
数。该代码我必须要找到n
看起来是这样的:
的while
循环语句我似乎永远不会结束,所以我觉得我的代码一定是错误的。
给出的等式来近似pi
近似PI使用finitie系列
我需要的术语(n
)所需要获得的近似即内的pi
实际值的10^(-12)
数。该代码我必须要找到n
看起来是这样的:
的while
循环语句我似乎永远不会结束,所以我觉得我的代码一定是错误的。
尝试沿着这些线路(从图像中转录的)东西,增量近似术语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
要快得多。
感谢您的及时回复。我只是试图把n = n + 1放入循环中,但它仍然没有结束。你认为我的while循环看起来正确吗?或者,我该如何增加第n期 –
问题可能出在双'sqrt'上。删除while循环中的一个(参见更新)。 – randomir
感谢您指出。我将abs()添加到s函数部分,但是我的循环仍然没有结束。 n = 1的 S = 1 而真 S = ABS(PI - approximate_pi(n))的 如果s <= 10 ^( - 12) 断裂 端 N = N + 1 端 –
它永远不会结束,因为你并没有在'while while true'循环中增加'n'(近似值序列项的计数)。 – randomir
我恢复了一些编辑,因为它们包含答案的一部分。请注意,使用Matlab调试器可能对自己发现这样的错误非常有用。我可否要求你将代码作为文本而不是未来的图像? – m7913d