当前位置:文档之家› 基于拟Newton法解非线性方程组的数值算法

基于拟Newton法解非线性方程组的数值算法

基于拟Newton法解非线性方程组的数值算法
基于拟Newton法解非线性方程组的数值算法

分类号

编号

毕业论文

题目基于拟Newton法解非线性方程组的数值算法

学院物理与信息科学学院

姓名李国平

专业物理学

学号281040263

研究类型理论研究

指导教师刘兴霞

提交日期2012-5-6

原创性声明

本人郑重声明:本人所呈交的论文是在指导教师的指导下独立进行研究所取得的成果。学位论文中凡是引用他人已经发表或未经发表的成果、数据、观点等均已明确注明出处。除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的科研成果。

本声明的法律责任由本人承担。

论文作者签名:年月日

论文指导教师签名:

目录

1 引言 (1)

2 求解非线性方程组的拟Newton法介绍 (1)

2.1 拟Newton法原理简述 (1)

2.2拟Newton法的算法步骤 (4)

2.3 实例验证 (4)

3 拟Newton法的应用 (5)

3.1拟Newton法在航空发动机特性仿真中的应用 (5)

3.2 拟Newton法多层前向网络的预测控制 (6)

3.3 自适应拟Newton子空间跟踪的盲多用户检测算法的应用 (6)

3.4 面波频散反演地下层状结构的拟Newton法 (7)

3.5 拟Newton法的射线追踪方法的应用 (7)

3.6 拟Newton法嫁接求解管网数学模型 (8)

4 结论 (9)

参考文献 (10)

基于拟Newton法解非线性方程组的数值算法

李国平

(物理与信息科学学院物理系,甘肃·天水,741000)

摘要:首先介绍了求解非线性方程组的拟Newton法,并给出其迭代算法;然后采用Matlab 7.0编写了实现拟Newton算法的源程序,通过一个实例进行验证;最后介绍其对于一些强非线性的实际工程问题计算,如:航天、网络工程等方面的应用。

关键词:Newton法;拟Newton法;非线性方程组;

Based on the proposed Newton method for solution of nonlinear equations of the numerical algorithm

Li Guoping

( College of physics and information science, Department of physics, Gansu,

Tianshui,741000)

Abstract: First we introduced the solution of nonlinear equations of the proposed Newton method, and gives its iterative algorithm;And then the Matlab7 was prepared to implement Newton algorithm source program, through an example verification;At last we introduce the calculation for some nonlinear problems of practical engineering, such as, aerospace, network engineering and other aspects of the application.

Key word:Newton method,The proposed Newton method,Nonlinear equations

1 引言

非线性代数方程组求解是一个基本而又重要的问题,这是因为在工程实践、经济学、信息安全和动力学等方面有大量的实际问题最终转化为代数方程组。这一类问题,我们不可能找到它们的解析解,数值解是目前主要的研究方向。数值解法较为成熟,速度快,但其往往只能求出部分解,而且通常只能求出近似解。

现实中的一些问题可转换为求非线性方程组的数值解的问题,迭代法是求解非线性方程组的常用方法,不同的迭代准则可构造不同的迭代公式。Newton 法是基于泰勒展式构造的经典迭代公式,由于其形式简单而且是二阶收敛的,是求解非线性方程组F(x)=O 近似解的典型方法]1[。但是当初值的选取不当或F(x )的雅可比矩阵)(x F '是奇异的或者接近于奇异时,Newton 法可能导致数据溢出或者不收敛]3~2[。克服Newton 这一缺陷的一个主要途径是采用拟Newton 法。其基本思想是利用某个矩阵k B 作为)(x F ' 的近似取代)(x F '。它是由 Broyden 在20 世纪60 年代第一次提出的求解非线性方程组的拟Newton 法。由于拟Newton 法不需要明显计算 Jacobian 阵和实际计算的有效性, 很快受到了优化工作者的特别青睐。

2 求解非线性方程组的拟Newton 法介绍

2.1 拟Newton 法原理简述

考虑方程组[]4

111(,...)0,.................

(,...)0.n n n f x x f x x =????=?

()1 其中1,...,n f f 均为1(,...)n x x 多元函数。若用向量记号记

11(,...),(,...,)T n T

n n x x x R F f f =∈=,()1 就可写成

()0.F x = (2)

当2,n ≥,且(1,...,)i f i n =中至少有一个是自变量(1,...,)i x i n = 的非线

性函数时,则称方程组

(1)为非线性方程组。非线性方程组求根问题是前面介绍的方程即

(1)n =求根的直接推广,实际上只要把单变量函数()f x 看成向量函数()F x 则可将单变量方程求根方法推广到方程组(2)。若已给出方程组(2)的

一个近似根

()1(,...,),k k k T n x x x = 将函数()F x 的分量()(1,...,)i f x i n =在()k x 用多元函数泰勒展开,并取其线性部分,则可表示为

()()()()()()().k k k F x F x F x x x '≈+- 令上式右端为零,得到线性方程组

()()()()()(),k k k F x x x F x '-=- (3) 其中

111122221212()()()()()()()()()()n n n n n n f x f x f x x x x f x f x f x x x x F x f x f x f x x x x ????????????????????????'=??????????????????

(4) 称为)(x F '为雅可比(Jacobi )矩阵。求解线性方程组

(3),并记解为(1)k x +,

则得

(1)()()1()()()k k k k x x F x F x +-'=- (0,1,...).k = (5) 这就是解非线性方程组(2)的牛顿法。

牛顿法解非线性方程组是一种线性方法,即将非线性方程组以一线性方程组来近似,由此构造一种迭代格式,用以逐次逼近所求的解案。可以证明Newton 迭代

至少是二阶收敛的,而且收敛速度快。因此牛顿法是解非线性方程的常规方法。 正因为Newton 法思想直观自然,是最常用的,也是研究其它方法的出发点,该方法的不足恰好是其它方法研究的出发点。

首先,Newton 法的每步迭代都要计算()k F x ',它是由2n 个偏导数值造

的矩阵,有些问题中每个值可能都很复杂,甚至根本无法解析地计算。当n 比较大时这部分是算法中耗费时间最多的,不仅如此,每步迭代还要解线性方程组

()()()

()k k x F x x F -=?' 当n 很大时(如由离散非线性偏微方程导出的非线性方程组,n 可能有

6410~10甚至更多),其工作量很大。 其次,在许多情况下,初值()0x 要有较严格的限制,在实际应用中给出确保收敛的初值是十分困难的。非线性问题通常又是多解的,给出收敛到所需要解的初值更加困难。

再有,迭代过程中如果某一步()k x 处有()()k x F '奇异或几乎奇异(后者指

()()k x F '的条件数很大),则Newton 法的计算将无法进行下去。特别如果在()0F x =的解*

x 处有*()F x '奇异,不仅计算困难,而且问题本身也变得十

分复杂,以一无元代数方程为例,这时方程产生重根。

为了克服Newton 法的上述缺点,我们可以采用拟Newton 法可以克服第三种缺点。我们可以用如下方法将Newton 法进行改进,从而得出拟Newton 法。

我们用矩阵

k B 近似的代替公式(5)中的()()k x F ',

即: ()

()k k x F B '= 从而得到如下形式的迭代法: ()()()()k k k k x F B x x

11-+-= k =0,1,2,…. ()6 其中k B 均为非奇异的。

为了不要每次迭代都计算逆矩阵,我们设法构造k H 直接逼近公式(5)中的()()k x F '的逆矩阵()()1-'k x F ,

即:

()()1-'=k k x F H

所以公式(5)可化为:

()()()()k k k k x F H x x -=+1 k =0,1,2,…. ()7 我们称迭代法()6或()7为拟Newton 法。

2.2拟Newton 法的算法步骤

(1) 给定初值()0x ,初始矩阵o H

,数值精度ε,0=k ;

(2) 计算()()k x F ,如果()()ε

(3) ()()()

()k k k k x F H x x -=+1;

(4) 计算()()1+k x F ;

(5) 1+=k k ,转(2).

2.3 实例验证

用拟Newton 法解非线性方程组

???????=-++=+++-=---0

33

10200

06.1sin )2.0(810

2

1

)cos(333222121121πx e x x x x x x x x

的迭代14次的近似解。取()[]T x 1.0,1.0,1.00-=,精度要求1010e -< 。

在Matlab 7.0运行拟Newton 算法的源程序,得到运行结果如表1所示:

表1 数值运行结果:

k 1x 2x 3x k 20

0.100000000 0.100000000 -0.100000000 1

0.499865379 0.032411718 -0.521456413 2

0.499958695 0.013527867 -0.522895761 0.028430156 3

0.500016080 0.001795560 -0.523550847 0.012706732 4

0.500001030 0.000117825 -0.523595607 0.001777903 5

0.500000010 0.000001046 -0.523598748 0.000117634 6

0.500000000 0.000000001 -0.523598776 0.000001045 7

0.500000000 -0.000000000 -0.523598776 0.000000001 8

0.500000000 0.000000000 -0.523598776 0.000000000 9 0.500000000 -0.000000000 -0.523598776 0.000000000

10 0.500000000 -0.000000000 -0.523598776 0.000000000

11 0.500000000 -0.000000000 -0.523598776 0.000000000

12 0.500000000 -0.000000000 -0.523598776 0.000000000

13 0.500000000 -0.000000000 -0.523598776 0.000000000

14 0.500000000

-0.000000000 -0.523598776 0.000000000 迭代结果表明:拟Newton 法可以将F(x )的雅可比矩阵)(x F '是奇异的或者接近于奇异时的非线性方程组求解,并且相较于Newton 法,拟Newton 法不仅每步计算量要少得多,而且在一定条件下线性收敛性较好,是一种能有效地求解非线性方程组的方法。

3 拟Newton 法的应用

3.1拟Newton 法在航空发动机特性仿真中的应用

航空发动机特性仿真关键是求解描述航空燃气涡轮发动机共同工作的方程组, 求解该方程组的技术通常称为“ 平衡技术”, 为了对方程组进行快速、准确的求解, 必须采用适当的求解方法。特别是在发动机控制方面, 随着对发动机模拟实时性要求的提高, 提高发动机平衡计算的速度非常重要。传统的“ 平衡

技术”采用Newton迭代法求解发动机共同工作的非线性方程组[]7~5,从而得出发动机的所有参数。但这种方法有它的不足之处: 每一步迭代都需要求Jacobi矩阵, 这需要多次计算整机气动热力过程, 因此计算量很大。本文采用基于拟 Newton

法原理的拟牛顿方法可以避免多次求出 Jacobi 矩阵, 从而提高发动机平衡计

算的计算速度。

3.2 拟Newton法多层前向网络的预测控制

对于一般意义的非线性系统, 由于采用近似线性模型进行预测控制往往与

实际偏离较大, 很难达到优化控制的目标; 80 年代中期出现的神经网络则在非线性领域显示出了强大的能力, 对于建模困难的工业对象其应用上的优势尤其

明显,还可将前向网络应用于预测控制中。但传统应用的 BP 算法本质上是一种

最速下降寻优方法, 具有一阶收敛速度, 算法的收敛速度很慢, 而且在学习速

率较大时稳定性很差, 不适宜于在线应用。在实时性要求较高的预测控制系统中, BP 网络的应用由于计算量大、收敛慢而不能满足要求。文献[8]中提出一种基于拟Newton法的前向网络, 具有二阶线性收敛速度, 并验证了其在收敛性和快速

性方面的优越性。将这种基于拟Newton法前向网络应用于在线预测控制, 仿真表明在搜索接近最优解时依然具有很好的收敛性能, 并且速度很快, 可取得良好

控制效果。

3.3 自适应拟Newton子空间跟踪的盲多用户检测算法的应用[]9

在(DS—CDMA) 通信系统中,多用户检测技术是消除多址干扰最有效的方式

之一,在过去的十几年中,提出了各种各样的多用户检测技术,最主要的多用户检测有解相关检测,最小均方误差(MMSE)检测,多级干扰抵消检测,基于神经网络的检测等等。

盲自适应多用户检测是近年来的一个热点,它和传统的接收机一样,不需

要训练序列,只需目标用户的特征波形和定时信息,特别适应于CDMA中的下行链路。

最近,基于子空间的盲多用户检测算法已有不少,在一些方面还得到了满

意的应用,但是其收敛速度较慢,稳定性差。文献[9]中提出了一种基于自适应拟牛顿子空间跟踪的多用户检测技术。仿真表明:该算法收敛速度较快,且能适应环境的变化。

文献[9]中推导出了一种新的基于自适应拟Newton子空间跟踪算法的盲多

用户检测算法,这种算法有较好的稳态性能和特别快的收敛速度。仿真结果表明,这种算法性能优于其他子空间算法,有一定理论研究价值。进一步降低子空间分解算法的复杂度,寻求更易于工程实现的自适应算法是我们进一步努力的方向。

3.4 面波频散反演地下层状结构的拟Newton法[]10

面波频散曲线含有丰富的地下层状结构信息,对地下横波速度结构特别敏感。通过对频散曲线的反演可以得到地下层状介质的物理性质。目前瑞利波频散曲线计算的研究已经日趋完善。文献[10]中将最优化方法中广泛使用的拟牛顿法引入到频散曲线的反演当中, 提出了基于基阶模的拟Newton法反演, 在理论上

进行了反演模拟。对于实测信号, 提出实际应用中手工给出反演初值再用拟Newton法进行反演拟合, 通过反演结果和实际场地的单孔横波速度测试结果对

比可以看出, 拟Newton法完全可以胜任瑞利波频散曲线的反演。

通过理论分析表明基阶模反演是可行的, 并发现基阶模对于浅部各层的反

演精度比较高, 地下结构越复杂, 反演的难度将越大。对于实测信号, 基于拟Newton法, 成功地实现了实测基阶模频散曲线的自动反演。反演过程及结果说明基阶模反演在大多数情况下能够较好地解决实际问题, 它的优点是每一步反演

都是收敛的, 如果场地均匀性较好, 实测的数据也比较准确, 反演的效果会更

理想。这种方法在工程中, 如在地基检测方面, 有一定实用价值。

3.5 拟Newton法的射线追踪方法的应用[]11

在地震勘探领域, 射线追踪研究具有重要的理论和现实意义。它在建立正演模型, 地震波的走时计算以及叠前偏移等很多方面起着重要的作用。射线追踪的计算速度和路径精度, 直接影响到偏移成像和正演模型的质量和计算效率。文献[11]中在已知震源和检波点相对位置的情况下,按照 Fermat 原理, 假定射线

路径已经得到, 通过求解方程, 确定射线路径与各个地层的交点坐标, 从而最终确定震源到检波点的射线路径。然后结合泰勒展开等方法, 推出了一个求取射线路径修正量的线性方程组, 用拟Newton法求解这个线性方程组, 得到射线的校正量从而实现对射线路径的校正。在其基础上计算出时间t , 从而求出时距曲线。

文献[11]中讨论在多种界面地层情况下的最优化射线追踪方法, 利用拟Newton法解非线性方程组, 从而得到校正向量, 追踪到的射线可以在要求精度下良好逼近。通过模型试算, 该方法对于具有复杂界面的地层能够正确地得到射线路径以及时距曲线。

3.6 拟Newton法嫁接求解管网数学模型[]12

管网水力计算的问题可归结为联立求解连续性方程、能量方程和压降方程. Newton法是求解非线性方程组的一个经典方法, 但当初值选择不好时, 有可能不收敛。将新型的仿生算法──蚂蚁算法引入到求解管网数学模型中。利用拟Newton法与蚂蚁算法相互之间较强的互补性, 提出了求解供水管网微观数学模型的新算法──嫁接法。计算表明, 嫁接法结合了蚂蚁算法与拟Newton法各自的优点, 计算速度快, 效果良好。

蚂蚁算法在求解全局最优问题时表现出良好的全局寻优能力, 但计算速度较慢。而拟Newton法在求解管网微观数学模型时, 体现出较强的局部搜索能力, 计算速度快, 但当初值不好时很难保证速度, 甚至算法不能够收敛。通分析观察两种算法的特点, 发现拟Newton法与蚂蚁算法相互之间有较强的互补性。将两种算法有机结合起来, 利用上述两种算法的优点便形成了供水管网微观数学模型的嫁接法。

利用蚂蚁算法的对优化问题没有可微性及其他要求、适用范围广、具有解的全局性好、收敛速度快、鲁棒性强、计算简单等优点, 通过寻优的方法求解供水管网各节点的供水压力。

模拟计算表明, 嫁接法结合了蚂蚁算法与拟Newton算法各自的优点, 计算速度快, 效果良好。该方法充分利用蚂蚁算法良好的全局搜索能力, 以及计算前

期搜索速度较快的优点, 以较少的运算求得管网水力计算问题近似最优解, 然

后以这个近似最优解为迭代初始值, 利用拟Newton法良好的局部计算能力在近

似最优解的邻域内寻找问题最优解, 是解决管网水力计算问题的一种高效算法。

4 结论

通过对拟Newton法的原理的研究与验证表明:拟Newton法相较于Newton法不仅是每步迭代的计算量大为减少,而且保持了较快的收敛速度。根据上述的特点,拟Newton法大量运用于求解大型的工程方面的非线性方程组,成为当前主要的解非线性方程组的数值算法。

参考文献

[1]黄象鼎,曾钟钢,马亚南.非线性数值分析的理论和方法[M].武汉:武汉大学出版社,2004.

[2]李庆扬,莫孜中,祁力群.非线性方程组的数值解法[M].北京:科学出版社,1987.

[3]郭学萍,丰静.一类变形Newton法的收敛性[J].浙江大学学报:理学版,2006,33(4):389-391.

[4]张可村,赵英良编《数值计算的算法与分析》科学出版社 2003年1月

[5] 朱行健, 王雪瑜. 燃气轮机工作原理及性能[M] . 北京: 科学出版社, 1992.

[6] 杨蔚华, 孙健国. 发动机实时建模技术的新发展[J] . 航空动力学报, 1995.

[7] 李松林, 等. 求解涡扇发动机数学模型的有限域搜索方法[J] . 航空动力学报, 1997, 12 ( 3):276-278.

[8] 杨秋贵. 基于拟牛顿法的前向神经元网络学习算法[J] . 控制与决策, 12( 4) : 357- 360.

[9] 李光平, 段正华. 基于自适应拟牛顿子空间跟踪的盲多用户检测算法[J]. 湖南大学计算机与通信学院, 2005.17:72-73.

[10] 凡友华, 刘雪峰, 陈晓非. 面波频散反演地下层状结构的拟牛顿法[J]. 北京大学学报. 地球与空间科学学院. 2006,30(5):456-459.

[11] 罗丹, 张旭东, 计雄飞. 浅论拟牛顿法的射线追踪方法的应用[J]. 成都理工大学学报. 2008,10:84-85.

[12] 李玉华, 冯雁, 张士泽, 郭壮. 蚂蚁算法与拟牛顿法嫁接求解管网数学模型. 哈尔滨工业大学学报. 2006,38(11):1903-1905.

牛顿法求非线性方程的根

学科前沿讲座论文 班级:工程力学13-1班姓名:陆树飞

学号:02130827

牛顿法求非线性方程的根 一 实验目的 (1)用牛顿迭代法求解方程的根 (2)了解迭代法的原理,了解迭代速度跟什么有关 题目:用Newton 法计算下列方程 (1) 013=--x x , 初值分别为10=x ,7.00=x ,5.00=x ; (2) 32943892940x x x +-+= 其三个根分别为1,3,98-。当选择初值02x =时 给出结果并分析现象,当6510ε-=?,迭代停止。 二 数学原理 对于方程f(x)=0,如果f(x)是线性函数,则它的求根是很容易的。牛顿迭代法实质上是一种线性化方法,其基本思想是将非线性方程f(x)=0逐步归结为某种线性方程来求解。 设已知方程f(x)=0有近似根x k (假定k f'(x )0≠) ,将函数f(x)在点x k 进行泰勒展开,有 k k k f(x)f(x )+f'(x )(x-x )+≈??? 于是方程f(x)=0可近似的表示为 k k k f(x )+f'(x )(x-x )=0 这是个线性方程,记其根为x k+1,则x k+1的计算公式为 k+1k ()x =x -'() k k f x f x ,k=0,1,2,… 这就是牛顿迭代法。

三 程序设计 (1)对于310x x --=,按照上述数学原理,编制的程序如下 program newton implicit none real :: x(0:50),fx(0:50),f1x(0:50)!分别为自变量x ,函数f(x)和一阶导数f1(x) integer :: k write(*,*) "x(0)=" read(*,*) x(0) !输入变量:初始值x(0) open(10,file='1.txt') do k=1,50,1 fx(k)=x(k-1)**3-x(k-1)-1 f1x(k)=3*x(k-1)**2-1 x(k)=x(k-1)-fx(k)/f1x(k) !牛顿法 write(*,'(I3,1x,f11.6)') k,x(k) !输出变量:迭代次数k 及x 的值 write(10,'(I3,1x,f11.6)') k,x(k) if(abs(x(k)-x(k-1))<1e-6) exit !终止迭代条件 end do stop end (2)对于32943892940x x x +-+=,按照上述数学原理,编制的程序如下 program newton implicit none

二分法和牛顿法求解非线性方程(C语言)

(1)二分法求解非线性方程: #include #include #define f(x)((x*x-1)*x-1) void main() {float a,b,x,eps; int k=0; printf("intput eps\n");/*容许误差*/ scanf("%f",&eps); printf("a,b=\n"); for(;;) {scanf("%f,%f",&a,&b); if(f(a)*f(b)>=0)/*判断是否符合二分法使用的条件*/ printf("二分法不可使用,请重新输入:\n"); else break; } do {x=(a+b)/2; k++; if(f(a)*f(x)<0)/*如果f(a)*f(x)<0,则根在区间的左半部分*/ b=x; else if(f(a)*f(x)>0)/*否则根在区间的右半部分*/ a=x; else break; }while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2;/*取最后的小区间中点作为根的近似值*/ printf("\n The root is x=%f,k=%d\n",x,k); } 运行结果: intput eps 0.00001 a,b= 2,-5 The root is x=1.324721,k=20 Press any key to continue 总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。 (2)牛顿法求解非线性方程: #include #include float f(float x)/*定义函数f(x)*/ {return((-3*x+4)*x-5)*x+6;} float f1(float x)/*定义函数f(x)的导数*/

牛顿法非线性方程求解

《MATLAB 程序设计实践》课程考核 ---第37-38页 题1 : 编程实现以下科学计算算法,并举一例应用之。(参考书籍《精 通MAT LAB科学计算》,王正林等著,电子工业出版社,2009 年) “牛顿法非线性方程求解” 弦截法本质是一种割线法,它从两端向中间逐渐逼近方程的根;牛顿法本质上是一种切线法,它从一端向一个方向逼近方程的根,其递推公式为: - =+n n x x 1) ()(' n n x f x f 初始值可以取)('a f 和)('b f 的较大者,这样可以加快收敛速度。 和牛顿法有关的还有简化牛顿法和牛顿下山法。 在MATLAB 中编程实现的牛顿法的函数为:NewtonRoot 。 功能:用牛顿法求函数在某个区间上的一个零点。 调用格式:root=NewtonRoot )(```eps b a f 其中,f 为函数名; a 为区间左端点; b 为区间右端点 eps 为根的精度; root 为求出的函数零点。 ,

牛顿法的matlab程序代码如下: function root=NewtonRoot(f,a,b,eps) %牛顿法求函数f在区间[a,b]上的一个零点%函数名:f %区间左端点:a

%区间右端点:b %根的精度:eps %求出的函数零点:root if(nargin==3) eps=1.0e-4; end f1=subs(sym(f),findsym(sym(f)),a); f2=subs(sym(f),findsym(sym(f)),b); if (f1==0) root=a; end if (f2==0) root=b; end if (f1*f2>0) disp('两端点函数值乘积大于0 !'); return; else tol=1; fun=diff(sym(f)); %求导数 fa=subs(sym(f),findsym(sym(f)),a); fb=subs(sym(f),findsym(sym(f)),b); dfa=subs(sym(fun),findsym(sym(fun)),a); dfb=subs(sym(fun),findsym(sym(fun)),b); if(dfa>dfb) %初始值取两端点导数较大者 root=a-fa/dfa; else root=b-fb/dfb; end while(tol>eps) r1=root; fx=subs(sym(f),findsym(sym(f)),r1); dfx=subs(sym(fun),findsym(sym(fun)),r1); %求该点的导数值 root=r1-fx/dfx; %迭代的核心公式 tol=abs(root-r1); end end 例:求方程3x^2-exp(x)=0的一根 解:在MATLAB命令窗口输入: >> r=NewtonRoot('3*x^2-exp(x)',3,4) 输出结果: X=3.7331

牛顿迭代法求解非线性方程组的代码

牛顿迭代法求解非线性方程组 非线性方程组如下: 221122121210801080 x x x x x x x ?-++=??+-+=?? 给定初值()00.0T x =,要求求解精度达到0.00001 1.首先建立函数()F X ,方程编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1),f(2)] ; 2.建立函数()DF X ,用于求方程的jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; %jacobi 矩阵是一阶偏导数以一定方式排列成的矩阵。 3.编程牛顿迭代法解非线性方程组,将newton.m 保存在工作路径中: clear,clc; x=[0,0]'; f=F(x);

df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break; else end end ezplot('x^2-10*x+y^2+8',[-6,6,-6,6]); hold on ezplot('x*y^2+x-10*y+8',[-6,6,-6,6]); 运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117

C++实现 牛顿迭代 解非线性方程组

C++实现牛顿迭代解非线性方程组(二元二次为例) 求解{0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4; }的方程 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数#define Epsilon 0.0001 // 差向量1范数的上限 #define Max 100 // 最大迭代次数 using namespace std; const int N2=2*N; int main() { void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N] void ffjacobian(float xx[N],float yy[N][N]); //计算雅克比矩阵yy[N][N] void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵inv void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0 计算近似解向量x1 float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm; int i,j,iter=0; //如果取消对x0的初始化,撤销下面两行的注释符,就可以由键盘x读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

matlab程序设计实践-牛顿法解非线性方程

中南大学MATLAB程序设计实践学长有爱奉献,下载填上信息即可上交,没有下载券的自行百度。所需m文件照本文档做即可,即新建(FILE)→脚本(NEW-Sscript)→复制本文档代码→运行(会跳出保存界面,文件名默认不要修改,保存)→结果。第一题需要把数据文本文档和m文件放在一起。全部测试无误,放心使用。本文档针对做牛顿法求非线性函数题目的同学,当然第一题都一样,所有人都可以用。←记得删掉这段话 班级: ? 学号: 姓名:

一、《MATLAB程序设计实践》Matlab基础 表示多晶体材料织构的三维取向分布函数(f=f(φ1,φ,φ2))是一个非常复杂的函数,难以精确的用解析函数表达,通常采用离散 空间函数值来表示取向分布函数,是三维取向分布函数的一个实例。 由于数据量非常大,不便于分析,需要借助图形来分析。请你编写一 个matlab程序画出如下的几种图形来分析其取向分布特征: (1)用Slice函数给出其整体分布特征; " ~ (2)用pcolor或contour函数分别给出(φ2=0, 5, 10, 15, 20, 25, 30, 35 … 90)切面上f分布情况(需要用到subplot函数);

(3) 用plot函数给出沿α取向线(φ1=0~90,φ=45,φ2=0)的f分布情况。 (

备注:数据格式说明 解: (1)( (2)将文件内的数据按照要求读取到矩阵f(phi1,phi,phi2)中,代码如 下: fid=fopen(''); for i=1:18 tline=fgetl(fid); end phi1=1;phi=1;phi2=1;line=0; f=zeros(19,19,19); [ while ~feof(fid) tline=fgetl(fid); data=str2num(tline); line=line+1;数据说明部分,与 作图无关此方向表示f随着 φ1从0,5,10,15, 20 …到90的变化而 变化 此方向表示f随着φ 从0,5,10,15, 20 … 到90的变化而变化 表示以下数据为φ2=0的数据,即f(φ1,φ,0)

用牛顿迭代法求解非线性方程

数值分析实验报告(一) 实验 名称 用牛顿迭代法求解非线性方程实验时间2011年11 月19日姓名班级学号成绩 一、实验目的 1.了解求解非线性方程的解的常见方法。 2.编写牛顿迭代法程序求解非线性方程。 二、实验内容 分别用初值 0.01 x=, 10 x=和 300 x=求113,要求精度为5 10-。 三、实验原理 设113 x=,则21130 x-=,记f(x)= 2113 x-,问题便成为了求2x -113=0的正根; 用牛顿迭代公式得 2 1 113 2 k k k k x x x x + - =-,即 1 1113 () 2 k k k x x x + =+(其中k=0,1,2,3,…,) 简单推导 假设f(x)是关于X的函数: 求出f(x)的一阶导,即斜率: 简化等式得到: 然后利用得到的最终式进行迭代运算直至求到一个比较精确的满意值。 如果f函数在闭区间[a,b]内连续,必存在一点x使得f(x) = c,c是函数f在闭区间[a,b]内的一点 我们先猜测一X初始值,然后代入初始值,通过迭代运算不断推进,逐步靠近精确值,直到得到我们主观认为比较满意的值为止。 回到我们最开始的那个”莫名其妙”的公式,我们要求的是N的平方根,令x2 = n,假设一关

于X的函数f(x)为: f(X) = X2 - n 求f(X)的一阶导为: f'(X) = 2X 代入前面求到的最终式中: X k+1 = X k - (X k 2 - n)/2X k 化简即得到我们最初提到求平方根的迭代公式: 四、实验步骤 1.根据实验题目,给出题目的C程序。 当初值为0.01、10、300时,即x=0.01,10,300 分别应用程序: #include "stdio.h" int main() { float number; printf("Please input the number:"); scanf("%f", &number); float x=1; int i; for (i=0;i<1000;i++) { x = (x + number/x)/2; } printf("The square root of %f is %8.5f\n", number ,x); } 得出结果 2.上机输入和调试自己所编的程序。 当x=0.01时,结果为:10.63015 x=10时,结果为:10.63015 x=300时,结果也为:10.63015 3.实验结果分析。 当初值取0.01、10、300时取不同的初值得到同样的结果10.63015。 五、程序

c++求解非线性方程组的牛顿顿迭代法

牛顿迭代法c++程序设计 求解{0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4; }的方程 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数 #define Epsilon 0.0001 // 差向量1范数的上限 #define Max 100 //最大迭代次数 using namespace std; const int N2=2*N; int main() { void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N] void ffjacobian(float xx[N],float yy[N][N]);/ /计算雅克比矩阵yy[N][N] void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵inv void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0 计算近似解向量x1 float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm; int i,j,iter=0; //如果取消对x0的初始化,撤销下面两行的注释符, 就可以由键盘向x0读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

非线性方程组的牛顿迭代法的应用

非线性方程组的牛顿迭代法的应用

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

非线性方程组的牛顿迭代法的应用 一、问题背景 非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在一定条件下由非线性问题简化的,为得到更符合实际的解答,往往需要直接研究非线性科学,它是21世纪科学技术发展的重要支柱,非线性问题的数学模型有无限维的如微分方程,也有有限维的。道遥咏计算机进行科学计算都要转化为非线性的单个方程或方程组的求解。从线性到非线性是一个质的变化,方程的性质有本质不同,求解方法也有很大差别。本文主要介绍的是非线性方程组的牛顿迭代法的数值解法。 二、数学模型 对于方程()0=x f ,如果()x f 湿陷性函数,则它的求根是容易的。牛顿法实质上是一种线性化方法,其基本思想是将线性方程()0=x f 逐步归结为某种线性方程来求解。 设已知方程()0=x f 有近似根k x (假定()0'≠k x f ),将函数()x f 在点k x 展开,有 ()()()()k k k x x x f x f x f -+≈', 于是方程()0=x f 可近似地表示为 ()()()0'=-+k k k x x x f x f 这是个线性方程,记其根为1+k x ,则1+k x 的计算公式 () () k k k k x f x f x x ' 1- =+, ,1,0=k 这就是牛顿法。 三、算法及流程 对于非线性方程 ()()()???? ????????=n n n n x L x x f M x L x x f x L x x f f ,,,,,,,,,2 12 12211 在()k x 处按照多元函数的泰勒展开,并取线性项得到

Newton迭代法求解非线性方程

Newton迭代法求解非 线性方程

一、 Newton 迭代法概述 构造迭代函数的一条重要途径是用近似方程来代替原方程去求根。因此,如果能将非线性方程f (x )=0用线性方程去代替,那么,求近似根问题就很容易解决,而且十分方便。牛顿(Newton)法就是一种将非线性方程线化的一种方法。 设k x 是方程f (x )=0的一个近似根,把如果)(x f 在k x 处作一阶Taylor 展开,即: )x x )(x ('f )x (f )x (f k k k -+≈ (1-1) 于是我们得到如下近似方程: 0)x x )(x ('f )x (f k k k =-+ (1-2) 设0)('≠k x f ,则方程的解为: x ?=x k +f (x k ) f (x k )? (1-3) 取x ~作为原方程的新近似根1+k x ,即令: ) x ('f ) x (f x x k k k 1k -=+, k=0,1,2,… (1-4) 上式称为牛顿迭代格式。用牛顿迭代格式求方程的根的方法就称为牛顿迭代法,简称牛顿法。 牛顿法具有明显的几何意义。方程: )x x )(x ('f )x (f y k k k -+= (1-5) 是曲线)x (f y =上点))x (f ,x (k k 处的切线方程。迭代格式(1-4)就是用切线式(1-5)的零点来代替曲线的零点。正因为如此,牛顿法也称为切线法。 牛顿迭代法对单根至少是二阶局部收敛的,而对于重根是一阶局部收敛的。一般来说,牛顿法对初值0x 的要求较高,初值足够靠近*x 时才能保证收敛。若

要保证初值在较大范围内收敛,则需对)x (f 加一些条件。如果所加的条件不满足,而导致牛顿法不收敛时,则需对牛顿法作一些改时,即可以采用下面的迭代格式: ) x ('f ) x (f x x k k k 1k λ -=+, ?=,2,1,0k (1-6) 上式中,10<λ<,称为下山因子。因此,用这种方法求方程的根,也称为牛顿下山法。 牛顿法对单根收敛速度快,但每迭代一次,除需计算)x (f k 之外,还要计算 )x ('f k 的值。如果)x (f 比较复杂,计算)x ('f k 的工作量就可能比较大。为了避免计算导数值,我们可用差商来代替导数。通常用如下几种方法: 1. 割线法 如果用 1 k k 1k k x x ) x (f )x (f ----代替)x ('f k ,则得到割线法的迭代格式为: )x (f ) x (f )x (f x x x x k 1k k 1 k k k 1k --+---= (1-7) 2. 拟牛顿法 如果用 ) x (f )) x (f x (f )x (f k 1k k k ---代替)x ('f k ,则得到拟牛顿法的迭代格式为: )) x (f x (f )x (f ) x (f x x 1k k k k 2k 1k -+--- = (1-8) 3. Steffenson 法 如果用 ) x (f ) x (f ))x (f x (f k k k k -+代替)x ('f k ,则得到拟牛顿法的迭代格式为: ) x (f ))x (f x (f ) x (f x x k k k k 2k 1 k -+- =+

基于Matlab的牛顿迭代法解非线性方程组

基于Matlab 实现牛顿迭代法解非线性方程组 已知非线性方程组如下 2211221212 10801080x x x x x x x ?-++=??+-+=?? 给定初值0(0,0)T x =,要求求解精度达到0.00001 首先建立函数F(x),方程组编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1) f(2)]; 建立函数DF(x),用于求方程组的Jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; 编程牛顿迭代法解非线性方程组,将newton.m 保存到工作路径中: clear; clc x=[0,0]'; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break ; else end end

运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685 4 1.0000000 1.0000000

Newton 法解非线性方程组

Newton法解非线性方程组 一.题目重述:编程实现非线性方程组的牛顿解法,并求解如下方程组。 3x1?cos x2x3?0.5=0 x12?81x2+0.12+sin x3+1.06=0 e?x1x2+20x3+10π?3 3 =0 二.算法: 非线性方程组的牛顿法为:给定初始解向量x(0),对于k≥1生成 x(k)=x(k?1)?J x k?1?1F(x(k?1)). 三.编程实现: 这里用MATLAB程序实现,建立三个文件如下: 1.函数F(X)文件 function F =F( X) F(1,1)=3*X(1)-cos(X(2)*X(3))-0.5; F(2,1)=X(1)^2-81*(X(2)+0.1)^2+sin(X(3))+1.06; F(3,1)=exp(-X(1)*X(2))+20*X(3)+(10*pi-3)/3; end 2.J(X) 函数(即Jacobian矩阵)文件 function F1= F1(X ) F1(1,:)=[3,sin(X(1)*X(2))*X(3),sin(X(1)*X(2))*X(2)]; F1(2,:)=[2*X(1),-162*(X(2)+0.1),cos(X(3))]; F1(3,:)=[exp(-X(1)*X(2))*(-X(2)),exp(-X(1)*X(2))*(-X(1)),20]; end 3.解题脚本文件 文件名zu %% 牛顿法解非线性方程组 clear; X0=[0.1;0.1;-0.1]; for i=1:200 X=X0-F1(X0)\F(X0); %这里采用MATLAB的左除方法,避免算逆矩阵X0=X; end X

非线性方程组牛顿迭代法(1)

华中师范大学 课程结业论文 题目:非线性方程组牛顿法及MATLAB程序 院系:数学与统计学学院 专业:数学与应用数学 年级:2014级 课堂名称:数值分析(1)实验 学生姓名:杨帅 学号:2014212643 2016年6月18

非线性方程组牛顿法及其MATLAB 程序 〔摘要〕学了《数值分析》这门课,了解到非线性方程的数值解法有:对分区间法、简单迭代法、Aitken-Steffensen 加速法、Newton 迭代法、正割法等,自然就会想到非线性方程组的数值解法有哪些呢?和非线性方程的数值解法有哪些不不同呢? 在研究非线性方程组的数值解法之前,首先要给非线性方程组下一个合理定义;n 个变量n 个方程(n>1)的方程组表示为0 ),...,,(2 1 =n i x x x f (其中i=1,2...,n ),若i f 中至少有一个是非线性函数,则称上述 的表示为非线性方程组。在R 中记,T n x x x f f ),...,,(2 1 =,其中记 ),...,()(1n i i i x x f x f f ==且D x ∈。 若存在尣∈D ,使?(尣)=0,则称尣为非线性方程组的解。上述方程组可能有一个解或多个解,也可能有无穷多解或无解。对非线性方程组解的存在性的研究远不如线性方程组那样成熟,现有的解法也不象线性方程组那样有效。除极特殊的方程外,一般不能用直接方法求得精确解,目前主要采用迭代法求近似解。根据不同思想构造收敛于解尣的迭代序列{尣}(k=0,1,…),即可得到求解非线性方程组的各种迭代法;但研究数学问题的时候,一般是由简单到复杂,由特殊到一般。因此要在研究非线性方程组牛顿解法的时候,首先要探究非线性方程的牛顿解法。 1.1求解线性方程组的牛顿法及其MATAB 程序 1.1.1程序设计思路 输入的量:初始值0 x 、近似根k x 的误差限tol ,近似根k x 的函数 值)(k x f 得误差限ftol ,迭代次数的最大值gxmax 、函数fnq (x )=) (x f

牛顿法解非线性方程组实验报告

实验名称: 牛顿法解非线性方程组 1 引言 我们已经知道,线性方程组我们可以采取Jacobi 迭代法,G-S 迭代法以及SOR 迭代方法求解。而在科学技术领域里常常提出求解非线性方程组的问题,例如,用非线性函数拟合实验数据问题、非线性网络问题,用差分法求解非线性微分方程问题等。 我们在解非线性方程组时,也考虑用迭代法求解,其思路和解非线性方程式一样,首先要将F(x)=0转化为等价的方程组 12(,,,),(1,2, )i i n x g x x x i n == 或者简记为x =g (x ),其中:,:n n n i g R R g R R →→ 112 2()()(),()n n n g x g x g R g x ???? ????????==∈???? ???????????? x x x x x 迭代法:首先从某个初始向量(0)x 开始,按下述逐次代入方法构造一向量序列(){}k x : (1)()() 1(,,),(1,2,,)k k k i i n x g x x i n +== 其中,()()() ()12 (,,,)k k k k T n x x x =x 。 或写成向量形式:(1)()(),(0,1,2,)k k g k +==x x 如果()*lim k k →∞ ≡x x (存在),称(){}k x 为收敛。且当()i g x 为连续函数时,可得 *()*(lim )()k k g g →∞ ==x x x 说明*x 为方程组的解。又称为x =g (x )的不动点。 本实验中采用牛顿迭代法来求解非线性方程组。 2 实验目的和要求 运用matlab 编写一个.m 文件,要求用牛顿法非线性方程组: 12(0)(1)()3211 cos 02,(取(0,0),要求10)1sin 0 2 T k k x x x x x x x +-∞ ?-=??=-

matlab程序设计实践-牛顿法解非线性方程

中南大学 MATLAB程序设计实践学长有爱奉献,下载填上信息即可上交,没有下载券 的自行百度。所需m文件照本文档做即可,即新建(FILE)→脚本(NEW-Sscript)→复制本文档代码→运行(会跳出 保存界面,文件名默认不要修改,保存)→结果。第 一题需要把数据文本文档和m文件放在一起。全部测 试无误,放心使用。本文档针对做牛顿法求非线性函 数题目的同学,当然第一题都一样,所有人都可以用。 ←记得删掉这段话 班级: 学号: 姓名: 一、《MATLAB程序设计实践》Matlab基础

表示多晶体材料织构的三维取向分布函数(f=f(φ1,φ,φ2))是一个非常复杂的函数,难以精确的用解析函数表达,通常采用离散空间函数值来表示取向分布函数,是三维取向分布函数的一个实例。由于数据量非常大,不便于分析,需要借助图形来分析。请你编写一个matlab程序画出如下的几种图形来分析其取向分布特征:(1)用Slice函数给出其整体分布特征; (2)用pcolor或contour函数分别给出(φ2=0, 5, 10, 15, 20, 25, 30, 35 … 90)切面上f分布情况(需要用到subplot函数);

(3) 用plot函数给出沿α取向线(φ1=0~90,φ=45,φ2=0)的f分布情况。

备注:数据格式说明 解: (1)将文件内的数据按照要求读取到矩阵f(phi1,phi,phi2)中,代码如下: fid=fopen(''); for i=1:18 tline=fgetl(fid); end phi1=1;phi=1;phi2=1;line=0; f=zeros(19,19,19); while ~feof(fid) tline=fgetl(fid); data=str2num(tline); line=line+1; if mod(line,20)==1 phi2=(data/5)+1; phi=1; 数据说明部分,与作图无关 此方向表示f 随着φ1从0,5,10,15, 20 …到90的变化而变化 此方向表示f 随着φ从0,5,10,15, 20 …到90的变化而变化 表示以下数据为φ2=0的数据,即f (φ1,φ,0)

matlab实现牛顿迭代法求解非线性方程组

matlab实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0 exp(-x1*x2)+20*x3+(10*pi-3)/3=0 求解要求精度达到0.00001 ———————————————————————————————— 首先建立函数fun 储存方程组编程如下将fun.m保存到工作路径中: function f=fun(x); %定义非线性方程组如下 %变量x1 x2 x3 %函数f1 f2 f3 syms x1 x2 x3 f1=3*x1-cos(x2*x3)-1/2; f2=x1^2-81*(x2+0.1)^2+sin(x3)+1.06; f3=exp(-x1*x2)+20*x3+(10*pi-3)/3; f=[f1 f2 f3]; ———————————————————————————————— 建立函数dfun 用来求方程组的雅克比矩阵将dfun.m保存到工作路径中: function df=dfun(x); %用来求解方程组的雅克比矩阵储存在dfun中 f=fun(x); df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')]; df=conj(df'); ———————————————————————————————— 编程牛顿法求解非线性方程组将newton.m保存到工作路径中: function x=newton(x0,eps,N); con=0; %其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛for i=1:N; f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); x=x0-f/df; for j=1: length(x0); il(i,j)=x(j); end if norm(x-x0)

牛顿法求解非线性方程组matlab源程序

牛顿法求解非线性方程组matlab源程序Newton-Raphson 求解非线性方程组matlab源程序 matlab程序如下: function hom [P,iter,err]=newton('f','JF',[;; ],,,1000); disp(P); disp(iter); disp(err); function Y=f(x,y,z) Y=[x^2+y^2+z^2-1; 2*x^2+y^2-4*z; 3*x^2-4*y+z^2]; function y=JF(x,y,z) f1='x^2+y^2+z^2-1'; f2='2*x^2+y^2-4*z'; f3='3*x^2-4*y+z^2'; df1x=diff(sym(f1),'x'); df1y=diff(sym(f1),'y'); df1z=diff(sym(f1),'z'); df2x=diff(sym(f2),'x'); df2y=diff(sym(f2),'y'); df2z=diff(sym(f2),'z'); df3x=diff(sym(f3),'x'); df3y=diff(sym(f3),'y'); df3z=diff(sym(f3),'z'); j=[df1x,df1y,df1z;df2x,df2y,df2z;df3x,df3y,df3z]; y=(j); function [P,iter,err]=newton(F,JF,P,tolp,tolfp,max) %输入P为初始猜测值,输出P则为近似解 %JF为相应的Jacobian矩阵 %tolp为P的允许误差 %tolfp为f(P)的允许误差 %max:循环次数 Y=f(F,P(1),P(2),P(3)); for k=1:max

数值分析求解非线性方程根的二分法,简单迭代法和牛顿迭代法

实验报告一:实验题目 一、 实验目的 掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。 二、 实验内容 1、编写二分法、牛顿迭代法程序,并使用这两个程序计算 02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 4 10- ,比较两种方法收敛速度。 2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。 3、由中子迁移理论,燃料棒的临界长度为下面方程的根cot x =(x 2?1)/2x ,用牛顿迭代法求这个方程的最小正根。 4、用牛顿法求方程f (x )=x 3?11x 2+32x ?28=0的根,精确至8位有效数字。比较牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。 三、 实验程序 第1题: 02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。 画图函数: function Test1() % f(x) 示意图, f(x) = x + exp(x) - 2; f(x) = 0 r = 0:0.01:1; y = r + exp(r) - 2 plot(r, y); grid on 二分法程序: 计算调用函数:[c,num]=bisect(0,1,1e-4) function [c,num]=bisect(a,b,delta) %Input –a,b 是取值区间范围 % -delta 是允许误差 %Output -c 牛顿迭代法最后计算所得零点值 % -num 是迭代次数

ya = a + exp(a) - 2; yb = b + exp(b) - 2; if ya * yb>0 return; end for k=1:100 c=(a+b)/2; yc= c + exp(c) - 2; if abs(yc)<=delta a=c; b=c; elseif yb*yc>0 b=c; yb=yc; else a=c; ya=yc; end if abs(b-a)

非线性方程组的牛顿迭代法的应用

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

非线性方程组的牛顿迭代法的应用 一、问题背景 非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在一定条件下由非线性问题简化的,为得到更符合实际的解答,往往需要直接研究非线性科学,它是21世纪科学技术发展的重要支柱,非线性问题的数学模型有无限维的如微分方程,也有有限维的。道遥咏计算机进行科学计算都要转化为非线性的单个方程或方程组的求解。从线性到非线性是一个质的变化,方程的性质有本质不同,求解方法也有很大差别。本文主要介绍的是非线性方程组的牛顿迭代法的数值解法。 二、数学模型 对于方程()0=x f ,如果()x f 湿陷性函数,则它的求根是容易的。牛顿法实质上是一种线性化方法,其基本思想是将线性方程()0=x f 逐步归结为某种线性方程来求解。 设已知方程()0=x f 有近似根k x (假定()0'≠k x f ),将函数()x f 在点k x 展开,有 ()()()()k k k x x x f x f x f -+≈', 于是方程()0=x f 可近似地表示为 ()()()0'=-+k k k x x x f x f 这是个线性方程,记其根为1+k x ,则1+k x 的计算公式 ()() k k k k x f x f x x ' 1- =+, ,1,0=k 这就是牛顿法。 三、算法及流程 对于非线性方程 ()()()???? ????????=n n n n x L x x f M x L x x f x L x x f f ,,,,,,,,,2 1212211 在()k x 处按照多元函数的泰勒展开,并取线性项得到

经典Newton-Raphson牛顿法求解非线性方程组matlab源程序

function hom [P,iter,err]=newton('f','JF',[7.8e-001;4.9e-001;3.7e-001],0.01,0.001,1000); disp(P); disp(iter); disp(err); function Y=f(x,y,z) Y=[x^2+y^2+z^2-1; 2*x^2+y^2-4*z; 3*x^2-4*y+z^2]; function y=JF(x,y,z) f1='x^2+y^2+z^2-1'; f2='2*x^2+y^2-4*z'; f3='3*x^2-4*y+z^2'; df1x=diff(sym(f1),'x');

df1y=diff(sym(f1),'y'); df1z=diff(sym(f1),'z'); df2x=diff(sym(f2),'x'); df2y=diff(sym(f2),'y'); df2z=diff(sym(f2),'z'); df3x=diff(sym(f3),'x'); df3y=diff(sym(f3),'y'); df3z=diff(sym(f3),'z'); j=[df1x,df1y,df1z;df2x,df2y,df2z;df3x,df3y,df3z]; y=(j); function [P,iter,err]=newton(F,JF,P,tolp,tolfp,max) %输入P为初始猜测值,输出P则为近似解%JF为相应的Jacobian矩阵 %tolp为P的允许误差 %tolfp为f(P)的允许误差 %max:循环次数

Y=f(F,P(1),P(2),P(3)); for k=1:max J=f(JF,P(1),P(2),P(3)); Q=P-inv(J)*Y; Z=f(F,Q(1),Q(2),Q(3)); err=norm(Q-P); P=Q; Y=Z; iter=k; if (err function homework4 [P,iter,err]=newton('f','JF',[7.8e-001;4.9e-001;3.7e-001],0.01,0.001,1000);

相关主题
文本预览
相关文档 最新文档