牛顿法求解方程(python和C++)
牛頓法
GitHub: https://github.com/Sean16SYSU/Algorithms4N
目標函數(shù)為: f(x)=0f(x) = 0f(x)=0
算法很簡單如下:
xn+1=xn?f(xn)f′(xn)x_{n+1} = x_{n} - \frac{f(x_n)}{f'(x_n)}xn+1?=xn??f′(xn?)f(xn?)?
其實是對f(x)做了泰勒展開, 用前兩項來做對于f(x)的近似替代
f(x)=f(x0)+f′(x0)(x?x0)+f′′(x0)2!(x?x0)2+...f(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2+...f(x)=f(x0?)+f′(x0?)(x?x0?)+2!f′′(x0?)?(x?x0?)2+...
即, f(x0)+f′(x0)(x?x0)=0f(x_0) + f'(x_0)(x-x_0) = 0f(x0?)+f′(x0?)(x?x0?)=0
故有, xn+1=xn?f(xn)f′(xn)x_{n+1} = x_{n} - \frac{f(x_n)}{f'(x_n)}xn+1?=xn??f′(xn?)f(xn?)?
Newton-Raphson method
Objective function: f(x)=0f(x) = 0f(x)=0
The simple but useful iteration formula:
xn+1=xn?f(xn)f′(xn)x_{n+1} = x_{n} - \frac{f(x_n)}{f'(x_n)}xn+1?=xn??f′(xn?)f(xn?)?
In fact, the first two terms of the Taylor Expansion of f(x) are ultilized to make an approximately subsitution of f(x)
f(x)=f(x0)+f′(x0)(x?x0)+f′′(x0)2!(x?x0)2+...f(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2+...f(x)=f(x0?)+f′(x0?)(x?x0?)+2!f′′(x0?)?(x?x0?)2+...
namely, f(x0)+f′(x0)(x?x0)=0f(x_0) + f'(x_0)(x-x_0) = 0f(x0?)+f′(x0?)(x?x0?)=0
So, xn+1=xn?f(xn)f′(xn)x_{n+1} = x_{n} - \frac{f(x_n)}{f'(x_n)}xn+1?=xn??f′(xn?)f(xn?)?
上述的迭代函數(shù),本質上,其實是關于f(x)f(x)f(x)的微分中值定理的變形,也可以說是對于一階的泰勒展開的變形。其實,是一種切線下降法,對于低精度下的要求的話,下降應該是非常迅速的。
代碼
- c++實現(xiàn)根號計算
- Python計算
總結
以上是生活随笔為你收集整理的牛顿法求解方程(python和C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斯特芬森迭代法(Python)
- 下一篇: 牛顿法求根号数(Python)