下面的代码估计R中的pi,现在我试图找到在估计pie时必须包含的最小项数N_Min,以使其精确到小数点后三位。
pi_Est<- function(NTerms){
NTerms = 5 # start with an estimate of just five terms
pi_Est = 0 # initialise the value of pi to zero
Sum_i = NA # initialise the summation variable to null
for(ii in 1:NTerms)
{
Sum_i[ii] = (-1)^(ii+1)/(2*ii - 1) # this is the series equation for calculating pi
}
Sum_i = 4*Sum_i # multiply by four as required in the formula (see lecture notes)
pi_Est = sum(Sum_i)
cat('\nThe estimate of pi with terms = ', NTerms ,' is ',pi_Est)
}
4条答案
按热度按时间oalqel3c1#
首先,我会改变你的函数的一些东西,让它返回一个值,而不是打印出一条消息,否则它会变得很难对它的输出做任何事情,包括测试它是否收敛到pi。
此外,无论
NTerms
的值是多少,您都会立即覆盖函数内部的NTerms
。您可以将函数重写为:
为了证明它收敛于π,让我们用5万项来测试它:
现在,如果我们想找到
NTerms
的第一个值,它精确到小数点后3位,我们需要能够在NTerms
的一个 vector 上调用这个函数--目前它只对一个数字起作用,所以让我们定义一个函数f
,它将pi_Est
向量化:现在,让我们为
NTerms
在1到2,000之间的所有值创建估计值,并将它们存储在一个向量中:我们可以看到,
estimates
的值看起来在周围振荡,如果我们画出前100个值,就会收敛到pi
:我们的答案是第一个值,当四舍五入到小数点后三位时,它与四舍五入到小数点后三位的pi相同:
我们可以通过将1103输入到原始函数中来检查这是否正确:
你会看到,这会得到3.142,这与四舍五入到小数点后3位的pi相同。
由reprex package(v2.0.1)于2022年1月31日创建
thigvfpy2#
需要
1000
项以使估计精确到0.001
内:2ekbmq323#
也许我们可以试试下面的代码
你会看到
irtuqstp4#
为什么不使用单行代码进行计算呢?