1.牛顿法
1.1 牛顿法介绍
牛顿法(Newton’s method),也被称为牛顿-拉夫森方法(Newton-Raphson method),是一种用于数值逼近根的迭代方法。它是由英国科学家艾萨克·牛顿在17世纪提出的。
牛顿法的基本思想是通过不断迭代来逼近一个函数的根。它利用函数的局部线性逼近,通过找到切线与x轴的交点来逼近函数的根。具体而言,牛顿法使用一个初始猜测值作为起点,然后根据函数和它的导数在该点的值,计算出切线与x轴的交点作为下一个猜测值。通过不断重复这个过程,可以更接近函数的根。
1.2 算法步骤
Step1: 选择一个初始猜测值:选择一个接近函数f ( x ) f(x)f(x)零点的x 0 x_0x0。
Step2: 计算在点x 0 x_0x0处的函数值f ( x 0 ) f(x_0)f(x0)和导数f ′ ( x 0 ) f\prime\left( x_0 \right)f′(x0)。
Step3: 计算穿过点( x 0 , f ( x 0 ) (x_0,f(x_0)(x0,f(x0)且斜率为f ′ ( x 0 ) f\prime\left( x_0 \right)f′(x0)的直线与x xx轴的交点x 1 x_1x1,也就是方程f ′ ( x 0 ) ( x − x 0 ) + f ( x 0 ) = 0 f \prime(x_0)(x-x_0)+f(x_0)=0f′(x0)(x−x0)+f(x0)=0的解,即x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f\left( x_0 \right)}{f\prime\left( x_0 \right)}x1=x0−f′(x0)f(x0)。
Step4: 使用牛顿法的迭代公式x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac{f\left( x_n \right)}{f\prime\left( x_n \right)}xn+1=xn−f′(xn)f(xn)进行迭代,等到f ( x n ) f(x_n)f(xn)足够小时(可以设置一个终止条件),就认为数值解足够接近真实解,然后停止迭代。
2. 具体算例
利用牛顿法求e x = 2 e^x=2ex=2的解,选取初始点x 0 = 1 x_0=1x0=1,然后利用牛顿法迭代公式进行求解。
具体的python程序如下:
import numpy as np def hanshu(x): return np.exp(x)-2 def daoshu(x): return np.exp(x) def newtown(x0): d=hanshu(x0) count=0 while d>0.000001 and count<100: x1=x0-d/daoshu(x0) x0=x1 d=hanshu(x0) count+=1 return x0,count print(newtown(1))
求解结果:(0.6931475810597714, 3)
方程e x = 2 e^x=2ex=2的实际解为0.6931471805599453,可见利用牛顿法迭代了3次就得到了一个精度很高的结果,收敛速度比较快。
3.总结
牛顿法在数学和科学工程领域广泛应用,特别是在求解非线性方程、最优化问题和曲线拟合等任务中。牛顿法具有快速收敛的特点,但它对初始值的选择比较敏感,可能会陷入局部最优解。因此,在使用牛顿法时需要考虑初始值的选择和算法的收敛性分析。