§4 实根的近似计算
设f(x)为已知连续函数,ξ 是方程
f(x)=0
的根,这里方程可以是一般方程(代数方程或超越方程).在实际问题中都给出了根的范围,
例如代数方程
f(x)=a0xn+a1xn-1++an-1x+an=0 的根ξ 的范围是
ξ 1+
0
1
a max{a1,a2,,an}
因此可以假定方程在区间(a,b)内只有一个根(若有两个根,则将区间的一个端点换为使
f(x)=0 的点).并由函数的连续性可知,一般来说,在根的附近 f(x)是异号的(当 f(ξ )=0
或除外),所以在下面介绍的各种近似计算中,都假定f(a)和f(b)异号.
一、秦九韶法*
秦九韶法基本上是通过逐次试验求根的近似值的方法,试验次数愈多,所得近似值愈接 近根的真值.系统地继续这一过程,直至达到预定的有效数字的位数.现举例具体说明这个方 法.
例 求方程
f(x)=x3 18x300 (1) 的根到五位有效数字.
应用笛卡尔符号法则可知这个方程有一个正根.由于f(1)=-11,f(2)=14,这个正根在(1,2) 之间.
现在应用秦九韶法求这个方程的近似根.先设 p x1,这里 p表示 1 到所求根的距离.
应用多项式的泰勒公式(秦九韶法,见§2,一),得到关于p的方程
p3 3p2 21p110 (2) 其算式为
1
d 11 21 3 1
30 19 2 1
18 1 1
0 1 1
-
-
现在求纯小数 p的近似值,由于纯小数的三次方或二次方的值更小,可暂舍去方程(2)的
头两项而来计算21 p-11=0,即p=0.5238….但舍去的两项是正的,这个值显得太大.当p=
0.500 时,方程(2)的左边各项的和是仍是正数(0.375),而当p=0.400 时,方程(2) 的左边各
项的和是负数(-2.056).因此,设p0.4h(h0),即h=p-0.4,再应用多项式的泰勒公式,
得到关于h的方程
h3 4.2h223.88h2.0560 (3) 其算式为
* 我国古代数学家秦九韶在他所著的<<数书九章>>(1247),给出一个求代数方程的根近似值 的方法,这个方法一般书上都称为和纳法.实际上和纳在1819年才提出这个方法,比秦九 韶晚五百多年.
4 . 0
d 0 5 6 . 2 88 . 23 2 . 4 1
11 36
. 22 8 . 3 1
21 4 . 3 1
3 1 1
-
-
现在求小数h的近似值,舍去头两项,求得h=0.08609….因舍去两个正量,所得的h太大,
所以设h=0.08q(q0),即q=h-0.08.应用上述方法得到关于q的方程
q34.44q2 24.5712q0.1 1 8 2 0 80 (4) 同 上 面 一 样 , 从 方 程(4)的 后 两 项 求 得 q0.00481, 设 q0.004r (r 0) ,即
, 004 .
0
q
r 得到关于r的方程
r3 4.452r2 24.6 0 6 7 6 8r0.0 1 9 8 5 2 0 9 60 (5) 从后两项求出r的近似值r =0.0008…,因舍去的都是正量,所以方程(5)的根在 0.0008 和 0.00081之间.
现在把(2),(3),(4),(5),的各个近似值0.4,0.08,0.004,0.0008相加得总和0.4848,然后加到第一 次近似值1上,所以方程(1)的根在1.4848与1.48481之间,取五位有效数字为1.4848.
用秦九韶法还能求负的近似值.想求f(x)=0的一切负实根,可先求 f(-x)的正实根,然后 改变符号,即得负实根.
二、二分法
假定 f(x)在[a,b]上连续,且 f(a)f(b)<0(这里假定 f(a)<0,f(b)>0 ) , 取 区 间 [a,b] 的 中 点
2 b
a , 若
2
b
f a =0,则 f(x)=0 的根是ξ =
2 b
a .不然,若
2
b
f a >0,则令 a1=a,b1= 2
b
a ;若
2 b
f a <0,
则令 a1= 2
b a
,b1=b.于是形成新区间[a1,b1],它包含
f(x)=0的根ξ (图3.2).
再 取[a1,b1]的 中 点 2
1
1 b
a , 若
2
1
1 b
f a =0, 则ξ =
2
1
1 b
a
.若
2
1
1 b
f a >0, 则 令
a2=a1,b2= 2
1
1 b
a ;若
2
1
1 b
f a <0,则令 a2=
2
1
1 b
a
,b2=b1.于是又形成新区间[a2,b2],其长度
等于 2 2
a
b ,它包含方程f(x)=0的根ξ .…若允许误差ε =10k,则按这个过程作出区间[a1,b1], [a2,b2], [a3,b3],, [an,bn],n=
2 lg
) lg(b a
k ([x]表示x的整数部分),于是 ξ *=
2
n
n b
a
是方程f(x)=0的近似根,误差不超过
ξ -ξ * 1 2
n
a b 10k
二分法是求实根的近似计算中行之有效的最简单的方法,它只要求函数是连续的,因此 它的使用范围很广,并便于在电子计算机上实现.但是它不能求重根,也不能求虚根.
三、迭代法
把方程f(x)=0表成它的等价形式
x=(x) 或一般地
f1(x)=f2(x)
式中f1(x)是这样一个函数:对任意实数c,能容易算出方程f1(x)=c的精确度很高的实根.如果
对任意ax1b,ax2b,下式成立:
1 )
( ) (
1 1
2
2
q x f
x f
则下面迭代过程是收敛的.
首先从一个近似根x0出发(x0可由图解法粗略估计出),代入方程右边,解方程 f1(x)=f2(x0)
得到第一个近似根x=x1,再解方程
f1(x)=f2(x1) 得到第二个近似根x=x2,,类似地由第n个近似根 xn,解方程
f1(x)=f2(xn)
得到第n+1个近似根x=xn+1,于是得到一系列不同 精确度的近似根
x0, x1, x2,, xn,
它收敛于方程的根ξ (图3.3).
收敛速度(即误差消失速度)与an相当,而 a
0 1
1 2
x x
x x
用
0 2
2 1 2
2 x
x x
x
代替 x2可加速收敛.式中x1=x2-x1为 x1的一阶差分,
2x0=x1-x0为x0的二阶差分.
对 于 方 程 x=(x), 只 要(x)在[a,b]上 连 续 , 且
(x)
q<1,那末,它的根可由
x1=(x0) x2=(x1)
xn+1=(xn) 来接近(图3.4).
四、牛顿法
1.一般牛顿法
设f(x)在[a,b]上连续, f(x)也连续,且 f(x)0,f (x)0,f(a)f(b)<0(设f(a)<0,f(b)>0),
过点(a,f(a))(或点(b,f(b)))作曲线的切线:
) ) (
( f a
a x
a f
y
(或 ( ) ( )
b b f
x b f
y
)
它和x轴的交点为x=a-
) (
) (
a f
a f
(或x=b-
) (
) (
b f
b f
) 用迭代公式
xn+1=xn-
) (
) (
n n
x f
x f
并取初始值
x0=
0 ) ( ,
0 ) ( ,
x f b
x f a
当 当
可计算出方程f(x)=0的根的近似值(图3.5).误差-xn不超过 )
( min
) (
x f x f
b x a
n
一般选取的初始值x0,要满足不等式
2 ) ( ) ) (
( 0 2 f x0 f x0 x
f
2.近似牛顿法
如果 f(x)不易算出,可改用差商代替,得出近似牛顿法迭代程序:
xn+1=xn
) (
) (
) ( 2
h x f h x f
h x f
n n
n
3.逐次压缩牛顿法
求实系数代数方程
f(x)=a0xn+a1xn-1++an=0
的单实根时,用牛顿法求出一个实根x0后,可把多项式的次数降低一次,降低次数后的多项 式系数bk为
b0=a0
bk=ak+x0bk-1 (k=1,2,,n-1)
然后,再把求出的实根作为初始近似值,用同法求出再次降低次数的多项式的实根,依此求 出全部单实根.
4.牛顿法解非线性方程组 假设非线性方程组
0 ,
0 ,
y x
y x u
存在一组近似解P0=(x0,y0),且
0
0
y p
x y u x u
可用迭代公式:
xn+1=xn+
pn
n
y y u u
J
1
yn+1=yn+
pn
n
x x u u J
1式中Pn为点(xn,yn),Jn为雅可比式J在Pn的值:
pn
n
y x
y u x u J
五、弦截法(线性插值法)
假设 f(x)在[a,b]上连续, f(x),f (x)都不变号,且 f(a)f(b)<0(这里假定 f(a)<0,f(b)>0).
过点(a,f(a))和(b,f(b))的直线是:
a b
a x a f b f
a f y
) ( ) (
)
( (或
a b
x b a f b f
y b f
) ( ) (
)
( )
它和x轴的交点是x=a-
) ( ) (
) ( ) (
a f b f
a f a b
(或x=b-
) ( ) (
) ( ) (
a f b f
b f a b
).
(a)当 f(x) f (x)>0时,用迭代公式
a x
a f b f
b f x b b
xn n
0
1 ( ) ( )
) ( ) (
可求出方程的近似根(图3.6(a)).
(b)当 f(x) f (x)<0时,用迭代公式
b x
a f x f
a f a a x
x
n n n
0
1 ( ) ( )
) ( ) (
可求出方程f(x)=0的近似根(图3.6(b)).
六、联合法(牛顿法与弦截法联合使用)
假设f(x)在[a,b]上连续, f(x),f (x)都不变号,且f(a)f(b)<0(这里假定f(a)<0,f(b)>0).
(a)当f(a)与 f (x)同号时(图3.7(a)),用迭代公式 x1=a
) (
) (
a f
a f
x1=b
) ( ) (
) ( ) (
b f a f
b f b a
x2=x1
) (
) (
1 1
x f
x f
x2=x1
) ( ) (
) ( ) (
1 1
1 1 1
x f x f
x f x x
xn=xn-1
) (
) (
1 1
n n
x f
x f
xn=xn1
) ( ) (
) ( ) (
1 1
1 1
1
n n
n n
n
x f x
f
x f x x
可求出方程f(x)=0的近似根.
(b)当f(a)与 f (x)异号时(图3.7(b)),用迭代公式 x1=a
) ( ) (
) ( ) (
a f b f
a f a b
x1=b
) (
) (
b f
b f
x2=x1
) ( ) (
) ( ) (
1 1
1 1 1
x f x f
x f x x
x2=x1
) (
) (
1 1
x f
x f
xn=xn-1
) ( ) (
) ( ) (
1 1
1 1
1
n n
n n
n
x f x f
x f x x
xn=xn1
) (
) (
1 1
n n
x f
x f
可求出方程f(x)=0的近似根.
误差 xn xn xn 或 xn xn xn . 七、抛物线法(穆勒法)
求实系数n次方程
f(x)=xn+a1xn-1++an=0 (1) 的近似根.
可先求出f(x)=0的一个根x=r,则 f(x)=(x-r)g(x)
=(x-r)(xn-1+b1xn-2++bn-1)
式中g(x)是n-1次多项式,然后再求出g(x)的根,依此类推,可以求出f(x)=0的全部实根来.
首先选取x轴上三点:x0,x1,x2,通过曲线y=f(x)上的三点:(x0,f(x0)), (x1,f(x1)),(x2,f(x2))作一抛
物线 y=P(x)(即拉格朗日插值多项式,见第十七章,
§2,三),抛物线与x轴有两个交点,取离x2较近的一 点作为x3;再过三点(x1,f(x1)), (x2,f(x2)), (x3,f(x3))作一抛 物线(图3.8中的虚线),它与 x轴有两个交点,取离 x3较近的一点作为x4,依此法作出点xi-2, xi-1, xi,再 过三点(xi-2,f(xi-2)), (xi-1,f(xi-1)), (xi,f(xi))作一抛物线与x轴 有两个交点,取离xi较近的一点作为xi+1,等等.
对于预先给定的允许误差,当迭代过程进行到
xi+1-xi<
时,就取xi+1作为f(x)=0的一个近似根.
由此得到的序列是收敛的.极限值
n
xn
lim ,就是
方程f(x)=0的根.
迭代步骤如下:
(1)根据经验对上式(1)可取
x0=-1, x1=1, x2=0 作为初始值,于是
f(x0)=(-1)n+(-1)n-1a1+-an-1+an
f(x1)=1+a1++an f(x2)=an
或用x=0附近的近似值
f(x0)an-2-an-1+an
f(x1) an-2+an-1+an
f(x2)=an
(2)设
i=
2 1
1
i i
i i
x x
x
x , i=1+i=
2 1
2
i i
i i
x x
x x
gi=f(xi-2)i2 -f(xi-1)ii +f(xi)i
hi=f(xi-2)i2
-f(xi-1)i2
+f(xi)(i+i) 由此根据xi-2, xi-1, xi 计算出i, i, gi, hi,并根据下列公式计算出i+1
i+1=
i i i i
i
i i
g x f h h
x f
) ( 4
) ( 2
2
(hi>0,根式取正号;hi<0,根式取负号)
当f(xi-2)=f(xi-1)=f(xi)时,取i+1=1.
(3)根据公式
xi+1=i+1(xi-xi-1)+xi 计算出xi+1
八、林士谔—赵访熊法(劈因子法)
由于解二次方程是容易的,因此在求实系数代数方程 f(x)=xn+a1xn-1++an-1x+an=0
的复根时,如果找出f(x)的一个二次因子,就等于找到方程的一对复根.
设f(x)的一个近似二次因子(任意选取)为
(x)=x2+px+q 可用下述方法使它精确化:
(1)用 (x)去除f(x),得到商式Q(x)和余式R(x),即 f(x)= (x)Q(x)+R(x)
=(x2+px+q)(xn-2+b1xn-3++bn-3x+bn-2)+(r1+r2) 式中商式与余式的系数可用下面的递推公式算出:
bk=ak-pbk-1-qbk-2, k=1,2,,n b-1=0, b0=1
r1=bn-1=an-1-pbn-2-qbn-3
r2=bn+pbn-1=an-qbn-2
(2)用 (x)去除xQ(x)得到余式
R[1](x)=R11x+R21`
式中R11,R21,由下面的递推公式算出:
ck=bn-pck-1-qck-2, k=1,2,,n-3 c-1=0, c0=1
R11=bn-2-pcn-3-qcn-4 R21=-qcn-3
(3)用 (x)去除Q(x)得到余式
R[2](x)=R12x+R22`
式中R12,R22,由下面的公式算出:
R12=bn-3-pcn-4-qcn-5
R21=bn-2-qcn-4
(4)解二元一次线性方程组
2 22
21
1 12 11
r R
u R
r R
u R
得到u,
.(5)修正后的二次式为
[1](x)=x2+(p+u)x+(q+
)如果它还不够精确,再重复(1)至(5)的步骤进行修正,直到足够精确为止.
林士谔—赵访熊法求实系数代数方程的复根,其优点是避免了复数运算,缺点是程序比 较复杂.
九、下降法
对任意实系数超越方程组
0 ) , , , (
0 ) , , , (
0 ) , , , (
2 1
2 1 2
2 1 1
n n
n n
x x
x f
x x
x f
x x
x f
(1)
定义目标函数
F(x1,x2,,xn)=
n
i
fi 1
2
如果 F(1,2,,n)<(为在一定精确度下给定的适当小的正数),则认为1,2,,n为方程组
(1)的解.
具体计算步骤如下:
(1)任取一组初始值x1(0),x2(0),,xn(0)(全不为零),设已按照下述过程计算到第m步得到 一组值:x1(m)
,x2(m),,xn(m)
(2)计算
Fm=F(x1(m)
,x2(m)
,,xn(m)
)
(3)若Fm<,则x1(m)
,x2(m),,xn(m)是所求的解,否则计算n个偏导数:
i m i
m
H x
F 1
)
(
[F(x1(m)
,x2(m),,xi(m)
+Hi,, xn(m))-F(x1(m)
,x2(m),,xn(m))]
Hi=xi(m) i=1,2,,n
(4)计算
xi(m+1)
= xi(m)
) (m i
m
m x
F
, i=1,2,,n 式中
n
i
m i
m m n m
m m
x F
x x
x F
1
2
) (
) ( ) ( 2 ) (
1 , , , )
(
得到一组{xi(m+1)},再重复(2),(3),(4)的计算.