Ошибка индекса функции конечных разностей: - PullRequest
0 голосов
/ 05 июля 2018

Ниже приведена функция для метода конечных разностей, это очень стандартный способ вычисления производной по некоторой функции f (x), сетке (np.linspace), а также равномерному расстоянию между каждой частью сетка (ч).

Проблема возникает, когда я пытаюсь использовать известную функцию (скажем, х ** 2) по сетке от 0,10; Я получаю конкретную ошибку. После кода я опубликую найденную ошибку.

def finitedifference(f,x,h,n):
"""f : function you are attempting to differentiate.
   x : grid/domain with with you will differentiate.
   h : distance between uniform mesh.
   n : required for loop?"""
    df = np.zeros_like(x)
    for i in range(1,n):
        df[i] = (f[i+1]-f[i-1])/(2*h)
        #end_points
        df[0] = (f[1]-f[0])/h
        df[-1] = (f[-1]-f[-2])/h
    return print(df) 

Что я использую:

f = x**3
x = np.linspace(0,10,11)
h = x[1] - x[0]
finitedifference(f,x,h,11)

Я получаю ошибку:

"IndexError: index 11 is out of bounds for axis 0 with size 11"

К сожалению, я не уверен, что это значит, так что, может быть, некоторые разъяснения по поводу ошибки / способы ее устранения? Спасибо!

1 Ответ

0 голосов
/ 05 июля 2018

Массив (или список) размера 11 имеет индексы 0, 1, 2, ..., 10.

Если вы делаете for цикл по range(1, 11), он повторяется по 1, 2, 3, ..., 10. Если вы затем попытаетесь получить доступ к индексу i+1, вы попадете за пределы массива, когда i достигнет 10.

С другой стороны, вы пропустили индекс 0. Поэтому вы, вероятно, захотите использовать for i in range(n-1), чтобы убедиться, что вы начнете сверху и останетесь в определенных пределах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...