方程近似解法之牛顿法

对于方程求解,在实际工程中,往往不需要精确解,而是只需精准到工程所需要的程度即可。本文介绍用牛顿法求解方程近似解,并通过C语言程序来实现。牛顿法

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

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

牛顿法求解方程的近似解

方程近似解法之牛顿法

求解方程

方程近似解法之牛顿法

方程近似解法之牛顿法

则有

方程近似解法之牛顿法

可知,开区间(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。

方程近似解法之牛顿法

第一近似值x1的取得

方程近似解法之牛顿法

x2的取得

方程近似解法之牛顿法

x3的取得

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

方程近似解法之牛顿法

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

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

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

方程近似解法之牛顿法

切线方程

该切线与x轴的交点为

方程近似解法之牛顿法

切线与x轴的交点

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

方程近似解法之牛顿法

牛顿迭代公式

该式也称为牛顿迭代公式

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/82624.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信