牛頓-拉夫森(Newton-Raphson)迭代法 python
阿新 • • 發佈:2018-12-15
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))