数值计算方法第二章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

()0f x =

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

§ 二分法

一、实根的隔离

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

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

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

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

对于第(1)步有时可以从问题的物理背景或其它信息判断出根的所在位置,特别是对于连续函数()f x ,也可以从两个端点函数值符号确定出有根区间.

当函数()f x 连续时,区间搜索法是一种有效的确定较小有根区间的实用方法,其具体做法如下

设[,]a b 是方程的一个较大有根区间,选择合适的步长()/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 足够小,就能把方程的更小的有根区间分离出来;如果有根区间足够小,例如区间长度小于给定的精度要求,则区间内任意一点可视为方程的根的一个近似.

例 确定出方程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.5

x =

计算出函数值的符号,最后可知区间[1.5,2]内有一个实根. 二、二分法

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

设()f x 在区间[,]a b 上连续,()()0f a f b <,且方程在区间(,)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 的一半(如图所示).

图 二分法示意图

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

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 →.总结得到如下收敛定理:

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

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

x ,并且有误差估计

*1

()(1,2,)2k k x x b a k -≤

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

()2

k b a ε-≤成立,

这样求得对分次数

ln()ln ln 2

b a k ε

--≥

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

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

0ε为根近似值的函数值允许误差限.

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

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

Step 1 用公式计算最大迭代次数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 =.

例 用二分法求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 =,利用二分法计算结果见表.

相关文档
最新文档