数值计算方法第二章

数值计算方法第二章
数值计算方法第二章

第二章 非线性方程数值解法

在科学计算中常需要求解非线性方程

()0f x = (2.1)

即求函数()f x 的零点.非线性方程求解没有通用的解析方法,常采用数值求解算法.数值解法的基本思想是从给定的一个或几个初始近似值出发,按某种规律产生一个收敛的迭代序列0{}k k x +∞=,使它逐步逼近于方程(2.1)的某个解.本章介绍非线性方程实根的数值求解算法:二分法、简单迭代法、Newton 迭代法及其变形,并讨论它们的收敛性、收敛速度等.

§2.1 二分法

一、实根的隔离

定义 2.1 设非线性方程(2.1)中的()f x 是连续函数.如果有*x 使*()0f x =,则称*x 为方程(2.1)的根,或称为函数()f x 的零点;如果有*()()()m f x x x g x =-,且()g x 在*x 邻域内连续,*()0g x ≠,m 为正整数,则称*x 为方程(2.1)的m 重根.当1m =时,称*x 为方程的单根.

非线性方程根的数值求解过程包含以下两步

(1) 用某种方法确定有根区间.称仅存在一个实根的有根区间为非线性方程的隔根区间,在有根区间或隔根区间上任意值为根的初始近似值;

(2) 选用某种数值方法逐步提高根的精度,使之满足给定的精度要求.

对于第(1)步有时可以从问题的物理背景或其它信息判断出根的所在位置,特别是对于连续函数()f x ,也可以从两个端点函数值符号确定出有根区间. 当函数()f x 连续时,区间搜索法是一种有效的确定较小有根区间的实用方法,其具体做法如下

设[,]a b 是方程(2.1)的一个较大有根区间,选择合适的步长()/h b a n =-,k x a kh =+,(0,1,,)k n =L .由左向右逐个计算()k f x ,如果有1()()0k k f x f x +<,则区间1[,]k k x x +就是方程的一个较小的有根区间.

一般情况下,只要步长h 足够小,就能把方程的更小的有根区间分离出来;如果有根区间足够小,例如区间长度小于给定的精度要求,则区间内任意一点可

视为方程(2.1)的根的一个近似.

例2.1 确定出方程32()3430f x x x x =-+-=的一个有根区间.

解 由22()3643(1)10f x x x x '=-+=-+>知()f x 为(,)-∞∞上的单调递增函数,进而()f x 在(,)-∞∞内最多只有一个实根.经计算知(0)0f <,(2)0f >,所以()0f x =在区间[0,2]内有惟一实根.

如果希望将有根区间再缩小,可以取步长0.5h =,在点0.5x =,1x =, 1.5x =计算出函数值的符号,最后可知区间[1.5,2]内有一个实根. 二、二分法

二分法是求非线性方程实根近似值的最简单的方法.其基本思想是将有根区间分半,通过判别函数值的符号,逐步缩小有根区间,直到充分逼近方程的根,从而得到满足一定精度要求的根的近似值.

设()f x 在区间[,]a b 上连续,()()0f a f b <,且方程(2.1)在区间(,)a b 内有惟一实根*x .记1a a =,1b b =,中点111()/2x a b =+将区间11[,]a b 分为两个小区间11[,]a x 和11[,]x b ,计算函数值1()f x ,根据如下3种情况确定新的有根区间:

(1) 如果1()0f x =,则1x 是所要求的根;

(2) 如果11()()0f a f x <,取新的有根区间2211[,][,]a b a x =; (3) 如果11()()0f x f b <,取新的有根区间2211[,][,]a b x b =.

新有根区间22[,]a b 的长度为原有根区间11[,]a b 长度的一半.对有根区间22[,]a b 施以同样的过程,即用中点222()/2x a b =+将区间22[,]a b 再分为两半,选取新的有根区间,并记为33[,]a b ,其长度为22[,]a b 的一半(如图2.1所示).

图2.1 二分法示意图

重复上述过程,建立如下嵌套的区间序列

1122[,][,][,][,]k k a b a b a b a b =????L L

其中每个区间的长度都是前一个区间长度的一半,因此[,]k k a b 的长度为

1

1()

2k k k b a b a --=

-

由*

[,]k k x a b ∈和()/2k k k x a b =+,得

*11

()()22

k k k k x x b a b a -≤

-=- 当k →∞时,显然,有*k x x →.总结得到如下收敛定理:

定理2.1 设()f x 在隔根区间[,]a b 上连续,且()()0f a f b <,则由二分法产生的

序列0{}k k x +∞=收敛于方程(2.1)在[,]a b 上的根*

x ,并且有误差估计

*1

()(1,2,)2k k

x x b a k -≤-=L (2.2) 设预先给定根*x 的绝对误差限为ε,要求*k x x ε-≤,只要1

()2

k b a ε-≤成立,

这样求得对分次数

ln()ln ln 2

b a k ε

--≥

. (2.3)

取k 为大于(ln()ln )/ln 2b a ε--的最小整数.此时k x 是方程(2.1)的满足精度要求的根近似值.

注:由于舍入误差和截断误差存在,利用浮点运算不可能精确计算函数值,二分法中的判断()0k f x =几乎不可能满足,取而代之为判断条件0()k f x ε<,其中0ε为根近似值的函数值允许误差限.

总结以上内容,给出如下算法 算法2.1 (二分法)

输入 端点,a b 、根的绝对误差限ε、根近似值的函数值允许误差限0ε; 输出 近似解c 或失败信息;

Step 1 用公式(2.3)计算最大迭代次数k ; Step 2 对1,,n k =L 循环执行Step 3~5; Step 3 ()/2c a b =+,计算()f c ;

Step 4 若0()f c ε<,则输出c ,end ;

Step 5 若()()0f c f b <,则a c =,否则b c =.

例 2.2 用二分法求32()4100f x x x =+-=在[1,2]上的根*x 的近似值,要求

*31

102

k x x --<

?. 解 由于在区间[1,2]上,(1)5f =-,(2)14f =,2()38(38)0f x x x x x '=+=+>,故()0f x =在[1,2]上有惟一实根*x .确定循环次数为11k =,利用二分法计算结果见表2.1.

二分法具有如下特点

(1) 优点:计算简单,对函数()f x 的光滑性要求不高,只要它连续,且在两端的函数值异号,算法收敛就可以保证;

(2) 缺点:只能求单实根和奇数重实根,收敛较慢,与1/2为公比的等比级数相同. 当函数()f x '连续时,方程(2.1)的实重根可转换为

()

0()

f x f x ='的实单根. 一般在求方程根近似值时不单独使用二分法,而常用它为其它数值方法提供初值.

§2.2 简单迭代法

简单迭代法是求解非线性方程根的近似值的一类重要数值方法.本节将介绍

简单迭代法的基本思想、收敛条件、收敛速度以及相应的加速算法. 一、简单迭代法的基本思想

简单迭代法采用逐步逼近的过程建立非线性方程根的近似值.首先给出方程根的初始近似值,然后用所构造出的迭代公式反复校正上一步的近似值,直到满足预先给出的精度要求为止.

在给定的有根区间[,]a b 上,将方程(2.1)等价变形为

()x x ?= (2.4)

在[,]a b 上选取0x 作为初始近似值,用如下迭代公式

1()k k x x ?+= (0,1,2,k =L ) (2.5)

建立序列0{}k k x +∞=.如果有*lim k k x x →∞=,并且迭代函数()x ?在*

x 的邻域内连续,对式(2.5)两边取极限,得

**()x x ?=

因而*x 是(2.4)的根,从而也是(2.1)的根.称()x ?为迭代函数,所得序列0{}k k x +∞=为迭代序列.将这种求方程根近似值的方法称为简单迭代法,简称迭代法. 例2.3 试用方程3()10f x x x =--=的不同形式的变形建立迭代公式,并试求其在1.5附近根的近似值.

解 利用方程的变形建立如下4种迭代公式

(1) 1k x +=,

(2) 3

11k k x x +=-

(3) 1k x += (4) 311

2

k k k x x x ++-=

取初值0 1.5x =,迭代计算,结果见表2.2.

例 2.3表明非线性方程的不同等价形式对应不同的迭代过程,从某一初值出发,有的迭代收敛快,有的收敛慢,甚至不收敛.那么迭代函数()x ?满足什么条件时才能保证迭代序列收敛? 迭代序列0{}k k x +∞=的误差如何估计? 怎样才能建立收敛速度快的迭代公式?

定理2.2 若函数()x ?在区间[,]a b 上具有一阶连续导数,且满足条件 ① 对任意[,]x a b ∈,有()[,]x a b ?∈;

② 存在常数L :01L <<,使得对任意[,]x a b ∈有()x L ?'≤成立. 则

(1) 方程()x x ?=在[,]a b 上有惟一实根*x

(2) 对任意0[,]x a b ∈,迭代公式(2.5)收敛,且*lim k k x x →∞

=

(3) 迭代公式(2.5)有误差估计式

*11k k k L

x x x x L --≤

-- (2.6) *

101k k L x x x x L

-≤-- (2.7)

(4) *

*1*

lim ()k k k

x x x x x ?+→∞-'=- (2.8)

证明 (1)构造函数()()g x x x ?=-,由条件①知()()0g a a a ?=-≤,()()0g b b b ?=-≥,因此()0g x =在[,]a b 上至少存在一个实根,又由条件②知当[,]x a b ∈时,()1()10g x x L ?''=-≥->,所以()0g x =在[,]a b 内存在惟一实根,即()x x ?=在[,]a b 内存在惟一实根,记为*x .

(2) 由0[,]x a b ∈及条件①知,[,]k x a b ∈(1,2,)k =L ,并且有1()k k x x ?+=,**()x x ?=,二者作差,并由微分中值定理得

***1()()()()k k k k x x x x x x ???ξ+'-=-=- (1,2,)k =L (2.9) 其中,k ξ介于k x 与*x 之间.结合条件②,得

**1k k x x L x x +-≤- (1,2,)k =L (2.10)

反复递推,有

**2*1*1100k k k k x x L x x L x x L x x ++-≤-≤-≤-≤≤-L , (1,2,)k =L 因01L <<,故*lim k k x x →∞

=. (3) 由式(2.10)得

***

1111*

1k k k k k k k k k k x x x x x x x x x x x x L x x

+++++-=-+-≤-+-≤-+-

从而

*11

1k k k

x x x x L

+-≤

-- (2.11)

又由于

111()()()()

k k k k k k k x x x x x x ???η+--'-=-=-

1

k k L x x -≤- (1,2,)k =L

(2.12)

其中k η介于k x 和1k x -之间.综合式(2.11)及式(2.12)得误差估计

*1

1k k k L

x x x x L

--≤

--

由式(2.12)反复递推,得

111210

k k k k k x x L x x L x x -----≤-≤≤-L

并代入式(2.6)得误差估计

*

11011k

k k k L L x x x x x x L L

--≤-≤--- (1,2,)k =L

(4) 由式(2.9)得

相关主题
相关文档
最新文档