我正在尝试用Python编写和绘制Weierstrass函数。
http://mathworld.wolfram.com/WeierstrassFunction.html
f(x)=Σsin(πk^(a)x)/(πk^(a))从k = 1到∞
我有点陷入困境,因为我在yval = wer(a,(xl [i]),e)
行继续遇到“列表索引超出范围错误”我不确定我哪里出错了,或者我的思维过程是不正确的。任何帮助是极大的赞赏!谢谢!
以下是代码:
import math,pylab
x0 = float(input('Enter beginning of interval: ')) #start of interval
xf = float(input('Enter endpoint of interval: ')) #end of interval
a = float(input('Enter a value for a: '))
#x = float(input('Enter a value for x: '))
e = float(input('Enter desired error tolerance: '))
n = int(input('Enter number of iterations: '))
def wer(a, x, e): # a is givin number, e is error tolerance
Sum1 = 0
Sum2 = 0
k = 1
while(True):
#sine of pi times k to the a times x over pi times k to the a
Sum1 = math.sin((math.pi)*pow(k,a)*(x))/((math.pi)*(pow(k,a)))
Sum2 = Sum1 + math.sin((math.pi)*pow((k+1),a)*(x))/((math.pi)*pow((k+1),a))
if (abs(Sum2-Sum1) < e):
break
else:
k+=1
return Sum1
def append(x0, xf, n):
xl = [] #list containing x values
yl = [] #corresponding y values
dx = (xf-x0)/n #length of each subinterval
for i in range (0, (n+1)):
xval = x0 + (i * dx)
yval = wer(a, (xl[i]), e) #ERROR HERE
xl.append(xval)
yl.append(yval)
#print i,':',xl
return xl, yl
append(x0, xf, n)
pylab.plot(xl,yl)
答案 0 :(得分:0)
第一次通过循环结束xl [0]将传递给wer函数,但xl是一个空数组。我不确定你要做什么但是你应该将xval传递给函数而不是xl [0]吗?
答案 1 :(得分:0)
在每次迭代开始时xl
还没有 i -th元素,因为你在循环结束时添加它;您应该在计算xl.append
后立即执行xval
,或者在xval
公式中使用xl[i]
代替yval
。