牛顿法

牛顿法（）又称为牛顿-拉弗森方法（），它是一种在实数域和复数域上近似求解方程的方法。方法使用函数的泰勒级数的前面几项来寻找方程的根。

起源

牛顿法最初由艾萨克·牛頓在《流数法》（Method of Fluxions，1671年完成，在牛顿去世后於1736年公开发表）中提出。约瑟夫·鮑易也曾于1690年在Analysis Aequationum中提出此方法。

 方法说明 
alt Illustration of Newton's method|thumb|right|300px|蓝线表示方程而红线表示切线。可以看出比更靠近所要求的根。

首先，选择一个接近函数零点的，计算相应的和切线斜率（这里表示函数的导数）。然后我们计算穿过点并且斜率为的直线和轴的交点的坐标，也就是求如下方程的解：

我们将新求得的点的坐标命名为，通常会比更接近方程的解。因此我们现在可以利用开始下一轮迭代。迭代公式可化简为如下所示：

已有证明牛顿迭代法的二次收敛必须满足以下条件：
; 对于所有，其中为区间，且在区间其中内，即  的; 
对于所有，是连续的; 
足够接近根。

然而当在处有m重根时，这时牛顿法会降为线性收敛，虽然使用牛顿法也可以继续算下去，但收敛速度会减慢。

其它例子
 第一个例子 

求方程的根。令，两边求导，得。由于，则，即，可知方程的根位于和之间。我们从开始。

 第二个例子 

牛顿法亦可发挥与泰勒展开式，对于函式展开的功能。

求的次方根。

设，

而a的m次方根，亦是x的解，

以牛顿法来迭代：

（或 ）

 應用 
 求解極值問題 

牛頓法也被用於求函數的極值。由於函數取極值的點處的導數值為零，故可用牛頓法求導函數的零點，其疊代式為

求拐点的公式以此类推

 電腦程式 
可以用程式寫出牛頓法:

例題:    求x

用Python:from math import pow
def f(x):
    y = pow(x,3)-(10*x*x)+x+1
    return y
def dx(x):
    y = (3*x*x)-(20*x)+1
    return y
x = 1
for i in range(1000):
    x = x - (f(x)/dx(x))
print(x)用C語言:#include <stdio.h>
#include <math.h>
double x = 1.0;
double f(double x){
    double y = pow(x,3)-(10*x*x)+x+1;
    return y;}
double dx(double x){
    double y = (3*x*x)-(20*x)+1;
    return y;}
int main (){
    for(int i=0;i<1000;i++){
    x = x - (f(x)/dx(x));}
    printf(" %f",x);
    return 0;
}只要修改f(x)和dx(x)函數就可以解其他方程式

 註解 

 外部連結 

 JAVA：牛頓勘根法  

Category:最优化算法
Category:求根算法
Category:艾萨克·牛顿