Posts: 6
Threads: 1
Joined: Sep 2018
Sep-11-2018, 06:40 AM
(This post was last modified: Sep-11-2018, 12:08 PM by buran.)
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) )
Posts: 4,229
Threads: 97
Joined: Sep 2016
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: 1
Joined: Sep 2018
Hi @ ichabod801,
Derivative is calculated in the line which defines fprime. Derivative here is being calculated using first principle of calculus.
Thanks
Posts: 4,229
Threads: 97
Joined: Sep 2016
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: 1
Joined: Sep 2018
Ok. Is it giving solution for x**2-2*x as 2? You can pass this function as lambda function.
Posts: 4,229
Threads: 97
Joined: Sep 2016
So what's the problem? 2 ** 2 - 2 * 2 = 4 - 4 = 0. That's a root of the function, right?
Posts: 6
Threads: 1
Joined: Sep 2018
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: 4,229
Threads: 97
Joined: Sep 2016
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: 1
Joined: Sep 2018
Sep-14-2018, 04:14 AM
(This post was last modified: Sep-14-2018, 04:14 AM by baby_quant.)
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 !
|