2015-03-11 4 views
0

Я новичок в программировании и действительно борюсь за создание функций в Python.Вычисление производной функции

При попытке вычисления производной я создал np.linspace для своих значений x, а затем создал пустой список для значений y. Я использовал цикл for для создания списка значений y, которые являются результатом передачи значений x через функцию. После добавления пустого списка с результатом из цикла for, попытался создать функцию, чтобы взять производную с использованием разностной аппроксимации. Когда я запускаю программу, я получаю сообщение об ошибке Неверный синтаксис.

Что я делаю неправильно?

import numpy as np 
from math import * 

xvalue = np.linspace(0,100,20) 
yvalue = [] 

for i in xvalue:  
    q = i**2+4 
    yvalue.append(q) 

def diff(f,x): 

    n= len(x) 
    y = [] 

    for i in range(n): 

     if i == n-1: 
      y.append((f[i]-f[i-1])/(x[2]-x[1])) 
     else: 
      y.append((f[i+1]-f[i]/(x[2]-x[1])) 

    return y 

print xvalue 
print yvalue 

diff(xvalue,yvalue) 

ответ

3

Такого рода ошибки синтаксиса может быть несколько сложнее диагностировать:

File "path/to/my/test.py", line 20 
    return y 
     ^
SyntaxError: invalid syntax 

Поскольку вы знаете, что есть mos Вероятно, нет ничего плохого в данной строке (нет ничего плохого в return y), следующая вещь, которую нужно сделать, это посмотреть на предыдущую строку. Как и в ответе @ letibo, вам не хватает скобок. Если по какой-то причине предыдущая строка выглядит нормально, продолжайте движение вверх в файле, пока не найдете виновника.

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

EDIT

Как @ljetibo отметил, что если вы используете IDLE, там не будет отслеживающий как выше. Вместо этого он создаст окно подсказки с кнопкой ОК и выделит оператор return, в котором вы получите общее представление о том, с чего начать искать.

+0

Проблема заключается в том, что если вы попытаетесь запустить его (F5) из редактора python, вы не получите эту ошибку печати, и чаще всего пользователи не замечают, что их текстовый указатель (мигающая строка) подскочил до конец 'return', как указывает ваша стрелка. – ljetibo

+0

А, да. Совершенно правильно. Это было навсегда, так как я использовал IDLE. ;) – OozeMeister

1

Вы пропускаете на

скобки
y.append((f[i+1]-f[i]/(x[2]-x[1])) 

, который должен выглядеть

y.append((f[i+1]-f[i]/(x[2]-x[1]))) 
+0

Я вижу спасибо! Он запускался после того, как я добавил круглую скобку, но только напечатал xvalue и yvalue. Моя последняя строка недостаточно для вызова функции? –

+0

@NathanNeven Это, но вы должны назначить результат, то есть 'a = diff (x, y)' или 'print'. В противном случае результат будет просто отброшен, а второй - возвращен. – ljetibo

Смежные вопросы