《数值分析(原书第2版)》—— 2.7 非线性方程组

2.7 非线性方程组

第1章中包含求解一个未知变量的方程,该方程通常是非线性方程.在本章中,我们已经研究了方程组的求解,但是要求方程组是线性的.结合非线性和“多于一个方程”的因素,大大提高了求解问题的难度.本节中我们将描述牛顿方法及其变体,并用于求解非线性方程组.130

2.7.1 多元牛顿方法

单变量的牛顿方法xk+1=xk-f(xk)f′(xk)提供了多元牛顿方法的主要轮廓.两种方法都是根据泰勒展开的线性近似推导得到,例如,令f1(u,v,w)=0
f2(u,v,w)=0(2.49)
f3(u,v,w)=0是三个非线性方程,具有三个未知变量u、v、w.定义向量值函数F(u,v,w)=(f1,f2,f3),将(2.49)中的问题表示为F(x)=0,其中x=(u,v,w).
单变量情况下函数导数f′现在对应的是雅可比矩阵,定义为DF(x)=f1uf1vf1w
f2uf2vf2w
f3uf3vf3w在点x0附近的向量值函数的泰勒展开是F(x)=F(x0)+DF(x0)·(x-x0)+O(x-x0)2例如,在x0=(0,0)附近函数F(u,v)=(eu+v,sinu)的线性展开是F(x)=1
0+e0e0
cos00u
v+O(x2)=1
0+u+v
u+O(x2)牛顿方法基于线性近似,忽略O(x2)项.正如在一维情况下,令x=r是根,令x0是当前估计.则0=F(r)≈F(x0)+DF(x0)·(r-x0)或者-DF(x0)-1F(x0)≈r-x0(2.50)因而,通过求解(2.50)得到r,可以对根进行更好的近似.
多变量牛顿方法x0=初始向量
xk+1=xk-(DF(xk))-1F(xk),k=0,1,2,…
131  由于计算矩阵逆的代价很大,我们使用技巧避免该计算.在每一步中,不是按上面描述的过程,而是令xk+1=xk-s,其中s是DF(xk)s=F(xk)的解.现在,仅仅需要在每步中使用高斯消去(n3/3次的乘法),而不是计算矩阵的逆(相对于高斯消去大约3倍的计算次数).因而,对于多元牛顿方法的迭代步骤如下DF(xk)s=-F(xk)
xk+1=xk+s(2.51)例2.32 使用牛顿方法,初始估计为(1,2),找出如下方程组的解v-u3=0
u2+v2-1=0图2.5显示了一组点,在这些点上f1(u,v)=v-u3和f2(u,v)=u2+v2-1都为0,以及它们的两个交点,交点对应方程组的解.图2.5 对例2.32使用牛顿方法.对应的两个根是圆上的两个点.牛顿方法过程中的点在(0.8260,0.5636)处近似收敛到解雅可比矩阵是DF(u,v)=-3u21
2u2v在第一步中,使用初始点x0=(1,2),我们必须求解矩阵方程(2.51):-31
24s1
s2=-1
4解是s=(0,-1),因而第一步迭代过程x1=x0+s=(1,1).第二步要求求解-31
22s1
s2=-0
1解是s=(-1/8,-3/8),x2=x1+s=(7/8,5/8).图2.5显示了两个迭代.后面的步骤得到下表:132
步数uv步数uv01.000000000000002.0000000000000040.826040108170650.5636197735028411.000000000000001.0000000000000050.826031357732410.5636241621316320.875000000000000.6250000000000060.826031357654190.5636241621612630.829036348267120.5643491124260470.826031357654190.56362416216126
小数点后精确数位个数翻倍是熟悉的二次收敛的特征,这在输出的序列中可以明显看到.如图2.5所示,方程的对称性表明,如果(u,v)是一个解,则(-u,-v)也是解.第二个解也可以通过使用附近的初始估计,并应用牛顿方法迭代得到.
例2.33 使用牛顿方法求解系统f1(u,v)=6u3+uv-3v3-4=0
f2(u,v)=u2-18uv2+16v3+1=0注意到(u,v)=(1,1)是一个解.此外还有另外两组解.雅可比矩阵如下DF(u,v)=18u2+vu-9v2
2u-18v2-36uv+48v2正如一维例子中所示,使用牛顿方法能够找到哪个解取决于初始估计.使用初始点(u0,v0)=(2,2),对前面的公式迭代得到下表:
步数uv步数uv02.000000000000002.0000000000000041.000033678665061.0000224377201011.372580645161291.3403225806451651.000000001119571.0000000005789421.078386812004431.0538012326498461.000000000000001.0000000000000031.005349688965201.0026926187153971.000000000000001.00000000000000其他的初始向量得到另外的两个解,它们近似为(0.865939,0.462168)以及(0.886809,-0.294007).参见编程问题2.
如果可以计算雅可比矩阵,牛顿方法是一个好的选择.否则,最好的替代方法就是Broyden方法,我们将在下一节中讲述.
2.7.2 Broyden方法
牛顿方法求解单变量的方程需要知道导数.在第1章中对于该方法的讨论得到割线方法,割线方法用在没有导数或者导数难以计算的时候.
既然我们有了用于求解非线性方程组F(x)=0的牛顿方法,133我们也面临同样的问题:如果没有雅可比矩阵DF怎么办?尽管没有直接的方法将用于方程的牛顿方法推广到割线方法.但是Broyden[1965]提出一种方法,这通常被认为是次优的方法.
假设Ai是第i步可以得到的雅可比矩阵的最优近似,并被用于生成xi+1=xi-A-1iF(xi)(2.52)为了在下一步中从Ai更新到Ai+1,我们注意到雅可比矩阵DF的导数,满足Ai+1δi+1=Δi+1(2.53)其中δi+1=xi+1-xi,Δi+1=F(xi+1)-F(xi).另一方面,我们没有任何关于δi+1的正交补向量新的信息.因而,我们要求对于所有满足δTi+1w=0的w.Ai+1w=Aiw(2.54)同时满足(2.53)和(2.54)的矩阵如下:Ai+1=Ai+(Δi+1-Aiδi)δTi+1δTi+1δi+1(2.55)Broyden方法使用牛顿方法步骤(2.52)来推进当前的近似估计,使用(2.55)更新雅可比矩阵的近似.总结来说,算法从初始估计x0和初始近似雅可比A0开始.如果没有更好的选择,初始的雅可比矩阵可以使用单位阵.
Broyden方法

其中δi+1=xi+1-xi,Δi+1=F(xi+1)-F(xi)
注意到牛顿类型的步骤通过求解Aiδi+1=F(xi)进行,正如牛顿方法所做的那样.和牛顿方法一样,Broyden方法不保证收敛到根.
Broyden方法的第二种方式避免相对代价较大的矩阵求解步骤Aiδi+1=F(xi).由于我们最多在迭代过程中近似DF导数,我们也可以同样近似DF的逆,这正是牛顿步骤所需要的.
基于Bi=A-1i,重做Broyden导数.我们希望得到δi+1=Bi+1Δi+1(2.56)其中δi+1=xi+1-xi,Δi+1=F(xi+1)-F(xi),并对于任何满足δTi+1w=0的w,也满足Ai+1w=Aiw,或者Bi+1Aiw=w(2.57)134满足(2.56)和(2.57)的矩阵是Bi+1=Bi+(δi+1-BiΔi+1)δTi+1BiδTi+1BiΔi+1(2.58)不需要矩阵求解的迭代的新版本如下:xi+1=xi-BiF(xi)(2.59)得到的算法称为Broyden方法Ⅱ.
Broyden方法Ⅱ

首先,需要初始向量x0和初始估计B0.如果难以计算导数,可以使用B0=I.Broyden方法Ⅱ的一个可以察觉的缺点是,在一些应用中需要估计雅可比矩阵,但是这个矩阵并不容易得到.矩阵Bi是对雅可比矩阵逆的估计.而Broyden方法Ⅰ正相反,一直记录了Ai用来估计雅可比.正是由于这个原因,在一些圈子里,Broyden方法Ⅰ和方法Ⅱ被分别称为“好的Broyden”和“坏的Broyden”.
两种版本的Broyden方法都超线性收敛(到单根),比牛顿方法的二次收敛要慢一点.如果有雅可比的计算公式,通常使用DF(x0)的逆作为初始矩阵B0,这样通常可以加速收敛.
Broyde方法Ⅱ的MATLAB代码如下:

例如,例2.32的方程组的解可以通过定义如下函数得到

对于Broyden方法Ⅱ的调用如下:
135
Broyden方法的两种实现,在没有雅可比矩阵的时候都非常有用.这种情况的典型例子在事实验证7的管道扭曲问题中得到展示.
2.7节习题
1.找出如下函数的雅可比矩阵.
(a) F(u,v)=(u3,uv3)
(b) F(u,v)=(sinuv,euv)
(c) F(u,v)=(u2+v2-1,(u-1)2+v2-1)
(d) F(u,v,w)=(u2+v-w2,sinuvw,uvw4)
2.使用泰勒展开找出L(x)到F(x)在x0附近的线性近似.
(a) F(u,v)=(1+eu+2v,sin(u+v)),x0=(0,0)
(b) F(u,v)=(u+eu-v,2u+v),x0=(1,1)
3.在uv平面画出两条曲线,通过简单的代数找出所有的解.
(a) u2+v2=1
(u-1)2+v2=1  (b) u2+4v2=4
4u2+v2=4  (c) u2-4v2=4
(u-1)2+v2=4
4.对习题3的方程组使用两步牛顿方法,起始点为(1,1).
5.对习题3的方程组使用两步Broyden方法Ⅰ,起始点为(1,1),使用A0=I.
6.对习题3的方程组使用两步Broyden方法Ⅱ,起始点为(1,1),使用B0=I.
7.证明(2.55)满足(2.53)和(2.54).
8.证明(2.58)满足(2.56)和(2.57).2.7节编程问题
1.使用合适的初始点,利用牛顿方法找出所有解.用习题3进行检查确保结果正确.
(a) u2+v2=1
(u-1)2+v2=1(b) u2+4v2=4
4u2+v2=4(c) u2-4v2=4
(u-1)2+v2=4
2.使用牛顿方法找出例2.31的三个解.
3.使用牛顿方法找出如下方程组的两个解u3-v3+u=0,u2+v2=1.
4.使用牛顿方法找出如下三个方程的两个解.2u2-4u+v2+3w2+6w+2=0
u2+v2-2v+2w2-5=0
3u2-12u+v2+3w2+8=05.使用多元牛顿方法找出三维空间中三个给定球的两个交点.(a)每个球的半径都是1,球心在(1,1,0),(1,0,1),以及(0,1,1).(答案是(1,1,1)和(1/3,1/3,1/3))(b)每个球半径是5,球心在(1,-2,0),(-2,2,-1),以及(4,-2,3).136
6.尽管三个球在三维空间中的一般交点是两个点,它也可能是唯一点.使用多元牛顿方法找出球心在(1,0,1)半径为8、球心在(0,2,2)半径为2、球心在(0,3,3)半径为2的三个球的唯一交点.这个迭代仍然二次收敛吗?请解释.
7.对习题3的方程组,使用Broyden方法Ⅰ,初始估计x0=(1,1),A0=I.尽可能精确地报告解,以及所需要的步数.
8.对习题3的方程组,使用Broyden方法Ⅱ,初始估计为(1,1),B0=I.报告尽可能精确的解,以及所需要的步数.
9.使用Broyden方法Ⅰ找出编程问题5中的两个交点.
10.使用Broyden方法Ⅰ找出编程问题6中的交点.你所能观测到的收敛率是多少?
11.使用Broyden方法Ⅱ找出编程问题5中的两个交点.
12.使用Broyden方法Ⅱ找出编程问题6中的交点.你所能观测到的收敛率是多少?
软件与进一步阅读
在数值线性代数中有很多优秀的教科书,包含Stewart[1973]和全面的参考材料Golub与Van Loan[1996].Demmel[1997]和Trefethen与Bau[1997]为两本包含数值线性代数的现代技术的教科书.涵盖迭代技术的书包括Axelsson[1994]、Hackbush[1994]、Kelley[1995]、Saad[1996]、Traub[1964]、Varga[2000]、Young[1971],以及Dennis与Schnabel[1983].
LAPACK是一个全面的、公开的软件包,涵盖了高质量的矩阵代数计算程序,包含求解Ax=b、矩阵分解和条件数的方法.代码经过精心设计可以在现在计算机框架下进行移植,包含共享存储向量和并行处理器.这些内容可以参看Anderson等人[1990]的论著.
LAPACK的可移植性依赖于算法在书写方式上最大化使用了基本线性代数子程序(Basic Linear Algebra Subprograms,BLAS),BLAS包括了基本的矩阵/向量计算,这些计算可以通过调整优化在特定的机器和框架上的性能.BLAS可以粗略地分为三个部分:1级,要求O(n)次的操作,例如点积的操作;2级,诸如矩阵/向量乘法的操作,O(n2)次的操作;3级,包含全矩阵/矩阵乘法,具有O(n3)的复杂度.
LAPACK上的DGESV函数,以双精度用PA=LU分解方法求解Ax=b,还有其他用于稀疏和带状矩阵的方法.参见www.netlib.org/lapack可以看到更多细节.LAPACK函数的实现也构成了MATLAB,以及其他IMSL与NAG的矩阵代数计算的基础.137

时间: 2024-11-03 01:11:29

《数值分析(原书第2版)》—— 2.7 非线性方程组的相关文章

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

ROS机器人程序设计(原书第2版).

机器人设计与制作系列 ROS机器人程序设计 (原书第2版) Learning ROS for Robotics Programming,Second Edition 恩里克·费尔南德斯(Enrique Fernández) 路易斯·桑切斯·克雷斯波(Luis Sánchez Crespo) 阿尼尔·马哈塔尼(Anil Mahtani) 亚伦·马丁内斯(Aaron Martinez) 著 刘锦涛 张瑞雷 等译 图书在版编目(CIP)数据 ROS机器人程序设计(原书第2版) / (西)恩里克·费尔南

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

《JavaScript和jQuery实战手册(原书第3版)》---第1章 编写第一个JavaScript程序 1.1 编程简介

本节书摘来自华章出版社<JavaScript和jQuery实战手册(原书第3版)>一书中的第1章,第1.1节,作者David Sawyer McFarland,姚待艳 李占宣 译,更多章节内容可以访问"华章计算机"公众号查看. 第1章 编写第一个JavaScript程序 HTML自身并没有太多智能:它不能做数学运算,不能判断某人是否正确填写了一个表单,而且不能根据Web访问者的交互来做出判断.基本上,HTML让人们阅读文本.观看图片或视频,并且单击链接转向拥有更多文本.图片

《机器学习与R语言(原书第2版)》一2.3 探索和理解数据

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 探索和理解数据 在收集数据并把它们载入R数据结构以后,机器学习的下一个步骤是仔细检查数据.在这个步骤中,你将开始探索数据的特征和案例,并且找到数据的独特之处.你对数据的理解越深刻,你将会更好地让机器学习模型匹配你的学习问题. 理解数据探索的最好方法就是通过例子.在

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.7 创建透明材质

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.7节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.7 创建透明材质 到现在为止,我们见到的着色器都有一个共同点-都用在实心材质上.如果你想提升游戏视觉效果,某些时候透明材质是个不错的选择,比如火焰效果或者窗户玻璃等.透明材质的制作相对复杂一点.在渲染实心物体之前,Uni

《面向对象的思考过程(原书第4版)》一1.1 基本概念

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.1节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著 1.1 基本概念 本书主要目标是让你学会思考如何将面向对象概念应用于面向对象的系统设计中.历史上定义面向对象的语言拥有以下特点:封装(encapsulation).继承(inheritance)和多态(polymorphism).因此,如果设计一门语言时没有完全实现以上特性,那么通常我们认为该语言不是完全面向对象的.即使实现了这三点,我也往往会加入组

《用户至上:用户研究方法与实践(原书第2版)》一1.1 什么是用户体验

本节书摘来自华章出版社<用户至上:用户研究方法与实践(原书第2版)>一书中的第1章,第1.1节,作者 Understanding Your Users: A Practical Guide to User Research Methods, Second Edition凯茜·巴克斯特(Kathy Baxter)[美]凯瑟琳·卡里奇(Catherine Courage) 凯莉·凯恩(Kelly Caine)更多章节内容可以访问"华章计算机"公众号查看. 第1章 用户体验入门

《机器学习与R语言(原书第2版)》一1.6 总结

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.6节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.6 总结 机器学习起源于统计学.数据库科学和计算机科学的交叉.它是一个强大的工具,能够在大量的数据中找到可行动的洞察.然而,人们仍需持谨慎的态度,避免现实生活中机器学习的普遍滥用. 从概念上讲,机器学习涉及把数据抽象为结构化表示,并把这个结构化表示进行一般化从而推广到

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.4 给着色器添加纹理

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.4节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.4 给着色器添加纹理 在模拟现实效果方面,纹理可以让着色器迅速生动起来.为了高效使用纹理,我们需要理解二维图像是如何映射成三维模型的.这个映射过程称为纹理映射.为了进行纹理映射,我们需要在着色器和想要应用纹理的三维模型上