Posts: 6 Threads: 0 Joined: Sep 2018 Reputation: **0** Likes received: 0 Sep-11-2018, 06:40 AM (This post was last modified: Sep-11-2018, 12:08 PM by buran. Edited 1 time in total.) 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) ) **buran** wrote Sep-11-2018, 12:08 PM:Please, use proper tags when post code, traceback, output, etc. This time I have added tags for you. See BBcode help for more info. Posts: 2,219 Threads: 49 Joined: Sep 2016 Reputation: **104** Likes received: 737 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. Posts: 6 Threads: 0 Joined: Sep 2018 Reputation: **0** Likes received: 0 Hi @ichabod801, Derivative is calculated in the line which defines fprime. Derivative here is being calculated using first principle of calculus. Thanks Posts: 2,219 Threads: 49 Joined: Sep 2016 Reputation: **104** Likes received: 737 Oh, I see, you're estimating the tangent line. What exactly is the problem you're getting? It's working for me. Posts: 6 Threads: 0 Joined: Sep 2018 Reputation: **0** Likes received: 0 Ok. Is it giving solution for x**2-2*x as 2? You can pass this function as lambda function. Posts: 2,219 Threads: 49 Joined: Sep 2016 Reputation: **104** Likes received: 737 So what's the problem? 2 ** 2 - 2 * 2 = 4 - 4 = 0. That's a root of the function, right? Posts: 6 Threads: 0 Joined: Sep 2018 Reputation: **0** Likes received: 0 Yes. But can we find the root 2 by passing the lambda function lambda x: x**2-2*x inside the newton raphson method? When I run the code on my machine, I am not getting 2. Posts: 2,219 Threads: 49 Joined: Sep 2016 Reputation: **104** Likes received: 737 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? Posts: 6 Threads: 0 Joined: Sep 2018 Reputation: **0** Likes received: 0 Sep-14-2018, 04:14 AM (This post was last modified: Sep-14-2018, 04:14 AM by baby_quant. Edited 1 time in total.) 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 ! |