Ньютон-Рафсон в Python

Я хочу найти нули простой функции для заданных параметров a,b,c. Я должен использовать метод Ньютона-Рафсона. Проблема, которую я получаю при компиляции кода, заключается в том, что переменная x не определена.

from scipy import optimize

def Zeros(a,b,c,u):

  return optimize.newton(a*x**2+b*x+c, u, 2*ax + b,args=(a,b,c))

a,b,c — константы функции f, а u — начальная точка. Таким образом, с помощью этой функции я должен получить ноль, указав a, b, c и u. Например:

print Zeros(1,-1,0,0.8)

Но я получаю «глобальное имя« x »не определено»

Кто-нибудь знает, почему это происходит? Заранее спасибо

Бернат


person Berni    schedule 24.04.2017    source источник


Ответы (2)


В большинстве языков программирования используются переменные (имена a, b, c, u в вашем коде) и функции (например, нули).

При вызове функции Python ожидает, что все «количества», которые вводятся, будут определены. В вашем случае x не существует.

Решение состоит в том, чтобы определить функцию, которая зависит от x, для функции и ее производной

from scipy import optimize

def Zeros(a,b,c,u):
    def f(x, a, b, c):
        return a*x**2+b*x+c
    def fprime(x, a, b, c):
        return 2*a*x + b
    return optimize.newton(f, u, fprime=fprime,args=(a,b,c))

print(Zeros(1,-1,0,0.8))
person Pierre de Buyl    schedule 24.04.2017
comment
Привет @WarrenWeckesser. Могу я спросить, какое редактирование было сделано в ответе? (разницу найти не могу). - person Pierre de Buyl; 24.04.2017
comment
Оператор return для Zeros находился в той же строке, что и оператор return для fprime. Я просто добавил разрыв строки, чтобы последний оператор return был отдельной строкой. - person Warren Weckesser; 24.04.2017

person    schedule
comment
Вы всегда должны давать объяснение своему ответу. - person Subrato Patnaik; 28.09.2020