当前位置:
文档之家› 数值计算方法第八章 非线性方程求解
数值计算方法第八章 非线性方程求解
0.42
0.4
4
6
8
10
12 k
14
16
18
20
22
定理8.2(局部收敛性定理) 若函数 ( x) 在
x
*
的邻域 U ( x* , ) 连续可微,x *
是方程 x ( x) 的解,且 ( x) 1,则存在正数
* , 使得对任意 x0 [ x* , x* ], 迭代序列
eps=5e-5;dx=1;x0=0.4;k=4; fprintf('It.no=%2d x[%2d]=%10.6f',k,k,x0) plot(k,x0,'r*') hold on while(dx>eps) k=k+1; x=1/(x0+1)^2; dx=abs(x-x0)/(1+abs(x)); plot(k,x0,'r*') fprintf('It.no=%2d x[%2d]=%10.6f',k,k,x) if mod(k+1,3)==0,fprintf('\n'),end x0=x; end fprintf('\n满足精度要求的迭代次数k=%2d',k) x
x0 [a, b]
迭代序列
x n 1 g ( x n ), (n 0,1, )
都收敛于x*,并有
Ln x * xn x1 x0 1 L
(8-2-2)
注:用定理8、2比定理8、1方便。 如上面的函数取
20 40 g ( x) 2 g ( x) 2 , 2 x 10 ( x 10) 40 x 80 ( x) 2 x [1,2] g 2 1 2 ( x 10) 11 迭代收敛。 误差估计式表明L越小迭代收敛越快。
第八章 非线性方程及非线性方程组的解法
主要内容: 1、对分区间法 2、简单迭代法 3、牛顿法与弦截法 4、抛物线法 5、非线性方程组的解法
研究对象:迭代方法、收敛条件、收敛速度
k-重零点:
若x=a处f(x)满足f(a)=0,f(L)(a)=0,(L=1,2,--,k-1) ,f(L)(a)=/=0(k=1,2,---) (8-1-1) 则称x=a为f(x)的k-重零点(方程f(x)=0的k-重根). 方程f(x)=0有k-重根等价函数可分解为
f ( x) ( x a) k ( x), (a) 0
(8-1-2)
8-1、对分区间法
对分法的基本思想:
通过计算隔根区间的中点,逐步将隔根 区间缩小,从而可得方 程的近似根数列{xn }.
设f(x)在区间[a,b]上连续,有f(a)f(b)<0 则由连续函数的介值定理,f(x)在(a,b)必有 零点,称(a,b)为方程f(x)=0的有根区间.
例2、用对分区间法求f(x)的唯一实根,其误 差不超过 1 4
2 10
其中 解:
f ( x) x3 10 x 20 0
易知
f (1) 12 10 20 0
f (2) 2 2 20 20 0
f ( x) 3x 2 10 0, x (, ) f ( x)
function [x_star,k]=bisect923(fun,a,b,ep) % 二分法解f(x)=0 %fun(x)为求根的函数f(x),a,b为初值区间的端点 %ep为精度(默认值为1e-5),当(b-a)/2<ep时终止计算 %x_star为迭代成功时的方程的根,k表示迭代次数 %当输出迭代次数k为0时表示在此区间没有根存在 if nargin<4 ep=1e-5;end fa=feval(fun,a);fb=feval(fun,b); if fa*fb>0 x_star=[fa,fb];N=0;return;end k=1; while abs(b-a)/2>ep x=(a+b)/2;fx=feval(fun,x); if fx*fa<0 b=x;fb=fx; else a=x;fa=fx; end k=k+1; end x_star=(a+b)/2;
单调增的, f ( x) x 2 10 x 20 0 有唯一实根,且在[1,2]内。
对分区间的次数
1 ln(2 1) ln( 10 4 ) 2 n 1 13.28 n 14 ln 2
x (计算结果见教材) 14 1.5945741 即为所求。
fun=inline('x^3+10*x-20','x'); [x,k]=bisect923(fun,1,2,0.0005) x= k= 1.5942 11
It.no= 4 , x[ 4]= 0.400000, It.no= 5, x[ 5]= It.no= 6, x[ 6]= 0.438459, It.no= 7, x[ 7]= It.no= 8 , x[ 8]= 0.454516, It.no= 9, x[ 9]= It.no=10 ,x[10]= 0.461090,It.no=11, x[11]= It.no=12, x[12]= 0.463759,It.no=13, x[13]= It.no=14 ,x[14]= 0.464839,It.no=15, x[15]= It.no=16, x[16]= 0.465276,It.no=17 ,x[17]= It.no=18, x[18]= 0.465452,It.no=19 ,x[19]= It.no=20, x[20]= 0.465523,It.no=21, x[21]= It.no=22 ,x[22]= 0.465552 满足精度要求的迭代次数k=22 x = 0.4656
lim a n lim bn x *
n n
且x =x*是方程f(x)=0的根。取xn=(an+bn)/2为 近似根,其误差为
bn a n b a (8-1-3) x xn n 1 2 2 上述方法求非线性方程f(x)=0近似根称为---对分区间法. 算法:8-1(见教材186页)
8-2、简单迭代法
已知方程的根得近似值,由递推公式
xn 1 g ( xn )
产生序列逼近真值。 f ( x) 0 x ( x),
若 xn 收敛于x* , ( x)在x*处连续
x* lim xn 1 lim ( xn ) ( x* )
n n
k
7 8
xk
f ( xk )符号
隔根区间
[1.359375,1.375] [1.359375,1.3671875]
1.3671875 1.36328125
+ -
所以有 1 * x (1.359375 1.3671875) 1.363 2
fun=inline('x^3+4*x^2-10','x'); [x,k]=bisect923(fun,1,2,0.005) x= k= 1.3633 8
x [a, b]
a g ( x) b;
(2)存在常数0<L<1,使
x, y [a, b]
g ( x) g ( y ) L x y
则方程x=g(x)在[a,b]内有唯一根x*,且对 x0 [a, b] ,迭代序列
x n 1 g ( x n ), (n 0,1, )
例3
已知方程10 x x 2 0在[0.3,0.4]内有
k
一根,用两种不同的迭代公式 (1)xk 1 10 x 2 (2)xk 1 lg( xk 2) 进行迭代,观察所得序列的收敛性。
解: 计算结果如下表:
k 0 1 2 3 4 (1)xk
0.3 -0.0047 -1.0108
xn 1 ( xn )
收敛于 x 证明思路:1)迭代函数在邻域内是收敛的;2)迭代 函数在正方形内。 ----------迭代函数满足压缩映象原理的两个条件。
*
1 迭代法的收敛速度(收敛阶) )
(2)xk
0.3 0.3617 0.3732 0.3753 0.3757
例3‘用不动点迭代格式
xk 1 1/ ( xk 1)2 , (k 0,1, 2,)
求解方程
f ( x) x( x 1)2 1 0
在区间[0,1]的一个实根,初始值x0=0.4, 精确到4位有效数字
即为所求。(称为简单迭代法)
注:在例1中取
x x 3 11x 20 等价方程
3 n
x0 1.5 ,若改写原方程为
xn 1 x 11xn 20
x1 0.125, x2 21.376953, x3 10023.861, 迭代序列发散! 20 若改写原方程为等价方程 xn 1 x 2 10 n
设f(a)<0,f(b)>0.取x0=(a+b)/2 若f( x0)=0,则x=x0是方程f(x)=0的解。 否则若f( x0) <0,取a=x0, b1=b; 若f( x0) >0,取a1=a, b1= x0,有
ba [a1 , b1 ] [a, b], b1 a1 2
且f(x)在区间[a1,b1]上连续,满足(a1)f(b1)<0.
*
注:给定误差限,可求对分区间的次数。
ba ln(b a) ln x xn n 1 n 1 ln 2 2
*
(8-1-4)
例1、
用二分法求方程 x 3 x 2 10 0在
[1 2]内根的近似值,要求绝 对误差不超过 , 1 102. 2 解: f ( x) x 3 4 x 2 10在[1 2]上 ,