计算大量数列:Python
Computing a series with large numbers : Python
注意:更正了 for i in xrange(10000)
行中指出的愚蠢错误
我正在编写使用级数展开计算和绘制 MittagLeffler 函数的代码,
import numpy as np
import scipy as sp
from decimal import Decimal
import pylab as plt
from math import gamma
def MLf(x,a):
mlf = Decimal(0)
X = (x)
term = Decimal(0)
for j in xrange(100):
term = Decimal((-1)**j*(X**(j*a)))/Decimal(gamma(a*j+1))
mlf = Decimal( term + mlf )
return mlf
x = np.arange(0,1000,0.1)
y = np.arange(0,1000,0.1)
for i in xrange(10000):
y[i] = MLf(x[i],1)
plt.plot(x,y)
plt.show()
但是,对于 x>30,函数 (MLf) 的计算似乎失败了。
这可能是由于迭代次数有限导致序列发散。但是,如果我增加迭代次数,它会显示数学范围错误。
这是价值观的片段,显示了它从哪里开始出现分歧
x y
40.8 -10.9164990034
40.9 -12.2457070844
41.0 -17.4658523232
41.1 -10.8310002768
41.2 -10.5217830371
41.3 -13.9001627961
41.4 -30.8944707201
你在最后重新使用了 x
和 y
,但只替换了 100 以内的索引。所以在最后这样做并且有效:
for i in range(10000): # Or use xrange in Python 2.7
y[i] = MLf(x[i], 1)
plt.plot(x,y)
plt.show()
或者为这部分制作不同的数组。
注意:更正了 for i in xrange(10000)
我正在编写使用级数展开计算和绘制 MittagLeffler 函数的代码,
import numpy as np
import scipy as sp
from decimal import Decimal
import pylab as plt
from math import gamma
def MLf(x,a):
mlf = Decimal(0)
X = (x)
term = Decimal(0)
for j in xrange(100):
term = Decimal((-1)**j*(X**(j*a)))/Decimal(gamma(a*j+1))
mlf = Decimal( term + mlf )
return mlf
x = np.arange(0,1000,0.1)
y = np.arange(0,1000,0.1)
for i in xrange(10000):
y[i] = MLf(x[i],1)
plt.plot(x,y)
plt.show()
但是,对于 x>30,函数 (MLf) 的计算似乎失败了。
这可能是由于迭代次数有限导致序列发散。但是,如果我增加迭代次数,它会显示数学范围错误。
这是价值观的片段,显示了它从哪里开始出现分歧
x y
40.8 -10.9164990034
40.9 -12.2457070844
41.0 -17.4658523232
41.1 -10.8310002768
41.2 -10.5217830371
41.3 -13.9001627961
41.4 -30.8944707201
你在最后重新使用了 x
和 y
,但只替换了 100 以内的索引。所以在最后这样做并且有效:
for i in range(10000): # Or use xrange in Python 2.7
y[i] = MLf(x[i], 1)
plt.plot(x,y)
plt.show()
或者为这部分制作不同的数组。