我试图计算级数之和: n=1 (1/n),Σ,n=inf。(对于每一个自然数n>0,计算1/n的和)
我们希望matlab返回循环数,直到-Σ(N)Σ(n-1)=0为止。
( ii)我们要计算代码需要结束的时间。
由于n的增量没有限制,所以代码的运行时间很长。然而,对于n=~10^8,我们应该使用ie符号和(1,n)来估计和数吗?如果不是,我们如何计算上述问题?
发布于 2013-12-05 03:18:56
我认为这就是你如何接近实际解决方案的方法。这绝不是一个理论上的解决方案,但它会缩小你的搜索范围的一个巨大的数量。首先,一些概念:
ln(n+1,其中n+1是迭代次数(而不是n)。例如,如果您运行10^8迭代,之和将是~ log(10^8-1)=18.420680733952366,而实际值(即代码)是18.997896413852555。我知道这是一个巨大的差异,但让我们接受它(至少我不知道任何其他方法)。更新:请参阅对此答案的注释,您实际上可以添加Euler-Mascheroni常量,以获得更好的近似)。
sum值的增加,您的精度会变得更短,eps(sum)可以获得最小精度的值,即在10^8迭代之后,eps(sum)=3.552713678800501e-15的值。10^8迭代中,上一次迭代的增量是1/10^8。eps(8)>1e-15。迭代10^15 = 10^-15 < eps(8)的增量。因此,已经不可能达到10^15次迭代。让我们试试10^14迭代。迭代10^14 = 10^-14 < eps(64)的增量。这意味着,10^14次迭代的和应小于64次。是吗?让我们检查一下(1)中的公式。是= log(10^14-1) = 32.236191301916627。实际上,我发现了在满足条件时迭代的次数。我将其计算如下:
eps(33)= 7.105427357601002e-015 (因为eps的值为32到63,所以您的和永远不会达到64,所以这就是您应该处理的eps的值)。所以你需要你的增量刚好高于这个数字。因此,我决定将增量改为7.1055e-15。我们已经知道迭代的次数在10^14到10^15之间。因此,需要的迭代次数必须是k*10^14,其中k是介于1到10之间的常数(因为当k = 10本质上变成10^15)。解决(1/(k*10^14))=7.1055e-15 (您可以做得更好,我决定坚持使用7.1055e-15。我找到k=1.407360495390895了。因此,迭代次数= 1.407360495390895*10^14。
我可能错了。请交叉核对。另外,我建议您在math.stackoverflow中发布这篇文章。在此之前,你需要一个理论上的解决方案,你可以得到更好的答案。
发布于 2013-12-05 00:53:23
你的问题有几个方面:
(广告一)定义一个循环,开始总结你的1/n
在Matlab命令tic和toc下执行一个循环
最后但同样重要的一点是:您应该将1/n与机器epsilon进行比较,在Matlab中,这是eps,以便一旦机器无法添加与和相关的内容并中止循环,就会中止。根据所需的和精度,您当然可以提前中止,例如,将1/n与1e-8进行比较将意味着在n= 1e8处停止。
发布于 2013-12-05 15:34:41
您可以运行这段代码来测试它是否遇到任何实际的边界,我相信这正是您所要寻找的:
N = 1;
oldSum = -1;
mySum = 0;
tic
while oldSum~=mySum
oldSum = mySum;
mySum = mySum + 1/N;
N = N+1;
end
toc
N再想一想,这可能会永远持续下去。如果您使用此行,则:
mySum = single(mySum + 1/N);您可以看到精度较低的数据类型的结果。在21.5秒内,它达到2097153次迭代并终止。
这可以用来测试理论方法。
UPDATE I认为,与其降低精度,不如增加步长。下面是得到这个数字的近似的代码,从这里得到估计的计算时间应该不会那么困难:
N = 1;
oldSum = -1;
mySum = 0;
p=10;
tic
while oldSum~=mySum && N
oldSum = mySum;
mySum = mySum + 1/N;
if N<1e9 % We need to build up till approximately the right number
N = N+1;
else % Here the decrease in 1/N is much more significant than the change in epsilon
N = N+1e8;
end
end
toc这段代码大约在19秒钟内完成,其中大约1秒用于大幅度增长,经过一些快速计算后,我认为完成这些工作的估计时间大约是:
18 + 1e8秒或大约3年。
https://stackoverflow.com/questions/20389277
复制相似问题