《Newton迭代法求解非线性方程(共8页).docx》由会员分享,可在线阅读,更多相关《Newton迭代法求解非线性方程(共8页).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上Newton迭代法求解非线性方程一、 Newton迭代法概述 构造迭代函数的一条重要途径是用近似方程来代替原方程去求根。因此,如果能将非线性方程fx=0用线性方程去代替,那么,求近似根问题就很容易解决,而且十分方便。牛顿(Newton)法就是一种将非线性方程线化的一种方法。 设是方程fx=0的一个近似根,把如果在处作一阶Taylor展开,即: (1-1)于是我们得到如下近似方程: (1-2)设,则方程的解为: x=xk+f(xk)f(xk) (1-3)取作为原方程(1.1)的新近似根,即令: , k=0,1,2, (1-4)上式称为牛顿迭代格式。用牛顿迭代格式求方程的
2、根的方法就称为牛顿迭代法,简称牛顿法。 牛顿法具有明显的几何意义。方程: (1-5)是曲线上点处的切线方程。迭代格式(1-4)就是用切线式(1-5)的零点来代替曲线的零点。正因为如此,牛顿法也称为切线法。 牛顿迭代法对单根至少是二阶局部收敛的,而对于重根是一阶局部收敛的。一般来说,牛顿法对初值的要求较高,初值足够靠近时才能保证收敛。若要保证初值在较大范围内收敛,则需对加一些条件。如果所加的条件不满足,而导致牛顿法不收敛时,则需对牛顿法作一些改时,即可以采用下面的迭代格式:, (1-6)上式中,称为下山因子。因此,用这种方法求方程的根,也称为牛顿下山法。牛顿法对单根收敛速度快,但每迭代一次,除需
3、计算之外,还要计算的值。如果比较复杂,计算的工作量就可能比较大。为了避免计算导数值,我们可用差商来代替导数。通常用如下几种方法:1. 割线法如果用 代替,则得到割线法的迭代格式为: (1-7)2. 拟牛顿法如果用代替,则得到拟牛顿法的迭代格式为: (1-8)3. Steffenson法如果用代替,则得到拟牛顿法的迭代格式为: (1-9)二、 算法分析1. 割线法割线法的迭代公式为:,k=0,1,2,割线法是超线性收敛,其程序流程图为:2. 拟牛顿法牛顿拟迭代法迭代公式为:(1) 对单根条件下,牛顿拟迭代法平方收敛,牛顿拟迭代法程序框图如下所示:(2) 对重根条件下,此时迭代公式修改为:,m为根
4、的重数此时,牛顿迭代法至少平方收敛。3. Steffenson法Steffenson迭代法程序流程图与牛顿拟迭代法类似。三、 牛顿法的程序 给定初值,用牛顿法格式,求解非线性方程。*function p1,err,k,y = newton(f1041,df1041,p0,delta,max1)% f1041是非线性函数。% df1041是f1041的微商。% p0是初始值。% delta是给定允许误差。% max1是迭代的最大次数。% p1是牛顿法求得的方程的近似解。% err是p0的误差估计。% k是迭代次数。% y = f(p1)p0, feval(f1041,p0)for k = 1:m
5、ax1 p1 = p0 - feval(f1041, p0)/feval(df1041, p0); err = abs(p1-p0); p0 = p1; p1, err, k, y = feval(f1041, p1) if (err prog1041计算结果如下:专心-专注-专业p0 = 1.2000ans = 0.1280p1 = 1.1030err = 0.0970k = 1y = 0.0329p1 = 1.1030err = 0.0970k = 1y = 0.0329p1 = 1.0524err = 0.0507k = 2y = 0.0084p1 = 1.0524err = 0.050
6、7k = 2y = 0.0084p1 = 1.0264err = 0.0260k = 3y = 0.0021p1 = 1.0264err = 0.0260k = 3y = 0.0021p1 = 1.0133err = 0.0131k = 4y = 5.2963e-004p1 = 1.0133err = 0.0131k = 4y = 5.2963e-004p1 = 1.0066err = 0.0066k = 5y = 1.3270e-004p1 = 1.0066err = 0.0066k = 5y = 1.3270e-004p1 = 1.0033err = 0.0033k = 6y = 3.32
7、11e-005p1 = 1.0033err = 0.0033k = 6y = 3.3211e-005p1 = 1.0017err = 0.0017k = 7y = 8.3074e-006p1 = 1.0017err = 0.0017k = 7y = 8.3074e-006p1 = 1.0008err = 8.3157e-004k = 8y = 2.0774e-006p1 = 1.0008err = 8.3157e-004k = 8y = 2.0774e-006p1 = 1.0004err = 4.1596e-004k = 9y = 5.1943e-007p1 = 1.0004err = 4.1
8、596e-004k = 9y = 5.1943e-007p1 = 1.0002err = 2.0802e-004k = 10y = 1.2987e-007p1 = 1.0002err = 2.0802e-004k = 10y = 1.2987e-007p1 = 1.0001err = 1.0402e-004k = 11y = 3.2468e-008p1 = 1.0001err = 1.0402e-004k = 11y = 3.2468e-008p1 = 1.0001err = 5.2014e-005k = 12y = 8.1170e-009p1 = 1.0001err = 5.2014e-00
9、5k = 12y = 8.1170e-009p1 = 1.0000err = 2.6008e-005k = 13y = 2.0293e-009p1 = 1.0000err = 2.6008e-005k = 13y = 2.0293e-009p1 = 1.0000err = 1.3004e-005k = 14y = 5.0732e-010p1 = 1.0000err = 1.3004e-005k = 14y = 5.0732e-010p1 = 1.0000err = 6.5020e-006k = 15y = 1.2683e-010p1 = 1.0000err = 6.5020e-006k = 1
10、5y = 1.2683e-010p1 = 1.0000err = 3.2510e-006k = 16y = 3.1708e-011p1 = 1.0000err = 3.2510e-006k = 16y = 3.1708e-011p1 = 1.0000err = 1.6255e-006k = 17y = 7.9270e-012p1 = 1.0000err = 1.6255e-006k = 17y = 7.9270e-012p1 = 1.0000err = 8.1277e-007k = 18y = 1.9817e-012ans = 1.0000这说明,经过18次迭代得到满足精度要求的值。以下是程序运行截图: