[split] f1(), f2() lambda functions addition - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Homework (https://python-forum.io/forum-9.html) +--- Thread: [split] f1(), f2() lambda functions addition (/thread-12763.html) |
[split] f1(), f2() lambda functions addition - baby_quant - Sep-11-2018 Hi Guys, I am trying to solve f=x^2-2*x using Newton Raphson method, but somehow code is not providing the correct results. Can you please help me? def newton_raphson(f,guess,tolerance,max_iter,increment,epsilon): for iter in range(max_iter): func_value=f(guess) fprime=(f(guess+increment)-f(guess-increment))/(2.0*increment) if (abs(fprime)>epsilon): next_guess=guess-(float(func_value)/float(fprime)) if(abs(next_guess-guess)<=tolerance*abs(next_guess)) or fprime==0: break else: guess=next_guess else: break print("Root of the function %s is: %f" %(f,next_guess) ) RE: [split] f1(), f2() lambda functions addition - ichabod801 - Sep-11-2018 Doesn't the Newton-Raphson method for finding the root of an equation use the derivative of the equation to find the root of the tangent to f at the guess? I'm not seeing where you are doing that in your function. RE: [split] f1(), f2() lambda functions addition - baby_quant - Sep-11-2018 Hi @ichabod801, Derivative is calculated in the line which defines fprime. Derivative here is being calculated using first principle of calculus. Thanks RE: [split] f1(), f2() lambda functions addition - ichabod801 - Sep-11-2018 Oh, I see, you're estimating the tangent line. What exactly is the problem you're getting? It's working for me. RE: [split] f1(), f2() lambda functions addition - baby_quant - Sep-13-2018 Ok. Is it giving solution for x**2-2*x as 2? You can pass this function as lambda function. RE: [split] f1(), f2() lambda functions addition - ichabod801 - Sep-13-2018 So what's the problem? 2 ** 2 - 2 * 2 = 4 - 4 = 0. That's a root of the function, right? RE: [split] f1(), f2() lambda functions addition - baby_quant - Sep-13-2018 Yes. But can we find the root 2 by passing the lambda function lambda x: x**2-2*xinside the newton raphson method? When I run the code on my machine, I am not getting 2. RE: [split] f1(), f2() lambda functions addition - ichabod801 - Sep-13-2018 I'm getting 2 when I run it on my machine. As I asked before, what exactly is the problem you are having? What output are you getting that is incorrect? What inputs are you using to get that incorrect answer? RE: [split] f1(), f2() lambda functions addition - baby_quant - Sep-14-2018 Hi Now when I am running the code I am getting the output correctly. Here is the code for future references: def newton_raphson(f,guess,tolerance,max_iter,increment,epsilon): for iter in range(max_iter): func_value=f(guess) fprime=(f(guess+increment)-f(guess-increment))/(2.0*increment) if (abs(fprime)>epsilon): next_guess=guess-(float(func_value)/float(fprime)) if(abs(next_guess-guess)<=tolerance*abs(next_guess)) or fprime==0: break else: guess=next_guess else: break print("Root of the function %s is: %f" %(f,next_guess) ) if __name__=="__main__": newton_raphson(lambda x:x**2-x*4,5,.000001,100,.001,.001)Thanks for your help ! |