Weierstrass函数在Python-List索引超出范围错误

时间:2014-10-10 16:19:36

标签: python function matplotlib indexoutofboundsexception

我正在尝试用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)

2 个答案:

答案 0 :(得分:0)

第一次通过循环结束xl [0]将传递给wer函数,但xl是一个空数组。我不确定你要做什么但是你应该将xval传递给函数而不是xl [0]吗?

答案 1 :(得分:0)

在每次迭代开始时xl还没有 i -th元素,因为你在循环结束时添加它;您应该在计算xl.append后立即执行xval,或者在xval公式中使用xl[i]代替yval