求1+1/2+1/3+1/4+1/5+...1/n 的近似公式

liangbch 2004-06-24 10:12:36
我已经知道,当n>6时,有 1+1/2+1/3+1/4+1/5+1/6+...1/n < sqrt(n),但是无法推出更精确的公式,求数学牛人给出更好的近似公式。
...全文
9856 点赞 收藏 18
写回复
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesf 2004-07-04
ln n
回复
kerbcurb 2004-06-30
to NowCan(((((( ★ ))))))
前边写错了
应该是 1/x和1/(1 + x)的积分
回复
Riemann 2004-06-29
ln(n)+C, C为Euler常数
回复
shines77 2004-06-28
ln(1+x)= x - 1/2*x^2 + 1/3*x^3 - 1/4*x^4 + ......

简化就是上面的ln(2)
回复
NowCan 2004-06-28
还有,比较计算速度时不要IO输出,输出时间实际比计算时间长多了。
回复
NowCan 2004-06-28
各个编译器的性能问题我以前试过。
VC的整数运算肯定比BCB6快。尤其是int64类型,要快几倍。这个结论是筛100亿素数时发现的。
浮点数就不知道了,我在试试看。
回复
kerbcurb 2004-06-28
to宝宝,近似计算的话,Gamma(x)可以根据其定义进行积分运算(Romberg算法),速度和精度都很高,但是如果你用VC的话,如果输出超过10^308就会溢出,其他编译器没有这个问题,这里有一个帖子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2632260
回复
liangbch 2004-06-28
我来总结一下,数列的和、积与常数 pi, e, γ 的关系
e= 1+1/2!+1/3!+1/4!+...
ln(2)= 1-1/2+1/3-1/4+1/5+......
pi= 4*(1-1/3+1/5-1/7+...)
γ + ln(n)= 1+1/2+1/3+1/4+1/5+......
n!= sqrt(2 *pi * n)* (n/e)^n
回复
Kusk 2004-06-27
SUM(n) = γ + ln(n) + (1 / 2n) - (1 / 12n^2) + (1 / 120n^4) - epn

其中γ为欧拉常数(楼上已有说明),而误差epn将小于1 / 252n^6
回复
kerbcurb 2004-06-26
1+1/2+1/3+1/4+1/5+1/6+...1/n小于ln(1 + x)从1到n + 1的积分,大于ln(x)从1到n + 1的积分,你在坐标上画出来,很明显的。
回复
NowCan 2004-06-25
1+1/2+1/3+1/4+1/5+1/6+...1/n-ln(n),当n->Inf时极限存在,怎么证明?
回复
liangbch 2004-06-25
to kerbcurb, 等过两天再结帖子,一定不会使你失望。
回复
kerbcurb 2004-06-25
那个公式的近似准确度应该是很不错的
int main( int argc, char * argv[] )
{
for ( int k = 1; k < 100; k++)
{
double s = 0;
for ( int i = 1; i <= k; i++ )
s += 1.0 / i;
cout << k << " " << s - 0.5772156649 - log( k ) << endl;
}
cin.get();
return 0;
}
以下是n从1到99二者之差
1 0.422784
2 0.229637
3 0.157505
4 0.119823
5 0.0966798
6 0.0810249
7 0.0697313
8 0.0611999
9 0.054528
10 0.0491675
11 0.0447664
12 0.0410884
13 0.0379687
14 0.0352893
15 0.0329631
16 0.0309246
17 0.0291235
18 0.0275207
19 0.026085
20 0.0247917
21 0.0236206
22 0.0225551
23 0.0215816
24 0.0206887
25 0.0198667
26 0.0191075
27 0.0184042
28 0.0177509
29 0.0171423
30 0.0165741
31 0.0160423
32 0.0155436
33 0.015075
34 0.0146338
35 0.0142177
36 0.0138246
37 0.0134526
38 0.0131002
39 0.0127657
40 0.0124479
41 0.0121456
42 0.0118575
43 0.0115828
44 0.0113206
45 0.01107
46 0.0108302
47 0.0106006
48 0.0103805
49 0.0101694
50 0.00996667
51 0.00977188
52 0.00958457
53 0.0094043
54 0.00923068
55 0.00906336
56 0.008902
57 0.00874628
58 0.00859592
59 0.00845064
60 0.00831019
61 0.00817433
62 0.00804284
63 0.00791551
64 0.00779216
65 0.00767258
66 0.00755663
67 0.00744412
68 0.00733492
69 0.00722887
70 0.00712585
71 0.00702572
72 0.00692837
73 0.00683368
74 0.00674154
75 0.00665185
76 0.00656452
77 0.00647945
78 0.00639656
79 0.00631576
80 0.00623698
81 0.00616014
82 0.00608517
83 0.006012
84 0.00594057
85 0.00587082
86 0.00580269
87 0.00573612
88 0.00567106
89 0.00560746
90 0.00554527
91 0.00548444
92 0.00542494
93 0.00536671
94 0.00530972
95 0.00525392
96 0.00519929
97 0.00514578
98 0.00509336
99 0.005042
回复
kerbcurb 2004-06-25
分数无所谓的,祝你成功
回复
gxqcn 2004-06-24
令 S(n) = 1+1/2+1/3+1/4+1/5+1/6+...1/n,
则 S(∞) = 1 + (1/2+1/3) + (1/4+1/5+1/6+1/7) + ...
< 1 + (1/2+1/2) + (1/4+1/4+1/4+1/4) + ...
且 S(∞) = 1 + 1/2 +(1/3+1/4) + (1/5+1/6+1/7+1/8) + ...
> 1 + 1/2 +(1/4+1/4) + (1/8+1/8+1/8+1/8) + ...
可推证:1 + k/2 < S(n) < 1 + k,其中 k = log(ln)/log(2),n>2

从上式,可看出S(n)不收敛。

我不知道楼主是如何得到 sqrt(n) 上限的,
但可以肯定上式在更接近S(n)上限(当n>40时)。

看到这个问题,首先想到是叫“欧拉常数”的东西,但在网上遍寻不到,
而后决定用不等式,但如果对整体处理,误差非常大,
所以,我决定分段处理,不想居然成功了!

唉,发贴时,才发现已有更好的结论了。
回复
kerbcurb 2004-06-24
请参考
http://www.jstvu.edu.cn/xuebao/2003-3/pages/oulachangshu.htm
回复
kerbcurb 2004-06-24
当n很大时,有:1+1/2+1/3+1/4+1/5+1/6+...1/n = 0.57721566490153286060651209 + ln(n)//C++里面用log(n),pascal里面用ln(n)
0.57721566490153286060651209叫做欧拉常数
回复
liangbch 2004-06-24
to GXQ:
假设;s(n)=1+1/2+1/3+1/4+..1/n

当 h很大时 sqrt(n+1)
= sqrt(n*(1+1/n))
= sqrt(n)*sqrt(1+1/2n)
≈ sqrt(n)*(1+ 1/(2n))
= sqrt(n)+ 1/(2*sqrt(n))
设 s(n)=sqrt(n),
因为:1/(n+1)<1/(2*sqrt(n))
所以:
s(n+1)=s(n)+1/(n+1)< s(n)+1/(2*sqrt(n))
即求得s(n)的上限
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告