Python Forum
[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*x
inside 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 !