Python Forum
[split] f1(), f2() lambda functions addition
Thread Rating:
  • 2 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[split] f1(), f2() lambda functions addition
#1
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) )
Reply
#2
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.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#3
Hi @ichabod801,

Derivative is calculated in the line which defines fprime. Derivative here is being calculated using first principle of calculus.

Thanks
Reply
#4
Oh, I see, you're estimating the tangent line. What exactly is the problem you're getting? It's working for me.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#5
Ok. Is it giving solution for x**2-2*x as 2? You can pass this function as lambda function.
Reply
#6
So what's the problem? 2 ** 2 - 2 * 2 = 4 - 4 = 0. That's a root of the function, right?
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#7
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.
Reply
#8
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?
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#9
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 !
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Homework on addition with working paperplanexx 1 2,450 Aug-19-2018, 12:40 PM
Last Post: j.crater
  f1(), f2() lambda functions addition Danielk121 5 5,664 Dec-02-2017, 09:27 AM
Last Post: Danielk121

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020