scipy.optimize.newton дает TypeError: объект 'float' не вызывается

Я новичок в python, и я писал этот простой код для поиска корней функции:

from scipy import optimize

x = eval(raw_input())                           #Initial guess
f = eval(raw_input())                           # function to be evaluated
F = eval(raw_input())                          #derivative of function f

round(optimize.newton(f, x, F, tol = 1.0e-9), 4)

Но интерпретатор возвращает: TypeError: объект 'float' не вызывается

Я действительно не уверен, что мне не хватает в этом коде. Может кто-нибудь помочь мне .. заранее спасибо


person user277746    schedule 22.09.2014    source источник
comment
вы оцениваете raw_input, который, вероятно, становится числом с плавающей запятой, для f. newton ожидает функцию.   -  person user2085282    schedule 22.09.2014
comment
@ user2085282, спасибо за разъяснение   -  person user277746    schedule 24.09.2014


Ответы (2)


optimize.newton ожидает ссылку на вызываемый объект (например, функцию). Это не означает, что вы задаете функцию в виде строки, такой как 'x*x', но вы должны сначала определить ее, например:

def my_func (x):
    return x*x

Затем вы можете подключить my_func к optimize.newton (помимо других необходимых параметров).

person a_guest    schedule 22.09.2014

Это будет зависеть от того, что вы вводите для f. Если вы введете что-то вроде

lambda x: x ** 2

то это будет интерпретироваться как функция, например

In [83]: f = eval('lambda x: x ** 2')

In [84]: f(5)
Out[84]: 25
person user2085282    schedule 22.09.2014