【发布时间】:2018-02-06 12:50:18
【问题描述】:
注意:更正了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) 的计算似乎失败了。
这可能是由于迭代次数有限导致的系列发散。但是,如果我增加迭代次数,它会显示数学范围错误。
这是值的 sn-p,显示它开始发散的位置
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— 将最后一个循环设为 10000,您将看不到不连续性。 -
@goyo 我认为他在做
plt.xlim(0,12); plt.ylim(0,1.4)或类似的事情。 -
我认为发布新问题可能比更改现有问题更好。如果您不这样做,我们将需要删除这些 cmets 和我的其他答案,否则此线程将毫无意义。
-
@user35962 我使用您的函数的简化版本发布了一个关于此不稳定性的问题here。
-
@kwinkunks 非常感谢。我在这里接受了你的回答
标签: python series largenumber