Функция производная вычисляет производную многочлена; степень каждой записи необходимо уменьшить на единицу, каждую запись нужно умножить на предыдущую степень, а член со степенью [0] необходимо удалить.
Этот код
lst = [1,2,3] """This list represents the polynomial 3x^2+2x+1"""
"""This function moves each entry one index down and removes the last
entry"""
def move(lst):
copy = list(lst)
for i in range(len(lst)):
lst[i-1] = copy[i]
del lst[-1]
print lst
move(lst)
Производит это:
Samuels-MacBook:python barnicle$ python problemset2.py
[2, 3]
Этот код:
def derivative(poly):
copy = list(poly)
degree = 0
for i in range(len(poly)):
i = degree*(i+1)
poly[i-1] = copy[i]
degree += 1
del poly[-1]
print poly
derivative(lst)
Выдает эту ошибку:
Samuels-MacBook:python barnicle$ python problemset2.py
Traceback (most recent call last): File "problemset2.py", line 59,
in <module>
derivative(lst) File "problemset2.py", line 55, in derivative
poly[i-1] = copy[i] IndexError: list index out of range
Итак, я разобрался. Вот моя новая рабочая функция, переименованная в ddx2:
lst = [0,3,5,4] #lst represents the polynomial 4x^3+3x^2+5x
def ddx2(lst):
for i in range(len(lst)):
lst[i] = lst[i]*i
if i != 0:
lst[i-1] = lst[i]
del lst[-1]
print lst
ddx2(lst) #Here I call the function
Когда я вызываю функцию, я получаю правильную производную в правильном формате, то есть [3,10,12]. Я думаю, что сообщение об ошибке, которое я получил, было связано с тем, что я пытался сократить длину списка, прежде чем выйти из цикла.
3 ответа
Линия i = degree*(i+1)
в основном означает квадрат индекса. У вас есть массив длины i
, но вы пытаетесь получить элемент с индексом i*i
.
degree
то же самое, что i
, поэтому это i = i * (i+1)
.
Индекс i
с его вычислением i = degree*(i+1)
вырастет равным или большим, чем len(poly)
и len(copy)
, и, следовательно, выйдет за пределы допустимого диапазона
Вот быстрый совет, который я сделал :) Надеюсь, он соответствует вашим требованиям, вы просто должны знать о длине списков.
lst = [1,2,3]
dlist=[]
derivate=[]
for i in range(len(lst)): #Here you multiply the coeficients by the power
dlist.append(lst.__getitem__(i)*i)
#print dlist
for m in range(len(dlist)): #In the derivate the constants become zero
if dlist.__getitem__(m) != 0:
derivate.append(dlist.__getitem__(m))
print lst
print derivate
Наслаждайтесь!
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
i
в цикле до и после того, как вы установите для него значениеdegree*(i+1)
. Вы увидите, что делаете.move
вы можете просто сделатьmy_list[:-1]