# necessary imports
import numpy as np
import matplotlib.pyplot as plt
比奈公式如下,从here:
让我们用python定义此函数:
def binet(n):
phi = (1 + 5 ** 0.5) / 2
return ((phi**n) - (-1/phi)**n) / (5**0.5)
对于phi
值,我使用了this
让我们为n=[0.1,0.2,0.3,0.4,0.5,...,4.9,5.0]
计算binet(n)
:
[binet(x/10) for x in range(1,51)]
让我们来描绘它:
# our results
plt.plot([n.real for n in binetn],[n.imag for n in binetn])
# classic fibonacci numbers
plt.scatter([1,1,3,5],[0,0,0,0],c='r')
看起来不错,阿格里斯与this&;我们的数学知识
基于上述情况,我相信这也会起作用:
binetn=[binet(x) for x in np.arange(0.1,5.1,0.1)]
然而,事实并非如此binetn
变成:
[nan,nan,nan,nan,nan,nan,nan,nan,nan,1.0,...,nan,nan,5.000000000000001]
即它是nan
,除非binet(n)
是实的
它还发出警告:
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:2: RuntimeWarning: invalid value encountered in double_scalars
为什么我可以循环浏览由range()
生成的数字列表&;获取复杂的结果,而我无法对np.arange()
执行同样的操作。
副本集中在
np.arange
。但这不是问题所在比较向
binet
传递浮点与向np.float64
传递浮点:或者这些迭代:
进一步挖掘,它似乎与
complex
有关。如果numpy
参数复杂,则计算正常:事实上,我们不需要迭代。一个复杂的数组工作得很好:
相关问题 更多 >
编程相关推荐