Ньютон Рафсон: может ли пользователь ввести функцию?

[Это изображение - мой код Python для метода Ньютона-Рафсона. Проблема с математической функцией и производной. На данный момент я тот, кто определяет функцию и ее производную. Есть ли способ заставить пользователя ввести желаемую функцию?

import math

""" f: function, f_ : derivative of function, x0: initial guess, errortolerance: tolerance, maxIter: max number of iterations """

def newtonraphson(f, f_, x0, errortolerance=0.00001, maxIter=100):
    """

    Take a function f, its derivative f_, initial value x0, TOL and NMAX,
    and returns the root(s) of the equation using the NR method

    """

    n = 1 #initial numebr of iterations
    while n<=maxIter: # check while n less than maxIter
        x1 = x0 - (f(x0)/f_(x0)) #newtonraphson formula
        if x1 - x0 < errortolerance: 
            return x1
        else:
            x0 = x1
    return False

if __name__ == "__main__":

    def func(x): #initial function
        return 5*math.pow(x,2) - 8*math.pow(x,1) + 4

    def func_(x): #its derivative
        return 10*math.pow(x,1) - 8

    resNR = newtonraphson(func,func_,3) #result of newtonraphson
    print(resNR)

1 ответ

Решение

Ты можешь использовать lambda а также eval чтобы позволить пользователю ввести функцию и ее производную. Я предполагаю, что вы используете Python 3. Если вы используете Python 2, замените input с raw_input,

if __name__ == '__main__':
    f = lambda x : eval(input())
    f_ = lambda x : eval(input())

    print(newtonraphson(f, f_, 3))

Теперь пусть ваш пользователь введет выражение в x, Помните, что во вход разрешены только уже определенные имена.

Другие вопросы по тегам