我对python很陌生。我最近才开始做计算机科学。e
然而,在我输入一个数字后,我如何获得常数的连分数的值。请不要为我解决它,而是教我如何去做。我不确定我应该使用 while 循环还是 for 循环,即使我这样做了,我也不知道该怎么做。
这是完整的语句,
我对python很陌生。我最近才开始做计算机科学。e
然而,在我输入一个数字后,我如何获得常数的连分数的值。请不要为我解决它,而是教我如何去做。我不确定我应该使用 while 循环还是 for 循环,即使我这样做了,我也不知道该怎么做。
这是完整的语句,
在处理这些数学问题时,我使用的最佳策略是尝试将问题分解为微小的步骤。这就是 n = 1,2,3 的函数的样子。
n = 1
c = 1/2
c = 1/(1+c)
print(2+c)
n = 2
c = 2/3
c = 1/(2+c)
c = 1/(1+c)
print(2+c)
n = 3
c = 3/4
c = 2/(3+c)
c = 1/(2+c)
c = 1/(1+c)
print(2+c)
然后我会尝试手动计算 n=4 和 n=5 的函数是什么样的。一旦我掌握了它的窍门,用你自己的话概括它。然后,将其转换为您选择的编程语言。
可以在 python2 中使用以下代码。
# exp(1) from the generalized continued fraction
def expOneFromContinuedFraction( n=30 ):
"""Compute an approximative value of exp(1) from
e ~ 2 + 1/( 1+1/ (2+2/ (3+3/ ( ... n+n/(n+1) ) ) ) )
"""
a = 1. + n
for k in range(n, 0, -1):
a = k + k/a
return 2+1/a
for n in range(1,11):
print "n = %2s :: approximation is %.24f" % ( n, expOneFromContinuedFraction(n) )
复制+粘贴到 ipython 解释器给了我:
n = 1 :: approximation is 2.666666666666666518636930
n = 2 :: approximation is 2.727272727272727514957751
n = 3 :: approximation is 2.716981132075471538911415
n = 4 :: approximation is 2.718446601941747697850360
n = 5 :: approximation is 2.718263331760264023273521
n = 6 :: approximation is 2.718283693893449814993346
n = 7 :: approximation is 2.718281657666403727802162
n = 8 :: approximation is 2.718281842777827250756673
n = 9 :: approximation is 2.718281827351874291309741
n = 10 :: approximation is 2.718281828538485989099627
我希望很清楚 python 在哪里失去精度。
请注意,也可以执行精确计算,例如通过使用分数支持包。在这种情况下,我使用sage而不是 python。相同的语言,但有更多的“电池”。类似版本的代码,我们不以float a = 1. + n
开头,而是以sage 整数 a = 1+n
给出分数。这是精确的计算,后验取数值。
def sageExpOneFromContinuedFraction( n=30 ):
a = n+1
for k in range(n, 0, -1):
a = k + k/a
return 2 + 1/a
for n in range(1,11):
a = sageExpOneFromContinuedFraction(n)
print "n = %2s :: exp(1) ~ %s ~ %s" % ( n, a, a.n(digits=50) )
结果,更好地反映了有理数的十进制表示的周期性......
n = 1 :: exp(1) ~ 8/3 ~ 2.6666666666666666666666666666666666666666666666667
n = 2 :: exp(1) ~ 30/11 ~ 2.7272727272727272727272727272727272727272727272727
n = 3 :: exp(1) ~ 144/53 ~ 2.7169811320754716981132075471698113207547169811321
n = 4 :: exp(1) ~ 280/103 ~ 2.7184466019417475728155339805825242718446601941748
n = 5 :: exp(1) ~ 5760/2119 ~ 2.7182633317602642756016989145823501651722510618216
n = 6 :: exp(1) ~ 45360/16687 ~ 2.7182836938934499910109666207227182836938934499910
n = 7 :: exp(1) ~ 44800/16481 ~ 2.7182816576664037376372792913051392512590255445665
n = 8 :: exp(1) ~ 3991680/1468457 ~ 2.7182818427778273384920361985403726496587915070036
n = 9 :: exp(1) ~ 43545600/16019531 ~ 2.7182818273518744088075986743931517096224602330742
n = 10 :: exp(1) ~ 172972800/63633137 ~ 2.7182818285384861664135778815996451660083959085657
注:请出示下次自己努力计算