快捷搜索:  汽车  科技

牛顿法求方程近似解的精度(方程近似解法之牛顿法)

牛顿法求方程近似解的精度(方程近似解法之牛顿法)x2的取得第一近似值x1的取得则有可知,开区间(1,2)内,f'(x) > 0 且 f''(x) > 0。于是,y = f(x)的图形在区间[1,2]内单调递增且下凸。在这里,以点(2 6)为切点作曲线f(x)的切线,切线交x轴为x1。x1为解的第一近似值。然后,再作过点(x1 f(x1))的切线,切线交x轴为x2。接着,再作过点(x2 f(x2))的切线,切线交x轴为x3。

对于方程求解,在实际工程中,往往不需要精确解,而是只需精准到工程所需要的程度即可。

本文介绍用牛顿法求解方程近似解,并通过C语言程序来实现。

牛顿法求解方程的近似解

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(1)

求解方程

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(2)

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(3)

则有

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(4)

可知,开区间(1,2)内,f'(x) > 0 且 f''(x) > 0。于是,y = f(x)的图形在区间[1,2]内单调递增且下凸。

在这里,以点(2 6)为切点作曲线f(x)的切线,切线交x轴为x1。x1为解的第一近似值。然后,再作过点(x1 f(x1))的切线,切线交x轴为x2。接着,再作过点(x2 f(x2))的切线,切线交x轴为x3。

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(5)

第一近似值x1的取得

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(6)

x2的取得

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(7)

x3的取得

同样的操作一直进行下去,可得如下数列

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(8)

曲线切线与x轴交点的数列

该数列收敛于f(x) = 0在开区间(1 2)内的唯一解。

通常,过曲线y=f(x)上点(a f(a))的切线方程为

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(9)

切线方程

该切线与x轴的交点为

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(10)

切线与x轴的交点

于是,若设最初切点的x轴坐标值为x0的话,则有如下的递推关系式

牛顿法求方程近似解的精度(方程近似解法之牛顿法)(11)

牛顿迭代公式

该式也称为牛顿迭代公式

C语言程序实现牛顿法求解
  • 代码

//newton.c #include <stdio.h> #include <math.h> //函数定义 #define F(x) \ ((x)*(x)*(x)-3*(x)*(x) 9*(x)-8) #define G(x) \ (3*(x)*(x)-6*(x) 9) int main(void) { double x=2; //出发点 double xn=0; //第n回的近视值 double e=0.000001; //解的精度 int n = 0; //回数 while( 1 ) { n ; /*计算牛顿迭代式*/ xn = x - F(x) / G(x); printf("%d:x%d=[%.7lf] x%d=[%.7lf]\n" n n xn n-1 x); if(fabs(xn -x) < e) break; x = xn; } printf("在第 %d 回取到满足精度(%lf)的解:\n\ x = %.6lf\n" n e xn); return 0; }

  • 编译・执行

$ gcc -o newton newton.c $ ./newton 1:x1=[1.3333333] x0=[2.0000000] 2:x2=[1.1695906] x1=[1.3333333] 3:x3=[1.1659067] x2=[1.1695906] 4:x4=[1.1659056] x3=[1.1659067] 5:x5=[1.1659056] x4=[1.1659056] 在第 5 回取到满足精度(0.000001)的解: x = 1.165906

猜您喜欢: