牛顿法及牛顿下山法

简介:牛顿迭代法是求解单变量非线性方程f(x)=0中最实用的方法,该方法在单根附近二阶收敛。但应用时要选用较好的初值x0近似才能保证迭代收敛。为克服这一缺点,可使用牛顿下山法。下面对牛顿迭代法和牛顿下山法的概念、基本思想、程序实现及例题做进一步介绍。

一、牛顿法

1、定义及定理

如果函数f(x)在[a,b]上有二阶导数,f(a)*f(b)<0,且f'(x)与f"(x)在[a,b]上不变号,则有f(x)在[a,b]内有且仅有唯一的实根。此时,可以构造一种常用的切线迭代法来求方程根的近似值,这种方法称为Newton迭代法。

2、基本思想

首先选取函数值与二阶导数同号的端点,做曲线f(x)的切线,此切线与x轴交于[a,b]内一点x1;在做曲线f(x)对应于点x1的切线并交于x轴与另一点x2;依次类推,切线与x轴的交点将快速逼近函数f(x)的零点。此时,将切线与x轴的交点作为方程的近似根。适用情况如下图所示。

误差分析:当

时,

。其中m=min{|f'(a)|,|f'(b)|}。详细推导参照《高等数学简明教程上》,马知恩著。

具体步骤:

步1:选定初始近似值x0,计算f0=f(x0),f'0=f'(x0)。注意:取迭代初值x0,一般取x0=a,或x0=b(要求f(x0)与f''(x0)同号)。

步2:迭代。按公式迭代一次,得到新的近似值x1,计算f1=f(x1),f'1=f'(x1)。

步3:误差控制。如果x1满足

,或

,或

,则迭代终止,以x1作为所求的根。否则转步骤4。此处

为允许误差。

步4:修改。如果迭代次数达到预先指定的次数N,或者f'1=0,则此方法失败;否则以(x1,f1,f'1)代替(x0,f0,f'0)转步骤2继续迭代。

3、程序实现

/*简单牛顿迭代法的MATLAB程序实现*/function x=newtoniteration(fun,dfun,x0,EPS) %简单牛顿迭代法

%fun即迭代函数,dfun即迭代函数的一阶导数,x0为迭代初值,EPS为精度

f=fcnchk(fun);

df=fcnchk(dfun);

x1=x0-f(x0)/df(x0);

d=norm(x1-x0);

k=1;

while d>=EPS

x0=x1;

x1=x0-f(x0)/df(x0);

d=norm(x1-x0);

k=k+1;

end

if k==1000

x='fasan';

else

x=x1; %切记要给x赋值

end

4、例题

用牛顿迭代法求解方程

。此方程在x=1.5附近有一个根x*

(1)x0=1.5;调用函数 x=newtoniteration('x^3-x-1','3*x^2-1',1.5,1.0e-5),可得:

1.325200398950907

1.324718173999054

1.324717957244790

迭代次数为3,结果为x=1.324717957244790

(2)x0=0.6;调用函数 x=newtoni调用函数 x=newtoniteration('x^3-x-1','3*x^2-1',1.5,1.0e-5),可得:

11.946802328608761

7.985520351936208

5.356909314795458

3.624996032946096

2.505589190106631

1.820129422319469

1.461044109887682

1.339323224262526

1.324912867718656

1.324717992637815

1.324717957244747

迭代一次的初值为x1=17.9,这个结果比x0=0.6更偏离了原来的根x*=1.32472.

由此可以发现,采用牛顿迭代法,在给定区间内求解非线性方程的根,初值的选择极为重要。它不仅影响在给定精度下的迭代次数,而且可能出现切线与x轴交点超出函数定义区域之外。因此又提出了牛顿下山法。

二、牛顿下山法

1、定义:在牛顿迭代过程中,若满足单调性|f(x(k+1))|

为下山因子(

)

它改进了牛顿法对初值的依赖性,当所选初值不合适时(不满足单调性|f(x(k+1))| 2、程序实现

function x=Newtondownhillmethod(fun,dfun,x0,EPS) %简单牛顿迭代法

%fun即迭代函数,dfun即迭代函数的一阶导数,x0为迭代初值,EPS为精度

f=fcnchk(fun);

df=fcnchk(dfun);

x1=x0-f(x0)/df(x0);

d=norm(x1-x0);

k=1;

r=1;

while d>=EPS

while abs(f(x1))>abs(f(x0))   %迭代过程一定具有单调性|f(k+1)|            r=r/2;                                %调整下山因子保证其单调性

x2=x0-r*f(x0)/df(x0);

x1=x2;

end

x0=x1;

r=1;

x1=x0-f(x0)/df(x0);

disp(x1);

disp(f(x1));

d=norm(x1-x0);

k=k+1;

end

if k==1000

x='Iterative divergence';                %迭代公式发散

else

x=x1; %切记要给x赋值

end

x0=0.6;调用函数 x=newtoni调用函数 x=Newtondownhillmethod('x^3-x-1','3*x^2-1',1.5,1.0e-5),可得:

1.3668

0.1866

1.3263

0.0067

1.3247

9.6739e-06

1.3247

2.0449e-11

x =  1.3247

可以发现:给定相同的初值x0=0.6,采用牛顿下山迭代法运算次数为4次。降低了运算量,提高了程序的运行效率。

切记牛顿下山法的条件为:|f(x(k+1))|,从而使序列{x(k)}收敛。

其实,Matlab软件中已经提供了求解非线性方程的根的命令fzero函数,其格式为:

1、c=fzero(f,v,[a,b])------求函数f关于自变量v在【a,b】内的零点c;

2、c=fzero(f,v,x0)----------求函数f关于自变量v在x0内的零点c;

>> fzero('x^3-x-1',x,0.6)

ans =  1.3247

不妥之处,敬请指点。

本文部分程序引用CSDN会员 Jxufe渣渣斯 的文章《牛顿迭代法的MATLAB程序》,在此表示感谢。

matlab 牛顿法 初值,非线性方程的数值解法:牛顿法及牛顿下山法(含Matlab程序)...相关推荐

  1. 牛顿下山法(Matlab实现)

    目录 1 原理 2 案例 3 程序实现 4 结果 5 总结与展望 1 原理 2 案例 3 程序实现 clear clc syms x h=x.^0.5-x.^3+2;%代换函数 x0=NW(h,1,1 ...

  2. matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab.docx

    非线性方程的数值解法牛顿下山法matlab.docx 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 13020011006  题目: 用下列方法求 在 附近的根.根的准确 ...

  3. 非线性方程的数值解法:牛顿法及牛顿下山法(含Matlab程序)

    牛顿法及牛顿下山法 简介:牛顿迭代法是求解单变量非线性方程f(x)=0中最实用的方法,该方法在单根附近二阶收敛.但应用时要选用较好的初值x0近似才能保证迭代收敛.为克服这一缺点,可使用牛顿下山法.下面 ...

  4. matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab

    非线性方程的数值解法牛顿下山法matlab 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 130******** ● 题目: 用下列方法求0133=--=x x f(x)在 ...

  5. 非线性方程的数值解法

    设有一个单变量的非线性方程 f ( x ) = 0 f(x) = 0 f(x)=0,往往这样的方程没有直接的求根公式,因此没有直接方法计算,只能使用迭代法来求数值解,二分法就是这样的一种方法,这里介绍 ...

  6. 求解非线性方程组的牛顿法c语言,牛顿下山法求解非线性方程(组)(C实现)...

    1.算法描述 (1)符号说明与基本假设 对于非线性方程组:                                                        (1) 引入向量: 可将(1) ...

  7. 牛顿法与牛顿下山法(切线法)

    牛顿法 原理: 注意:牛顿法对初值比较敏感,若初值给的不合适,系统很有可能会出现不收敛的情况. 主函数: syms x h=x^3+x^2-1; x=newton_eq(h,1,1000)    %1 ...

  8. 牛顿法及牛顿下山法求零点

    牛顿法 difffun该函数的导函数 a在a附近求零点 ep容忍误差 k迭代次数 function [x_star,k]=MyNewton(fun,difffun,a,ep)k=1 x_k=a f_x ...

  9. [常微分方程的数值解法系列四] 中值法

    中值法 简介 具体步骤 截断误差 例子 在惯性导航以及VIO等实际问题中利用IMU求解位姿需要对IMU测量值进行积分得到需要的位置和姿态,其中主要就是求解微分方程.但之前求解微分方程的解析方法主要是应 ...

最新文章

  1. 给按钮添加热键和快捷键
  2. 华为首款Harmonyos摄像头,掀起家居安防大变革 华为首款HarmonyOS智能摄像头发布...
  3. 转:Java学习路线图,专为新手定制的Java学习计划建议
  4. 对比表示学习必知的几种训练目标
  5. Nodejs学习笔记(七)——接口API
  6. syn攻击 喝茶_如何喝茶
  7. java配置springmvc_告别XML 使用JAVA配置SpringMVC
  8. 前端Swiper滑动的时候最右一个反弹回去了
  9. Java:Spring @Transactional工作原理
  10. 软件开发培训要学多久?怎么学?软件开发培训班多少钱?
  11. ios Reading from private effective user settings
  12. 完全卸载 OneDrive / 重装 OneDrive / 解决“已经安装了 OneDrive”
  13. Waiter,Servant, Attendant的区别
  14. 线性回归 假设_违反线性回归假设的后果
  15. 各种时间指标的度量值
  16. 帝企鹅变形记:腾讯发展的秘密
  17. 电商APP:移动电子商务新趋势
  18. PHP Curl出现403错误的解决办法 beecloud webhook订单状态返回 服务器403的问题
  19. 【科普】显示器连接线有哪几种都长什么样子
  20. 追尾事故降发生:超低功耗滴滴桔视ADAS落地实践

热门文章

  1. c语言123不合法浮点数,c语言程序设计练习.doc
  2. Android Studio中使用Git——结合GitLab,Android热修复原理
  3. 在软件工程领域,搞科研的这十年!
  4. oracle通过UTL_SMTP包发送邮件
  5. Notability work with acrobat pro dc
  6. 腾讯云优惠券 - 2折优惠券在哪领
  7. 掌握这几个关键点,玩转IC芯片数据手册和检测攻略
  8. mysql 使用保留字 jpa_Mysql关键字和保留字(注意)
  9. 谈谈C++的三大特性之一:封装性 (转载)
  10. 如何通过启启宝盒打造你自己的“水井”