非线性方程求根word版

合集下载

第6章 非线性方程求根(1、二分法、迭代法)

第6章 非线性方程求根(1、二分法、迭代法)

(2) 如果将原方程化为等价方程 x = 仍取初值
x0 = 0
3
3
x+1 2
x1 =
x0 + 1 = 2
3
3
1 ≈ 0 .7937 2
1 .7937 ≈ 0 .9644 2
x2 =
依此类推,得 依此类推, x3 = 0.9940 同样的方程 x4 = 0.9990 不同的迭代格式 x5 = 0.9998 x6 = 1.0000 有不同的结果 x7 = 1.0000 已经收敛, 已经收敛,故原方程的解为 x = 1.0000
用一般迭代法求方程x lnx= 在区间( 例:用一般迭代法求方程x-lnx=2在区间(2,∞) 内的根,要求|x 内的根,要求|xk-xk-1|/|xk|<=10-8 f(x)=x-lnx解:令f(x)=x-lnx-2 f(2)<0,f(4)>0,故方程在 2,4) 故方程在( f(2)<0,f(4)>0,故方程在(2,4)内至少有一个根
y p1 p0
y=x y=g(x)
y p0
y=x
p1 x x0 y y=g(x) x1 x* y=x y y=g(x) p0 x0 x* x1
y=g(x)
x
y=x
p0 p1 x x1 x0 x* x0 x* x1 p1 x
f(x)=0化为等价方程x=g(x)的方式是不唯 f(x)=0化为等价方程x=g(x)的方式是不唯 化为等价方程x=g(x) 一的,有的收敛,有的发散. 一的,有的收敛,有的发散. example: For example:2x3-x-1=0
1 3 ( x + 1 ) = g ( x ) 进行迭代,则在 进行迭代,则在(1, 3

第五章非线性方程求根

第五章非线性方程求根
f (x0) y0>0 否
打印
结束
是 继续扫描
例1:考察方程
f (x) x3 x 1 0
x
0 0.5 1.0 1.5
f (x) 的 - - 符号
-+
§2 二 分 法
a
a x0 x*
x1
b
b
xk xk1 ε1 或 f ( x) ε2
不能保证 x 的精 度
执行步骤 1.计算f (x)在有解区间[a, b]端点处的值,f (a),f (b)。
(3) Steffensen 加速法
将Aitken加速公式与不动点迭代相结合,可得
x(1) k 1
( xk
),
x(2) k 1
x k 1
xk
x(1) k 1
xk
x(2) k 1
2
x(1) k 1
(
x(1) k 1
2
xk
) ,
k 0,1,
(5.3.6)
利用(5.3.6)式构造序列{xk } 的方法称为Steffensen加速方法。 即每进行两次不动点迭代,就执行一次Aitken加速。
f (x) ex 10 0
因而, f (x) 是严格单调的, f (x) 0最多有一个根,
又因为 f (0) 1 0, f (1) e 8 0 所以, f (x) 0 有唯一实根 x* (0,1)
用二分法求解,要使 xk x* 0.5102,只要
1 0 2k 1
0.5 102
2.计算f (x)在区间中点处的值f (x0)。
3.判断若f (x0) = 0,则x0即是根,否则检验: (1)若f (x1)与f (a)异号,则知解位于区间[a, x0], b1=x0, a1=a; (2)若f (x0)与f (a)同号,则知解位于区间[x0, b], a1=x0, b1=b。

方程的近似解法Word版

方程的近似解法Word版

第二章 方程求根在许多实际问题中,常常会遇到方程f(x)=0求解的问题。

当f(x)为一次多项式时,f(x)=0称为线性方程,否则称为非线性方程。

对于非线性方程,由于f(x)的多样性,求其根尚无一般的解析方法可以使用,因此研究非线性方程的数值解法是十分必要的。

本章主要介绍求非线性方程根的一些常用方法。

它们是增值寻根法、二分法、迭代法、牛顿法及割线法。

这些方法均是知道根的初始近似值后,进一步把根精确化,直到达到所要求的 精度为止。

也即求非线性方程根的数值方法。

第一节 第一节 增值寻根法与二分法 2.1.1 增值寻根法设非线性方程f(x)=0的根为*x ,增值寻根法的基本思想是,从初始值0x 开始,按规定 的一个初始步长h 来增值。

令 1n x +=n x +h(n=0,1,2,…),同时计算f(1n x +)。

在增值的计算过程中可能遇到三种情形:(1) f(1n x +)=0,此时1n x +即为方 程的根*x 。

(2) f(n x )和f(1n x +)同符号。

这说明区间[n x , 1n x +]内无根。

(3) f(n x )和f(1n x +)异号,即有f(n x )·f(1n x +)<0此时当f(x)在区间[n x , 1n x +]上连续时,方程f(x)=0在[n x , 1n x +] 一定有根。

也即我们用增值寻根法找到了方程根的存在区间,n x 或1n x +均可以视为根的近似值。

下一步就是设法在该区间内寻找根 *x 更精确的近似值,为此再用增值寻根法 把n x 作为新的初始近似值,同时把步长缩小,例如选新步长1100h h =,这 样会得到区间长度更小的有根区间,从而也得到使f(x)更接近于零的n x ,作为*x 更 精确的近似值,若精度不够,可重复使用增值寻根法,直到有根区间的长度|1n x +-n x |<ε(ε为所要求的精度)为止。

此时f(n x )或f(1n x +)就可近似认为是零。

【精品】04_非线性方程求解.docx

【精品】04_非线性方程求解.docx

第四章非线性方程数值求解基本内容1. 知道方程的分类2. 了解如何作根的搜索3. 不动点迭代的操作:x =(p(x)- > x k+l =(p(x k ), k=0, 1•••4.收敛性定理:有2个不同意义下的收敛定理。

全局收敛:(1)定义域条件:XG [a,b]时,[a y b];(2) Lipschitz 条件:|(p(x)-(p(y) |< L|x-y |,Vx,ye [a 9b] o (1) (/)E C [a,b] (2) (p(x) < L < 1,XG [a,h]局部收敛:(p(x) = 0(F)=..…=0"7(F) = 0, 0”(F)丰 0 则为m 阶收敛,lim 电~ = Q 迭代加速松弛法Aitken 法和 Steffenson 法牛顿法7. 割线法8. 代数方程求根一.基本题型之一:给定非线性方程组,选择适当的解法求出近似根基本解法有二分法,不动点迭代法,牛顿法(也是不动点迭代的一屮)和割线法等,有 时需要用有关的加速法。

1.用二分法求解方程2'x 4-2cosx=0,使精度|<10-2,并估计最小二分次数。

解:设 /(x) = 2-x + 2cosxo 因为/(l) = 2_1+2cosl>0, /(2) = 2-2+2cos2< 0 , 故在[1,2]中,方程有零点。

又因 / (x) = -2~v In 2- 2sin x,而 /(l) = -2_1 ln2-2sinl<0, f(2) = -T 1 ln2-2sin2<0,由单调性可知,/(兀)在[1,2]屮有唯一零点。

(1) 先估计二分最少次数。

题目要求|无-无_】|<10一2,这与教材中的精度要求(1) (2)b-a是不一样的,故不能直接用教材里给出的估讣迭代次数的公式,需要另行推导,请同学们注 意此类“陷阱因为I 兀一无(V 寫,X 严答g 二 叽;几,所以要根据两种可能情况来确定忑-忑T 的大小:(注:下图中打印的同学未能把无等打在la k _v b k _{]的中点,所以大 家看得时候要当心一一周国标)情况一I ------------------------------------------------- -------------------------------------------------%\ 林-] bk-Xak 无bk情况二「k>6f 即最小二分次数为6次。

第二讲 非线性方程求根

第二讲 非线性方程求根
xn1 ( z n yn ) zn z n 2 yn x n
2
改进
2.4 Newton-Raphson Method
设 x*是方程 f(x)=0 的根, x0是x*的近似值. 在 x0 附近,有
f ( x) f ( x0 ) f ( x0 )( x x0 )
f(x ) = 0
| xn1 C | 1 lim 2 n | x C | 2 C n
由此可知,这一序列的收敛阶数为1,即迭代法 是线性收敛.
定理2.6 设x*是 ( x) 的不动点,且 ( p1) ( x*) ( x*) ( x*) 0 而
( p)
( x*) 0 则 xn1 ( xn )
p阶收敛
p
| xn x* | ( p) | xn1 x* || ( xn ) ( x*) | | ( n ) | p! 其中, n 介于xn和x*之间.所以
300 200 100 0 -1 0 0 -2 0 0 -3 0 0 -6 -4 -2
( x) 20 /( x 10)
2
求导数, 得
2 2 ( x) 40x /( x 10)
0 x
2
4
6
显然,在x*附近
| ( x ) | 1 ( x ) 0
利用Lagrange中值定理, 有
| xn1 x* | ( p) ( p) lim lim | ( ) | | ( x*) | n p n | x x* | n n
由Taylor公式
故迭代法p阶收敛.
1阶收敛的数列{xn}的加速收敛算法
yn 2 ( xn 2 xn ) 2 xn 2 xn 2 2 xn1 xn

第四章 非线性方程求根

第四章   非线性方程求根
f ( x* ) f ( x* ) f ( m1) ( x* ) 0, f ( m) ( x* ) 0
4.1 方程求根与二分法
当 f ( x) 为代数多项式时,根据代数基本定理可知, n 次方程在复数域有且只有 n 个根,因此可利用迭代 法求代数方程的根。 二分法 若 f ( x) C[a, b] ,且 f (a) f (b) 0 ,根据连续函数性质 可知 f ( x) 在 [a, b]内至少有一个实根,此时称[a, b]为方程 若 f ( x) 可表示为 f ( x) ( x x* )m g ( x),其中 m 为正整数,且 g ( x* ) 0 。当 m 1 时,称 x* 为单根,若m 1 称 x* 为 m 重 根,或 f ( x) 的 m 重零点。若 x* 是 f ( x) 的 m 重零点,且 g ( x) 充分光滑,则

4.1 方程求根与二分法
这样,我们得到了一个序列 xn ,为确定 xn 的收敛性 我们有如下的定理: 定理:设 f ( x) C[a, b], f (a) f (b) 0, 则二分算法产生的 序列 xn 满足 xn x* (b a) / 2n ,其中 x* [a, b]为方程的根。 证明:因为 [an , bn ] 由[an1 , bn1 ] 对分得到,所以对 n 1 bn1 bn , 否则取 an1 an , bn1 xn , 这样必有 f (an1 ) f (bn1 ) 0 所以 [an1 , bn1 ] 就是新的有根区间,继续此过程,即可得 到结果。 算法:(1)令 x (a b) / 2 (2) 若 f ( x) 或 b x ,则输出 x ,结束 (3) 若 f (a) f ( x) 0 ,则令 a x ,否则令 b x (4) 转向1)

非线性方程求根

非线性方程求根

第二章非线性方程求根线性方程是方程式中仅包含未知量的一次方项和常数项的方程,除此之外的方程都是非线性方程(nonlinear equation). 例如,大家熟知的“一元二次方程”就是一个非线性方程. 多元线性方程组的求解是数值计算领域的一个重要问题,在后续几章将专门讨论. 本章介绍求解非线性方程的数值方法,主要针对实数域,重点是单个非线性方程的求根问题.2.1引言2.1.1非线性方程的解记要求解的单变量非线性方程为f(x)=0(2.1)其中函数f: ℝ→ℝ. 一般而言,非线性方程的解的存在性和个数是很难确定的,它可能无解,也可能有一个或多个解.例2.1 (非线性方程的解):分析下列非线性方程的解是否存在和解的个数.(1) e x+1=0. 此方程无解.(2) e−x−x=0. 此方程有一个解.(3) x2−4sinx=0. 此方程有两个解.(4) x3−6x2+5x=0. 此方程有三个解.(5) cosx=0. 此方程有无穷多个解.在实际问题中,往往要求的是自变量在一定范围内的解,比如限定x∈[a,b]. 函数f一般为连续函数,则可记为f(x)∈C[a,b],C[a,b]表示区间[a,b]上所有连续实函数的集合. 假设在区间[a, b]上方程(2.1)的根为x∗,也称x∗为函数f(x)的零点. 方程的根可能不唯一,而且同一个根x∗也可能是方程(2.1)的多重根.定义2.1:对光滑函数f,若f(x∗)=f′(x∗)=⋯=f(m−1)(x∗)=0,但f(m)(x∗)≠0,则称x∗为方程(2.1)的m重根. 当m=1时,即f(x∗)=0,f′(x∗)≠0时,称x∗为单根.对于多项式函数f(x),若x∗为m重根,则f(x)可因式分解为f(x)=(x−x∗)m g(x)其中g(x)也是多项式函数,且g(x∗)≠0. 很容易验证,f(x∗)=f′(x∗)=⋯=f(m−1)(x∗)=0,但f(m)(x∗)≠0,即多项式方程重根的概念与定义2.1是一致的. 对一般的函数f,x∗是方程(2.1)的重根的几何含义是,函数曲线在x∗处的斜率为0,且在该点处与x轴相交.非线性方程的一个特例是n次多项式方程(n≥2),根据代数基本定理可知,n次方程在复数域上有n个根(m重根计为m个根). 当n=1, 2时,方程的求解方法是大家熟知的. 当n=3, 4时,虽然也有求根公式,但已经很复杂,在实际计算时并不一定适用. 当n≥5时,不存在一般的求根公式,只能借助数值求解方法来求根.2.1.2问题的敏感性根据问题敏感性的定义,这里需要考虑输入数据的扰动对方程的根有多大影响. 要分析敏感性首先应假设问题中的数据如何扰动,一种易于分析的情况是将非线性方程写成:f(x)=y的形式,然后讨论y在0值附近的扰动造成的问题敏感性. 此时,求根问题变成了函数求值问题:y =f (x )的反问题. 若函数值f (x )对输入参数x 不敏感(x 在解x ∗附近变化),则求根问题将很敏感;反之,若函数值对参数值敏感的话,求根则不敏感. 这两种情况如图2-1所示.下面分析y 发生扰动Δy 引起的方程的根的扰动Δx . 由于当x =x ∗时,y =0,我们使用绝对(而不是相对)条件数:cond =|Δx |≈1|| 条件数的大小反映方程求根问题(2.1)的敏感程度,若|f ′(x ∗)|很小,则问题很敏感,是一个病态问题;反之,若|f ′(x ∗)|很大,则问题不敏感.一种特殊情况是f ′(x ∗)=0,即x ∗为重根,此时求根问题很敏感,原问题的微小扰动将造成很大的解误差,甚至改变解的存在性和唯一性(如图2-2,问题的扰动可能使解不存在).对于敏感的非线性方程求根问题,f (x )≈0并不意味着x 很接近x ∗,在后面讨论迭代解法的判停准则时应注意这一点.2.2二分法数值求解非线性方程通常是一个迭代的过程,迭代开始之前要先有个初始的近似解,然后随着迭代步数的增多,近似解越来越接近准确解,当达到一定要求时即停止计算过程. 本节先介绍一种最基本的方法——二分法(interval bisection method).2.2.1 方法原理先介绍有根区间的概念,有根区间就是包含至少一个根的区间,它限定了根存在的范围. 如果能计算出一个非常小的有根区间,那么区间的中点就是一个很好的近似解. 下面的定理给出了有根区间的充分条件.定理2.1:若f (x )∈C[a,b],且f (a )f (b )<0,则区间(a,b )内至少有一实根.这里省略定理证明过程,只给出图2-3作为一个解释.定理2.1给出了一种获得有根区间的方法,即通过看f (a )、f (b )两个值是否符号相反来判断(a, b)是否为有根区图2-1 方程求根问题的敏感性:(a)不敏感;(b)敏感.(a) (b)图2-2 f . 图2-3 若f (a )f (b )<0,则在区间(a,b )内至少有一实根.间. 在实际操作时,可在一个较大的范围内取多个点计算f(x)函数值,从而得到一个或多个有根区间. 另外应注意,根据定理2.1得到的有根区间内不一定只有一个根,这从图2-3也可以看出.二分法的思想很简单,就是每次将有根区间一分为二,得到长度逐次减半的区间序列{(a k,b k)},则区间中点x k=(a k+b k)2⁄就是第k步迭代的近似解. 具体算法如下:算法2.1:二分法输入:a, b, 函数f(x) ; 输出:x.While(b−a)> εdox:= a+(b−a)/2;If sign(f(x))=sign(f(a))thena:= x;Elseb:= x;EndEndx:= a+(b−a)/2.在算法2.1中,sign()表示取符号的函数,而二分迭代结束的条件为有根区间(a, b)的长度小于某个阈值ε. 应注意,浮点运算中几乎不可能出现等于0的情况,所以sign()函数的结果只是正号、或负号.假设二分法得到的有根区间序列为{(a k,b k),k=0,1,⋯},若取解x k=(a k+b k)2⁄,则误差|x k−x∗|<(b k−a k)2⁄=(b0−a0)2k+1⁄,k=0,1,2,⋯.(2.2) 根据公式(2.2)和对解的准确度的要求,也可以事先估算出二分迭代执行的次数,以及相应的计算量. 这里每步迭代的计算量主要是计算一次函数f(x k).例2.2(二分法):求方程f(x)=x4−x−2=0在区间[1.0, 1.5]上的一个实根,要求准确到小数点后第2位(四舍五入后).[解] 首先验证(1.0, 1.5)是否是一个有根区间,易知f(1.0)<0,f(1.5)>0. 所以将(1.0, 1.5)作为二分法的初始区间. 利用(2.2)式我们可以估计,若(b−a)2k+1⁄≤0.5×10−2(2.3) 则|x k−x∗|<0.5×10−2,即结果准确到了小数点后第2位. 代入a=1.0, b=1.5,求解(2.3)得,k≥log20.50.5×10−2−1=5.6取最小的整数值k=6. 只需二分6次,可得到满足精度要求的解. 计算过程中的数据和结果列于表2-1. 从中看出,准确到小数点后两位的解为x=1.356(准确解为1.353210).表2-1 采用二分法求解例2.2的过程和结果2.2.2 算法稳定性和结果准确度算法的稳定性考察的是计算过程中的误差对结果的影响. 对于二分法来说,主要的计算步骤是计算函数值,一般采用双精度浮点数计算函数值的误差很小,而其他计算是少量的加减法,因此不至于对有根区间,以及最终结果的准确度造成多大影响. 另外,在计算过程中解的误差限逐次减半,这也说明二分法是稳定的.在实际的浮点算术体系中,二分法运行结果的准确度不可能随迭代过程一直提高. 首先看一个例子.例 2.3(二分法准确度的极限):编写程序用二分法来求解方程f(x)=x2−2=0,初始区间为[1, 2].下面是用MATLAB语言编写的程序:M =2; a = 1; b= 2; k = 0;while b-a > eps //Matlab中的eps为2倍的机器精度,即2− 2 x = a + (b-a)/2;if x^2 > Mb = x //输出belsea = x //输出aendk = k+1;end这个程序执行了52步就结束了,输出结果如下:b = 1.50000000000000a = 1.25000000000000a = 1.37500000000000b = 1.43750000000000………………a = 1.41421356237309a = 1.41421356237309b = 1.41421356237310b = 1.41421356237310为了看得更清楚,输入MATLAB命令”format hex”,使输出按16进制格式显示,再运行一遍上述程序,最后的四个输出结果为:a = 3ff6a09e667f3bc8a = 3ff6a09e667f3bccb = 3ff6a09e667f3bceb = 3ff6a09e667f3bcd可以看出,最终区间(a, b)的两个端点已经是两个相邻的浮点数,即使让二分过程继续执行下去,区间仍然不会改变(由于a和b平均值的计算结果就是其中的某一个). 也就是说迭代再多的次数,结果的准确度也无法提高了.上述例子说明了二分法结果准确度的极限情况. 一般地,二分法迭代过程中,有根区间缩小的极限情况是使它的端点a k, b k为两个相邻的机器浮点数. 此时,b k−a k=2⌊log2|x∗|⌋∙2εmacℎ其中εmacℎ为机器精度,⌊∙⌋为下取整符号,而2⌊log2|x∗|⌋为x∗的二进制表示中指数的那部分. 在这种极端情况下,解的误差限就是区间长度,即|e(x k)|=|x k−x∗|≤2⌊log2|x∗|⌋∙2εmacℎ .(2.4) 在IEEE双精度浮点数系统下,εmacℎ=2− 3,则|e(x k)|≤2⌊log2|x∗|⌋∙2εmacℎ≤|x∗|∙2− 2≈|x∗|∙2.22×10−16 .根据(2.4)式,也可得到相对误差的上限:|e r(x k)|=|x k−x∗||x∗|≤2εmacℎ .(2.5)这个相对误差限正好是计算机中用浮点数表示实数的误差限(定理1.5)的两倍.公式(2.4)给出了用二分法求解时绝对误差限可能达到的最小值,它说明在准确解较大的情况下,在执行二分法时无论迭代多少次都无法保证解的误差非常小. 综合上述讨论以及公式(2.2),得到如下定理.定理2.2:在实际的浮点算术体系下采用二分法解方程f(x)=0,设初始有根区间为(a, b),则:(1) 结果的误差限最小可达到2⌊log2|x∗|⌋∙2εmacℎ,其中x∗为准确解,相对误差限最小可达2εmacℎ.(2) 若误差阈值ε大于或等于2⌊log2|x∗|⌋∙2εmacℎ,需执行的迭代步数为k=⌈log2(b−a)−1⌉ .(2.6)定理2.2的结论(2)的证明留给读者思考.最后,对二分法说明几点:●二分法是求单变量方程f(x)=0的实根的一种可靠算法,一定能收敛.●二分法解的误差不一定随迭代次数增加一直减小,在实际的有限精度算术体系中,误差限存在最小值.●二分法的缺点是有时不易确定合适的初始有根区间(含两个初始值)、收敛较慢、且无法求解偶数重的根. 因此,实际应用中常将二分法与其他方法结合起来.2.3不动点迭代法二分法的计算效率不够高,在本章后续部分将介绍几种应用广泛、收敛较快的迭代法. 本节介绍不动点迭代法及其收敛性理论,为后续其他方法的讨论建立基础.2.3.1基本原理通过某种等价变换,可将非线性方程(2.1)改写为:x=φ(x)(2.7)其中φ(x)为连续函数. 给定初始值x0后,可构造迭代计算公式:x k+1=φ(x k),(k=0,1,⋯)(2.8) 从而得到近似解序列{x k}. 由于方程(2.1)和(2.7)的等价关系,很容易证明若序列{x k}收敛,其极限必为原方程(2.1)的解x∗. 由于解x∗满足x∗=φ(x∗),称它为函数φ(x)的不动点(fixed point),此方法为求解非线性方程(2.1)的不动点迭代法(fixed-point iterative method).不动点迭代法的求解过程如图2-4所示,而算法描述图2-4 采用不动点迭代法,近似∗在下面给出.算法2.2:基于函数φ(x)的不动点迭代法输入:x 0, 函数f (x ), φ(x) ; 输出:x .k:= 0 ;While |f (x k )|> ε1 或|x k −x k−1|> ε2 dox k+1:=φ(x k ) ;k:= k +1 ;Endx:= x k .其中ε1和ε2为用于判断迭代是否应停止的两个阈值. 关于迭代的判停准则,我们在2.4.3节详细讨论.例 2.4(不动点迭代法):求f (x )=x 4−x −2=0在x 0=1.5附近的根. 以不同的方式得到方程的等价形式,研究相应的不动点迭代法的收敛情况.[解] 将原方程改为等价的(A), (B)两种形式,得到下述两种不动点迭代法.方法(A):将方程改写为x =x 4−2. 得到的迭代法计算公式为:x 0=1.5, x k+1=x k 4−2,(k =0,1,⋯). 计算出结果如下:x 1=1.54−2=3.0625,x 2=2.3753−1=85.9639,… …从上述计算结果看,序列{x k }有趋于无穷大的趋势,迭代法不收敛,无法求出近似解. 方法(B):将方程改写为x =√x +24. 得到的迭代法计算公式为:x 0=1.5, x k+1=√x k +24,(k =0,1,⋯). 计算出结果如下:x 1=√1.5+24=1.3678,x 2=√1.3678+24=1.3547,x 3=√1.3547+24=1.3534,x 4=√1.3534+24=1.3532,x =√1.3532+24=1.3532,从上述计算结果看,x 4和x 前5位有效数字均为1.3532,可认为迭代过程是收敛的,要求的根为1.3532.通过例2.4可以看出,用不同的方式改造原方程,可得到多种不动点迭代法计算过程,其收敛性质也是不同的. 因此,判断一个不动点迭代法是否收敛至关重要.2.3.2全局收敛的充分条件下面的定理给出一个函数存在唯一不动点的充分条件.定理2.3:设φ(x)∈C[a,b],若满足如下两个条件:(1)对任意x ∈[a,b],有a ≤φ(x)≤b ,(2)存在正常数L ∈(0,1),使对任意x 1,x 2∈[a,b],|φ(x 1)−φ(x 2)|≤L |x 1−x 2|则φ(x)在[a,b]上存在不动点,且不动点是唯一的.在证明定理之前,先理解一下定理中两个条件的含义. 首先,采用不动点迭代法的计算公式为x k+1=φ(x k ), k =0, 1, 2, …,因此要使后续迭代步的计算合法,必须要求φ(x k )的值在函数的定义域内,(1)的条件保证了这一点. 其次,(2)中新加的条件表明,φ(x)曲线上任两点连线斜率的绝对值不超过L ,当两点非常靠近时它就是导数,因此φ(x)曲线上任意点的切线斜率的绝对值都小于1,这说明φ(x)曲线变化很平缓,在曲线上任意点处的斜率都比y =x 和y=−x两条直线小. 这个条件也称为L<1的李普希兹(Lipschitz)条件,L为李普希兹系数. [证明] 先证明不动点的存在性,分两种情况:1). 若φ(a)=a,或φ(b)=b,则a或b为不动点;2). 若φ(a)≠a且φ(b)≠b,则φ(a)>a,φ(b)<b. 令f(x)=φ(x)−x,则f(x)为连续函数,且f(a)>0,f(b)<0.根据连续函数性质,必有x∗∈(a,b),使f(x∗)=0,即φ(x∗)=x∗,x∗为不动点.再证明唯一性,采用反证法. 假设有两个不同的不动点x1∗,x2∗∈[a,b],它们满足φ(x1∗)=x1∗,φ(x2∗)=x2∗,x1∗≠x2∗ .根据(2)中的条件推出,|x1∗−x2∗|=|φ(x1∗)−φ(x2∗)|≤L|x1∗−x2∗|<|x1∗−x2∗| .产生矛盾!所以假设x1∗≠x2∗不成立,不动点是唯一的.应说明的是,上述证明不动点的存在性只使用了条件(1). 事实上,通过画函数曲线图的方式也可以形象地说明不动点的存在性,这一点留给感兴趣的读者思考.下面的定理给出不动点迭代法收敛的充分条件.定理2.4:设φ(x)∈C[a,b]满足定理2.3的两个条件,则对于任意初值x0∈[a,b],由不动点迭代法得到的序列{x k}收敛到φ(x)的不动点x∗,并有误差估计:|x k−x∗|≤L k1−L|x1−x0| .[证明] 首先注意到定理条件保证了不动点唯一存在,而且条件(1)保证了不动点迭代法可执行下去,从而得到序列{x k}. 下面证明序列{x k}收敛,其思路是考虑误差序列,证明其极限为0.|x k−x∗|=|φ(x k−1)−φ(x∗)|≤L|x k−1−x∗|≤⋯≤L k|x0−x∗|由于L为小于1的正常数,则lim k→∞L k|x0−x∗|=0,⟹limk→∞|x k−x∗|=0, ⟹limk→∞x k=x∗.这证明了不动点迭代法是收敛的. 剩下|x k−x∗|≤L k1−L|x1−x0|的证明,留给读者思考.定理2.4为判断不动点迭代法的收敛性提供了依据,这种收敛不依赖于初值x0的选取,因此称为全局收敛性. 为了方便应用,也可以将定理2.3, 2.4中的第2个条件替换为:对任意x∈[a,b],有|φ′(x)|≤L<1,其中L为常数,得到便于使用的定理2.5.定理2.5:设φ(x)∈C[a,b],且满足如下两个条件:(1)对任意x∈[a,b],有a≤φ(x)≤b;(2)存在正常数L<1,使对任意x∈[a,b],有|φ′(x)|≤L<1.则对于任意初值x0∈[a,b],由不动点迭代法得到的序列{x k}收敛到φ(x)的不动点x∗,并有误差估计:|x k−x∗|≤L k1−L|x1−x0| .此定理可看成定理2.4的推论,其证明留给读者思考.例2.5(不动点迭代法的收敛性):对于求f(x)=x4−x−2=0在x0=1.5附近的根的问题,使用定理2.5考察例2.4中两种方法的全局收敛性.[解]在区间[1, 2]上考察如下两种不动点迭代法的收敛性:方法(A):x k+1=x k4−2, (k=0,1,⋯).方法(B):x k+1=√x k+24, (k=0,1,⋯)很容易看出,方法(B)符合定理中的条件(1),而φ′(x)=14(x+2)−3/4,也符合条件(2),因此方法(B)具有全局收敛性. 而对于方法(A),它不符合定理中的条件(1),因此无法根据定理2.5说明其具有全局收敛性.关于全局收敛性再说明两点:●定理2.4, 2.5给出的都是不动点迭代法全局收敛的“充分条件”,也就是说,对一些满足条件的方法可以证明其具有全局收敛性,但根据它们并不说明某个方法不具有全局收敛性.●全局收敛性要求初始值x0为定义域内任意值时不动点迭代法都收敛,这常常是很难达到的要求.2.3.3局部收敛性不同于全局收敛性,下面给出重要的局部收敛性的概念.定义2.2:设函数φ(x)存在不动点x∗,若存在x∗的某个邻域D: [x∗−δ,x∗+δ],对于任意初值x0∈D,迭代法x k+1=φ(x k)产生的解序列{x k}收敛到x∗,则称迭代法局部收敛.这个定义中的邻域是以x∗为中心点的一个对称区间,局部收敛性的定义要求的是存在这样一个邻域,而不关心它的大小. 下面的定理给出迭代法局部收敛的充分条件.定理2.6:设x∗为函数φ(x)的不动点,若φ′(x)在x∗的某个邻域上连续,且|φ′(x∗)|<1,则不动点迭代法x k+1=φ(x k)局部收敛.[证明] 因为φ′(x)在x=x∗附近连续且|φ′(x∗)|<1,则存在x∗的某个邻域D,使得对于任意. 显然L<1, 的xϵD, |φ′(x)|≤L, 其中L是某个介于|φ′(x∗)|和1之间的数, 例如L=|φ′(x∗)|+12即满足定理2.5的条件(2). 另外,对∀x∈D,φ(x)−x∗=φ(x)−φ(x∗)=φ′(ξ)(x−x∗), ξ∈D, ⟹|φ(x)−x∗|≤L|x−x∗|<|x−x∗|, 即φ(x)∈D,满足定理2.5的条件(1).因此,根据定理2.5,此迭代法对区间D内的任意初值都收敛,根据定义2.2知,此迭代法局部收敛.对比定理2.6和定理2.4、2.5可以看出,定理2.6的条件较为宽松,它只需要考察函数φ(x)在x∗这一点上是否满足要求. 因此,不动点迭代法较容易具有局部收敛性,对局部收敛的判断也相对简单.最后说明一点,定理2.5说明李普希兹系数L越小迭代收敛的速度越快,而定理2.6的证明过程说明了L与|φ′(x∗)|的关系. 因此,若|φ′(x∗)|越小,迭代收敛的速度就越快.2.3.4稳定性与收敛阶与二分法类似,不动点迭代法的每步计算都可以通过判停准则(包括考察f(x k)是否接近0)来评估解的准确度,因此解的误差容易被及时发现和纠正. 只要迭代过程是收敛的,误差将随迭代步的增加逐渐趋于零,而不会像某些算法的舍入误差会随迭代过程逐渐累积. 因此收敛的不动点迭代法总是稳定的. 在本章后续算法的讨论中,我们将不再关心稳定性,而将重点放在收敛性的讨论上.对于收敛的迭代法,其收敛速度的快慢也很重要,它关系到达到特定的准确度需要多少步迭代,也就是需要多少计算量. 下面先看一个例子,然后给出收敛阶的概念用于衡量迭代收敛的速度.例2.6(迭代收敛速度):假设有(1)~(3)三个迭代求解过程,其迭代解的误差|e(x k)|=|x k−x∗|随迭代步变化情况分别为:(1) 10-2, 10-3, 10-4, 10-5, ……。

第7章 非线性方程求根

第7章 非线性方程求根

k 且区间长度逐次减半, bk ak (b a) 2 .
非线性方程求根的二分法
二分法基本步骤: 随着k的增大,有根区间长度趋于零,区间端点向 * lim a lim b lim x x . 一点收缩, k k k k k k 显然x*即为f(x)=0的根。而x0, x1, …,xk,…为近似根 * 序列。设要求精度为ε ,即 x xk ,

x1 x* ( )(x0 x* ) M ( x0 x* ), x2 ( x1 ), x2 x M ( x1 x ).
* *
加速迭代法
消去M得
x1 x* x0 x* , * * x2 x x1 x
2
2 x x x ( x x ) 1 0 x* x1 0 2 1 x0 , x2 2 x1 x0 x0 2 x1 x2
斯蒂芬森迭代法
结合埃特金加速法和不动点迭代法形成斯 蒂芬森迭代法:

yk ( xk ), z k ( yk ), ( y k xk ) xk 1 xk z k 2 y k xk
2
(k 0,1, ).
斯蒂芬森迭代法几何意义
定义x点关于方程 x ( x) 的误差为: ( x) ( x) x. * * * * ( x ) ( x ) x 0. 则该方程的根x 的误差
非线性方程的迭代法求根
基本概念 非线性方程f(x)=0的根(解) x*,也称为非线性 函数f(x)的零点,f(x*)=0。 f(x)=0的m重根定义:f(x)=(x-x*)mg(x), g(x*)≠0,则称x*为f(x)=0的m重根,或f(x)的 m重零点。 m重根的判定条件: x*为f(x)=0的m重根当 且仅当 * * ( m1) * ( m) * f (x ) f (x ) f ( x ) 0; f ( x ) 0.

第2章非线性方程求根

第2章非线性方程求根

y
y=x
p1
x (x)
p0

y
x (x)
p0
y=x
p1
x
x0
x1
x
x0 x1
说明在根 附近,曲线的切线不能太陡! 17
例2.2.1 求方程 f (x) x3 x 1 0 在x0 1.5附近的根.
解 (1) 将方程改写为 x 3 x 1
由此建立迭代公式 xk1 3 xk 1 得
k0 1
(Lp1
Lp2
...1) |
xk 1
xk
|
1 1 L
|
xk 1
xk
|,
令p ,得
|
xk
|
1 1 L
|
xk 1
xk
|.
因而可通过检查 | xk1 xk | 来判断迭代过程应否终止。
24
例2.2.3 求 f (x) 9x2 sin x 1 0 在[0,1]内的一个根。
解 由于 f (0) 1 0,
(bk 1
ak1)
...
1 2k
(b
a).
因此,当
k
足够大时,我们可以用
xk
ak
bk 2
作为函数
f (x)的一个根 的近似值。
此时有误差估计:
xk
bk ak 2
ba. 2k 1
常用来估计k的值
9
四、算法的优点与缺点
优点:计算简单且必收敛,是一种可靠的算法;对函数性质要 求低,只要求函数f(x)连续就可以了。
(2). 若 f (x0 ) f (a) 0,则令a1 a,b1 x0; 若 f (x0 ) f (b) 0,则令a1 x0,b1 b.

第7章非线性方程求根

第7章非线性方程求根

第7章 非线性方程求根本章主要内容:1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法.重点、难点一、区间二分法区间二分法是求方程f(x)=0根的近似值的常用方法。

基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二;再利用有根区间的判别方法判断那一个区间是有根区间;重复上述步骤,直到小区间端点差的绝对值小于等于精度要求的数值,则用将上一区间的分半值作为方程的根的近似值。

区间二分法的计算步骤如下: 1.计算区间端点的函数值f(a) , f(b)(不妨设f(a)<0,f(b)>0);确定初始有根区间[a,b]. 2.二分有根区间[a,b],并计算)2(ba f + 取21b a x +=3.判断: 若0)(1=x f ,则方程的根为1x x =*;若 0)(1>x f ,则有根区间为[]1,x a x ∈*;令[]],[,111b a x a =若 0)(1<x f ,则有根区间为[]b x x ,1∈*;令 []],[,111b a b x =4. 如果│b-a │<ε(ε为误差限),则方程的根为2ba x +=*;否则转向步骤2,继续二分有根区间[a 1,b 1],并计算中点值,继续有根区间的判断,直到满足精度要求为止,即│b n -a n │<ε二分次数的确定:如果给定误差限ε,则需要二分的次数可由公式12ln ln )ln(---≥εa b n 确定应二分的次数。

例1 用区间二分法求方程0353=+-x x 在某区间内实根的近似值(精确到0.001)【思路】参见上述区间二分法的计算步骤解 ∵f(1.8)=-0.168<0, f(1.9)=0.359>0 ∴f(x)在区间[1.8 ,1.9]内有一个根。

由公式 644.512ln 001.0ln 1.0ln 12ln ln )ln(=--=---≥εa b n取n=6, 计算结果列表如下:则方程在区间[1.8,1.9]内所求近似值为x *≈ x = 1.8328125区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。

5非线性方程的求根

5非线性方程的求根

(3)迭代25次后 (4)迭代9次后 (5)迭代3次后
x3 1.36523001 若采用二分法则有 x25 1.364990235 , x27 1.36523001
迭代格式构造的不同,可能会出现发散或无意义的情形,即使 是收敛的,收敛的速度也有快慢之分。 9
单点迭代法
计算第k+1个近似值 xk 1 时仅用到第k个点处 的信息,如(5.1) 多点迭代法 计算 xk 1 时需要用到前面P个点处的信息 一般形式为
§2
迭代法
x g ( x)
设方程 f ( x) 0 可以转化为等价的形式 从某个初值
xk 1 g ( xk ) k 0,1, 2, (5.1) 得到序列 {xk } 。当 g ( x) 连续,且序列 {xk } 收敛时,有
lim xk 1 lim g ( xk ) g (lim xk )
k k k
x0
出发令

即序列 {xk } 的极限 是方程 f ( x) 0 的根。 称(5.1)为迭代格式,函数 g ( x) 为迭代函数。构造迭代 格式的方法称为迭代法。 7
g ( )
例5.2 构造不同的迭代格式,求方程 x3 4 x 2 10 0 在(1,2)内的近似根。
当 n 充分大时就有 误差估计式为
k 1, 2, , n.
1 (an bn ) 2
an bn b a | | n 1 2 2
3
算法(二分法)
输入 f ( x ),区间 [ a, b] ,精度 0,最大的迭代次数N 1.对 2. 3. 4.若
k 1, 2,, N ,
对迭代方程 x g ( x) ,若迭代函数 g ( x) 满足

第7章 非线性方程求根

第7章 非线性方程求根

如果点列﹛Pk﹜趋向于点P*,则相应的迭代值xk收敛到 所求根x*.
例3 求x3 x 1 0在1.5附近的根x * . 解:()x0 1.5,xk 1 3 xk 1, (k 0,1,2,). 1
k 0 1 2 3 4 5 6 7 xk 1.5 1.35721 1.33086 1.32588 1.32494 1.32476 1.32473 1.32472
| xk x* | (bk ak ) / 2 (b a) / 2k 1. (1.3)
1 x xk k 1 (b a ) 2

(1.3)
对于确定的精度ε,从式(1.3)易求得需要二等分
的次数k。
二分法具有简单和易操作的优点。其计算步骤如 下,框图如图7.2所示。
(1.1)
2. 超越方程, 如 : x ex 0.
如果f ( x)可以分解为 f ( x) ( x x*)m g ( x), 其中0 | g ( x*) | , m为正整数. 则称x * 为f ( x)的m重零点.
此时 f ( x*) f ( x*) f ( m 1) ( x*) 0, f ( m) ( x*) 0.

设f(x)为定义在某区间上的连续函数, 方程(1.1)存在实根。虽然方程(1.1)的根的 分布范围一般比较复杂,但我们不难将函 数f(x)的定义域分成若干个只含一个实根 的区间。 • 例如考虑方程 • x2-2x-1=0 • 由图7.1所示,该方程的一个负实根在-1 和0之间,另一个正实根在2和3之间。
虽然迭代法的基本思想很简单,但效果并不总是令人 满意的。对于上例,若按方程写成另一种等价形式 x=x3-1 建立迭代公式 xk+1=x3k-1, k=0,1,2,…

第七章非线性方程求根2014-10

第七章非线性方程求根2014-10

3
xk 1
(k 0,1, 2,
)
不妨取x0 =1.5 迭代序列 xk k 0 。

实际计算时如果保留6 位有效数字,则由计算结果得
x7 x8 于是可以认为近似解 x7 x *
计算结果见下表:
Hale Waihona Puke k 0时x0 1.5迭代次数 k 1 2 3 4 5 6 7 8 迭代解 xk 1.35721 1.33086 1.32588 1.32494 1.32476 1.32473 1.32472 1.32472
设x1* x2*都是方程x ( x)在区间 [a, b]上的根, 由条件(2)
| x1 * x2 *|| ( x1*) ( x2 *) |
L | x1 * x2 *|
0 L 1
| x1 * x2 *|
引出矛盾 x1* x2* , 即区间 [ a, b] 内只能有唯一的实根。
对上述同一问题改写为另一种等价形式: x x3 1 从而可建立迭代格式如下: 迭代初值仍取 x0 1.5 迭代次数 k 迭代解 xk
xk 1 ( xk )
1 2 3 4
2.375 12.39 152.52 3547972.6
继续迭代下去计算结果会越来越大,不可能趋于某个 极限,这种不收敛的迭代过程称为发散。
ab , b) 则 x1 ( 2
即为所求根否则,
反复执行步骤(2)及步骤(3),直到区间 [ a, b] 长度小于容许误差,此时的区间中点 a b x 2 x 即为所求的近似根。
这样不断将区间分半,得到一系列区间
[a, b] [a1, b1 ]
[an , bn ]

非线性方程求根

非线性方程求根

实际中,用解方程组的形式
J ( X k )( X k 1 X k ) F ( X k )
迭代法的基本步骤如下:
f ( x) 0 x ( x ) 2、取合适的初值,产生迭代序列 x0 , xi 1 ( xi )
1、给出方程的局部等价形式 3、求极限
x* lim xn 易知,该值为方程的根 n
一定收敛吗?
y p1 p0
y=x y=g(x)
y y=g(x) p0
什么时候停止?
a
x a1 x* x2 b b
xk 1 xk ε1

f ( x ) ε2
算法
While(|a-b|>eps) x=(a+b)/2 f(x) 若(|f(x)|<eps) x为解 若f(x)*f(b)<0 修正区间为[x,b] 若f(a)*f(x)<0 修正区间为[a,x] End while
若 f ' ( x0 ) 0 ,则有
y
记为
f ( x0 ) x x0 f ' ( x0 )
类似,我们可以得到
x1
x* x
x0
f ( x1 ) x2 x1 f ' ( x1 )
这样一直下去,我们可以得到迭代序列
xk 1 xk
f ( xk ) f ' ( xk )
Newton迭代的等价方程为:
非线性方程求根
非线性科学是当今科学发展的一个重要研究方向,而非线性方程的求根也成了一个 不可缺的内容。但是,非线性方程的求根非常复杂。 通常非线性方程的根的情况非常复杂:
sin( 2 x) y 1 y 2
无穷组解

第7章非线性方程求根(数值分析)

第7章非线性方程求根(数值分析)
第7章 非线性方程求根
第一节 方程求根与二分法
本章主要讨论单变量的非线性方程求根问题
1
非线性方程根的不同情况
设非线性方程为: f (x)=0 当f (x)为多项式时,非线性方程是
一种特殊形式的方程,即多项式方程,
也叫n 次代数方程 。
f ( x) a0 a1 x an xn an 0
若x*使得f (x*)=0,则称x*为方程f (x)=0的根 或函数 f (x)的零点。
6
非线性方程的有根区间
例:判断方程 f(x)=x4-4x3+1=0 有几
个实根,有根区间是什么?
由 f (x)= 4 x2(x-3)=0 得驻点 x1=0, x2=3。
因此将实轴分为三个区间来讨论: (-∞,0), (0,3),(3, +∞)
f (x) 在此三区间的符号分别为“ -”、“ - ”、“+”
11
1.求方程 的有根区间.
解 根据有根区间定义,对方程的根进行搜索计算, 结果如下表:
方程的三个有根区间为[1,2],[3,4],[5,6].
12
二分法
应用二分法的前提:已经确定了非
线性方程的有根区间[a,b]。
设方程 f (x)=0 在区间[a,b ]内有且只有一 个实根 x* 。
即 f (x) 满足条件:
7
非线性方程的有根区间
所以 f(x) 在(-∞,0), (0,3),(3, +∞)
区间上分别单调减、单调减、单调增。
分析计算可得:
f (–∞)>0, f (0)=1>0, f (3)=-26<0, f (+∞)>0
可见 f(x)仅有两个实根, 分别位于(0, 3) , (3,+∞)

非线性方程求根

非线性方程求根

实验七 非线性方程求根实验7.1(迭代法、初始值与收敛性)实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。

问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。

实验内容:考虑一个简单的代数方程012=--x x针对上述方程,可以构造多种迭代法,如)1.7(121-=+n n x x)2.7(111nn x x +=+)3.7(11+=+n n x x在实轴上取初始值x 0,请分别用迭代(7.1)-(7.3)作实验,记录各算法的迭代过程。

实验要求:(1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。

请自选设计一种比较形象的记录方式(如利用MATLAB 的图形功能),分析三种迭代法的收敛性与初值选取的关系。

(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)线性方程组迭代法的收敛性是不依赖初始值选取的。

比较线性与非线性问题迭代的差异,有何结论和问题。

实验过程: 第一问: 针对迭代函数11n n x x +=-程序disp(' 请输入初始迭代值为') x=[]; a=[];b=[];x(1)=input('');for i=2:30x(i)=x(i-1)^2-1;endfor i=2:30a(i-1)=x(i-1);b(i)=x(i);endabi=1:30;plot(i,x)title('x(n+1)=x(n)^2-1')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:针对迭代函数111n nx x +=+disp('请输入迭代的初始值') float x=[]; a=[]; b=[];x(1)=input(''); for i=2:30x(i)=1+1/x(i-1); end for i=2:30 a(i-1)=x(i-1); b(i)=x(i); end a b i=1:30; plot(i,x)title('x(n+1)=x(n)^2-1')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:每次的迭代函数值为:针对迭代函数1n x +=disp('请输入迭代的初始值') double x=[]; a=[]; b=[];x(1)=input(''); for i=2:30x(i)=sqrt(x(i-1)+1); end for i=2:30 a(i-1)=x(i-1); b(i)=x(i); end a b i=1:30; plot(i,x)title('x(n+1)=sqrt(x(n)+1)')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:讨论由上面的比较结果可以看到,无论取什么初始值,迭代法211n n x x +=-所得到的解是发散的,并且随着初始值选取的不同,发散的程度将会呈现指数型的增长,表明这种迭代法是没有意义的。

完整word版,割线法求解非线性方程

完整word版,割线法求解非线性方程

割线法求解非线性方程要求:对于给定的非线性方程以及初值可求解方程一、 割线法求解非线性方程的数学理论给定非线性方程f(x)=0,选定曲线y=f(x)上的两个点p0(x0,f(x0)).p1(x1,f(x1)),过着两点作一条直线10p p ,则直线方程y=f(x1)+f(x1)-f(x0)(x-x1)/(x1-x0)。

当f(x0)!=f(x1)时,直线10p p 与x 轴的交点为x2=x1-f(x1)(x1-x0)/f(x1)-f(x0)时,这时用x2作为曲线y=f(x)与x 轴交点的近似值,显然)*0,*1(min *2x x x x x x --<-这里x*为f(x)=0的精确解,然后用p1(x1,f(x)),p2(x2,f(x2))构造直线21p p ,重复上述步骤,就可以求出x3。

如此进行下去,就可得到迭代格式x(k+1)=xk-f(xk)(xk-x(k-1))/f(xk)-f(x(k-1)) (k=0,1,…) (1)迭代格式(1)实际上就是用均差f(xk)-f(x(k-1))/(xk)-x(k-1)取代牛顿公式x(k+1)=xk-f(xk)/)('k x f 中的微商)('x f 的结果,所以割线法可以被看成牛顿法的一种变形。

二、 割线法求解非线性方程算法和流程图输入求根区间,搜索步长和精度,利用公式(1)迭代,得到值后计算精度,如果精度没有达到继续迭代,达到精度后输出结果。

三、 割线法求解非线性方程的Matlab 实现function[p1,err,k,y]=secant(f,p0,p1delta,max1)%f 是给定的非线性函数%p0,p1为初始值%delta为给定误差界%max1迭代次数的上限%p1为所求得的方程的近似解%err为p1-p0的绝对值%k为所需要的迭代次数%y=f(p1)k=0,p0,p1,feval(`f`,p0),feval(`f`,p(0))for k=1:max1p2=p1-feval(`f`,p1)*(p1-p0)/(feval(`f`,p1)-feval(`f`,p0))err=abs(p2-p1);p0=p1;p1=p2;k,p1,err,y=feval(`f`,p1)if(err<delta|(y==0),break,endend四、割线法求解非线性方程的算例实现例题解非线性方程x^3-x+2=0,给定处置为p0=1.5,p=-1.52,误差界为10^-6。

实验5 非线性方程求根

实验5 非线性方程求根

实验5 非线性方程求根一、实验目的:掌握二分法、牛顿法、弦截法求非线性方程的根。

二、实验内容:1、 用递推算法02x =1122n n nx x x +⎛⎫=+ ⎪⎝⎭(1)3x 的有效数字是几位?5(2)4x 的有效数字是否为3x 的2倍?若是,这是否表明该算法具有较高的计算效率?否(3)若近似值的误差精度要求为810-x(1)=2;for n=1:100x(n+1)=1/2*(x(n)+2/x(n));endx_3=x(4)x_4=x(5)x(1)=2;format longfor n=1:1000x(n+1)=1/2*(x(n)+2/x(n));if abs(x(n+1)-x(n))<10^-8break;endendx(n+1)2、 对于给定方程()310f x x x =--= (1) 用二分法计算它在(0,2)之间的近似根,要求精度到小数点后四位;(n=0,1,2-----------)(2)给出每次两分后的有根区间(3)画出每次两分的中点,直观描述两分法原理x=-1:0.0001:3;y=x.^3-x-1;a=0;b=2;plot(x,y);hold on;text(2.3,9,'\rightarrowf=x^3-x-1');plot([-1 3],[0 0],'r-');hold on;eps=1.0e-4;f1=subs(sym(f),findsym(sym(f)),a); %两端点的函数值f2=subs(sym(f),findsym(sym(f)),b);plot([0 0],[f1 0],'r-');hold on;pause(1);plot([2 2],[f2 0],'r-');hold on;pause(1);if (f1==0)root=a;endif (f2==0)root=b;endif (f1*f2>0)disp('两端点函数值乘积大于0!');return; %直接退出程序elseroot=FindRoots(f,a,b,eps) %调用求解子程序endfunction r=FindRoots(f,a,b,eps)f_1=subs(sym(f),findsym(sym(f)),a); %两端点的函数值f_2=subs(sym(f),findsym(sym(f)),b);mf=subs(sym(f),findsym(sym(f)),(a+b)/2); %中点函数值if(f_1*mf>0)t=(a+b)/2;fprintf('[%10.4f,%10.4f]\n',t,b);f_4=subs(sym(f),findsym(sym(f)),t);plot([t t],[0 f_4],'r-');hold on;pause(1);r=FindRoots(f,t,b,eps); %右递归elseif(f_1*mf==0)r=(a+b)/2;elseif(abs(b-a)<=eps)r=(b+3*a)/4;elses=(a+b)/2;fprintf('[%10.4f,%10.4f]\n',a,s);f_3=subs(sym(f),findsym(sym(f)),s);plot([s s],[0 f_3 ],'r-');hold on;pause(1);r=FindRoots(f,a,s,eps); %左递归endendendfunction f=f()syms m;f=m^3-m-1;[ 1.0000, 2.0000][ 1.0000, 1.5000][ 1.2500, 1.5000][ 1.2500, 1.3750][ 1.3125, 1.3750][ 1.3125, 1.3438][ 1.3125, 1.3281][ 1.3203, 1.3281][ 1.3242, 1.3281][ 1.3242, 1.3262][ 1.3242, 1.3252][ 1.3247, 1.3252][ 1.3247, 1.3250][ 1.3247, 1.3248][ 1.3247, 1.3248]root =1.3247-1-0.500.51 1.52 2.53-505101520253、 设方程为 ()32210200f x x x x =++-= (1) 给出用牛顿法求方程根的程序(2) 该迭代的收敛性与初值1x 选取是否有关,通过数值实验来回答这个问题;(3) 该迭代的快慢与与初值1x 选取是否有关,通过数值实验来回答这个问题;a=0;b=2;eps=1.0e-4;f1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);if(f1==0)root=a;endif(f2==0)root=b;endif(f1*f2>0)disp('两端点函数值乘积大于0!');return;elsetol=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;elseroot=b-fb/dfb;endwhile(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);endendrootfunction f=f()syms x;f=x^3+2*x^2+10*x-20;2 是 f(x)=arctan(x) 当x=2的时候发散;当x=1的时候收敛。

第2章非线性方程求根

第2章非线性方程求根

迭代收敛的加速方法
对于收敛的迭代过程,只要迭代足够多次,就可以 使结果达到任意的精度。 但是 收敛缓慢 计算量变大 x1 ( x0 ), x* ( x* )
* * (( L x ) x1 x* ( x0 ) ( x* ) x )( x x 0 0
§ 二分法 /* Bisection Method */
原理:若 f C[a, b],且 f (a) ·f (b) < 0,则 f 在 (a, b) 上必 有一根。
When to stop?
a a x10
x*
x1 b b b1
若取区间[an , bn]的中点 1 xn (an bn ) 2 作为x*的近似值,则有下述误差估计式
定理
考虑方程 x = g(x), g(x)C[a, b], 若
( I ) 当 x[a, b] 时, g(x)[a, b]; ( II ) 0 L < 1 使得 | g’(x) | L < 1 对 x[a, b] 成立。 则任取 x0[a, b],由 xk+1 = g(xk) 得到的序列 x k k 0 收 敛于g(x) 在[a, b]上的唯一不动点。并且有误差估计式:
如果仅取6位数字,那么结果 x7与 x8完全相同, 这时可以认为 x7实际上已满足方程,即为所求的根.
表2 k 0 1 2 3 4 xk 1.5 1.35721 1.33086 1.32588 1.32494 k 5 6 7 8 xk 1.32476 1.32473 1.32472 1.32472
但若采用方程的另一种等价形式 建立迭代公式
二分法的优点是算法简单,且总是收敛的,缺 点是收敛的太慢,故一般不单独将其用于求根,只 是用其为根求得一个较好的近似值.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7章 非线性方程求根本章主要内容:1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法.重点、难点一、区间二分法区间二分法是求方程f(x)=0根的近似值的常用方法。

基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二;再利用有根区间的判别方法判断那一个区间是有根区间;重复上述步骤,直到小区间端点差的绝对值小于等于精度要求的数值,则用将上一区间的分半值作为方程的根的近似值。

区间二分法的计算步骤如下: 1.计算区间端点的函数值f(a) , f(b)(不妨设f(a)<0,f(b)>0);确定初始有根区间[a,b]. 2.二分有根区间[a,b],并计算)2(ba f + 取21b a x +=3.判断: 若0)(1=x f ,则方程的根为1x x =*;若 0)(1>x f ,则有根区间为[]1,x a x ∈*;令[]],[,111b a x a =若 0)(1<x f ,则有根区间为[]b x x ,1∈*;令 []],[,111b a b x =4. 如果│b-a │<ε(ε为误差限),则方程的根为2ba x +=*;否则转向步骤2,继续二分有根区间[a 1,b 1],并计算中点值,继续有根区间的判断,直到满足精度要求为止,即│b n -a n │<ε二分次数的确定:如果给定误差限ε,则需要二分的次数可由公式12ln ln )ln(---≥εa b n 确定应二分的次数。

例1 用区间二分法求方程0353=+-x x 在某区间内实根的近似值(精确到0.001)【思路】参见上述区间二分法的计算步骤解 ∵f(1.8)=-0.168<0, f(1.9)=0.359>0 ∴f(x)在区间[1.8 ,1.9]内有一个根。

由公式 644.512ln 001.0ln 1.0ln 12ln ln )ln(=--=---≥εa b n取n=6, 计算结果列表如下:则方程在区间[1.8,1.9]内所求近似值为x *≈ x = 1.8328125区间二分法的优点是计算程序简单,只要f (x )在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。

迭代序列收敛阶的概念设迭代序列{}n x 收敛于*x ,如果存在实数1≥p 与正常数c ,使得c xx x x pn n n =--**+∞→1lim,则称序列{}n x 是p 阶收敛于*x 。

特别地,当1=p 时,称序列{}n x 为线性(一次)收敛; {}n x 为线性收敛时,必须要求1<c 。

当2=p 时,称序列{}n x 为平方(二次)收敛; 当21<<p 时,称序列{}n x 为超线性收敛;收敛阶p 越大,则序列{}n x 与*x 的误差缩减越快,也就是序列{}n x 收敛越快。

二、切线法(牛顿法)1. 切线法的基本思想:假设方程f(x)=0在区间[a,b]上有唯一根x *,过曲线y= f(x)上的一点(x 0,f(x 0)),作曲线的切线,用此切线与x 轴的交点的横坐标x 1作为方程的根x *的新的近似值, 再过点(x 1,f(x 1)),作曲线的切线,则又得到新的近似值,按此方法进行迭代计算,直到满足精度要求为止。

切线法(牛顿法)的迭代公式为 ,...)1,0()()(1='-=+n x f x f x x n n n n2.切线法的收敛性我们利用定理(7.1)来判断切线法的收敛性。

定理(7.1)还给出了一个初始值x 0的选择方法,定理7.1. 设f (x )在[a ,b ]上存在二阶连续导数,且满足条件 ⑴ f(a )f (b)< 0;⑵f /(x ) 在[a ,b ]上不等于零 (3)f //(x ) 在[a ,b ]上不变号则对任意初值x 0∈[a ,b ] ,只要满足f (x 0) f //(x )≥0. 则由切线法迭代公式得到的近似根序列{}n x 平方收敛于方程f (x )=0在区间[a ,b ]的唯一根x *。

2. 切线法的计算步骤:先判断有根区间[a,b],然后选择初始值x 0(一般地,若f //(x)>0,则选择区间的右端点;若f //(x)< 0,则选择区间的左端点),再建立迭代公式进行计算(列表计算)。

例2 用切线法求例1中方程在[1,2]内根的近似值,精确到0.000001【思路】根据f(x 0)f //(x)>0在有根区间上选择初始值x 0,代入迭代公式进行计算解 5332)()(2012)2(,01)2(6)(53)(35)(23111023--='-==∴>=''>==''-='+-=---n n n n n n x x x f x f x x x f f xx f x x f x x x f 代入迭代公式取初始值 计算得834243185.1000001.0000000319.034≈*∴<=-x x x例3 证明 计算3a 的切线法迭代公式为 )2(3121nn n x ax x +=+ (n=0,1,…) 解 因为计算3a 等同于求方程03=-a x 的根,将233)(,)(x x f a x x f ='-=,代入切线法迭代公式得: ,1,0,)(3132231=+=--=+n x a x x a x x x nn n n n n 三 、弦位法1. 弦位法的基本思想:假设方程f(x)=0在区间[a,b]上有唯一根x *,在区间[a,b]内的曲线y= f(x)上任取两点作弦,用此弦与x 轴的交点横坐标作为方程根的近似值。

按此方法进行迭代计算,直到满足精度要求为止。

弦位法分为单点弦法和双点弦法。

2.单点弦法 建立弦的迭代公式时,固定其中一个点,而另一个点变动的迭代求根方法。

单点弦法的迭代公式,...)1,0()()()(1=---=+n x f x f c f x c x x n n nn n(1)单点弦法的收敛性利用定理7.2判断其收敛性。

单点弦法收敛所满足条件和切线法的收敛条件相同,不同的是单点弦法迭代公式所产生的序列是线性收敛于f(x)=0在区间[a,b]上有唯一根x *。

我们计算时应注意,在选择固定点c 时,也要求满足条件0)()f(x 0.(x )f f(c)0≤''>''x f 。

(2)单点弦法的计算步骤同切线法类似。

3.双点弦法 建立弦的迭代公式时,两个点都变动的迭代求根方法。

双点弦法的迭代公式为: ,...)1,0()()()(111=---=--+n x f x f x f x x x x n n n n n n n(1)双点弦法收敛性利用定理(7.3)判断。

f(x)在[a,b]上满足的条件为: ⑴ f(a)f(b)< 0; ⑵f /(x)≠0⑶KR ≤ρ<1,其中K=M 2/2m 1, M 2 = max │f //(x)│, m 1 = min │f /(x)│, R=max {│x 0-x *│,│x 1-x *│}. 则以a,b 为初始值,由双点弦法迭代公式得到的序列超线性收敛于方程f(x)=0在区间[a,b]的唯一根x *。

(2)双点弦法的计算步骤同切线法类似。

但在计算时应注意收敛性的判断和初始值的选择。

例4 试导出计算)0(>a a 的单点弦法迭代公式,并用它计算3,准确到610-。

解 因为计算)0(>a a 等同于求方程02=-a x 的正根,令 x x f a x x f 2)(,)(2='-=,代入单点弦法迭代公式,得:,1,0,)()()()(2221=++=----=---=+n x c acx a x x c x c x x f x f c f x c x x nn n nn n n n nn n例5 分别用单点弦法和双点弦法求方程0133=--x x 在[1,2]内根的近似值, 精确到10-3【思路】参见单点弦法和双点弦法的计算步骤 解 方法一. 单点弦法()得方程根的近似值代入迭代式取初始值内且在区间内有根在区间)()()(,106)(,033)(]2,1[]2,1[01)2(,03)1(13)(1023n n nn n x f x f c f x c x x x x x f x x f x f f f x x x f ---==〉=''〉-='∴>=<-=--=+()()()()()()007432423.0,878406099.1087483863.0)087483863.0(1867768595.12867768595.1087483863.0,867768595.1890625.0)890625.0(175.1275.1890625.0,75.13)3(1121332211-==-----=-==-----=-==-----=x f x x f x x f x()()879378365.1,10000075196.0,000052236.0)(879378365.1000623407.0)000623407.0(1879303169.12879303169.1000623407.0)(879303169.1007432423.0)001130637.0(1878406099.12878406099.13455544≈≤=--==-----=-==-----=*-x x x x f x x f x 方程的近似根为 方法二. 双点弦法()得方程根的近似值代入迭代式,取且有根内方程在区间)()()(0)()2(00)()9.1(01)2(0159.0)9.1(2,9.106)(,033)(.0]2,1[01)2(,03)1(13)(1111023n n n n n n n x f x f x f x x x x x f f x f f f f x x x x f x x f x f f f x x x f --+---=>''⋅>''⋅>=>===>=''>-='=>=<-=--=()()()().879429134.11000009913.0,879429134.1001086562.0012996164.0001086562.0881093936.1879528266.1879528266.1001086562.0,879528266.1012996164.01012996164.02881093936.1881093936.1012996164.0,881093936.11)159.0(19.122433443322=≈∴≤=-=---===---===⨯---=*-x x x x x x f x x f x 方程根的近似值为四、 一般迭代法一般迭代法的基本思想:若方程f(x)=0在区间[a,b]上有唯一根x *,将方程变形为同解方程x=φ(x ),且φ(x )连续,则建立迭代公式x n+1=φ(x n )(n=0,1,…,)。

相关文档
最新文档