我的matlab有问题。我需要将数学系列1 / x从1到1E10相加。我在Matlab中有一些包含循环的代码 - 第一步循环步骤非常快,但是在循环的第二步它减速并且Matlab几乎冻结,所以我无法在适当的时间计算出来。
你能帮我解决这个问题吗?
对于较小的范围,它可以正常工作(例如1E06),但我需要计算整个范围。我试图分开到更小的范围,但仍然有循环和matlab非常慢。
看起来像matlab和for循环的问题,这会慢下来。在第一个循环步骤之后,RAM已满,但对于第二个循环步骤,RAM仍然已满,因此速度变慢。我不知道为什么Matlab没有释放RAM。
感谢您的帮助!
弗拉基米尔
答案 0 :(得分:4)
您想要获得1e10-th harmonic number。在符号工具箱中有一个函数,称为harmonic
,它的速度非常快:
>> format long %// to see more decimals
>> n = 1e10;
>> harmonic(n)
ans =
23.603066594891992
它如此之快的原因是harmonic
函数利用了relationship和Euler-Mascheroni constant之间的digamma function:
其中“psi”是digamma函数, H n 是 n 次谐波数,“gamma” “是Euler-Mascheroni常数。所以你也可以使用
>> n = 1e10;
>> vpa(psi(n+1) + eulergamma)
ans =
23.603066594891987434787570068504
如果您没有符号工具箱,您仍然可以:
>> g = 0.5772156649015328606065120900824; %// Euler-Mascheroni constant
>> n = 1e10;
>> psi(n+1) + g
ans =
23.603066594891988