1. 程式人生 > >牛頓-拉夫森(Newton-Raphson)迭代法 python

牛頓-拉夫森(Newton-Raphson)迭代法 python

Newton-Raphson method

牛頓迭代法(Newton’s method)又稱為牛頓-拉夫遜(拉弗森)方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。

from sympy import diff
from decimal import Decimal
from math import sin, cos, exp

def NewtonRaphson(func, a):
    ''' Finds root from the point 'a' onwards by Newton-Raphson method '''
    while True:
        x = a
        c = Decimal(a) - ( Decimal(eval(func)) / Decimal(eval(str(diff(func)))) )
        
        x = c
        a = c
        # This number dictates the accuracy of the answer
        if  abs(eval(func)) < 10**-15:
            return  c
    

# Let's Execute
if __name__ == '__main__':
    # Find root of trigonometric function
    # Find value of pi
    print ('sin(x) = 0', NewtonRaphson('sin(x)', 2))
    
    # Find root of polynomial
    print ('x**2 - 5*x +2 = 0', NewtonRaphson('x**2 - 5*x +2', 0.4))
    
    # Find Square Root of 5
    print ('x**2 - 5 = 0', NewtonRaphson('x**2 - 5', 0.1))

    # Exponential Roots
    print ('exp(x) - 1 = 0', NewtonRaphson('exp(x) - 1', 0))