科学计算—理论、方法
及其基于MATLAB的实现与分析
解非线性方程(组)
(一)直接法
二分法:
设方程fx0在区间a,b上有唯一解,并且fafb0,如方程
fxx2.3x32xsinx0.30 (2)
首先要确定适当的包含根的区间,这可以依据闭区间上连续函数的介值定理来确定,例如,f11sin10,f22sin20.90,所以方程 (2)至少有一个实根属于区间[1,2],图1表明区间[1,2]中只含有一个根,显然方程 (2)的根不易直接求得。在区间[-1,0]、[0,1]和[1,2]的情形,如下图1所示
例1 plotNL_fun01.m
plotNL_fun01
The Image of f(x)=x3-2.3*x2+x*sin(x)+0.310.50-0.5-1-1.5-2-2.5-1-0.500.511.52 图1 clear
x=-1:0.05:2;
f=x.^3-2.3*x.^2+x.*sin(x)+0.3; plot(x,f,'r',x,0*x,'k')
title('The Image of f(x)=x^3-2.3*x^2+x*sin(x)+0.3') xlabel('\\fontsize {12} \\fontname {宋体} 图1') axis square
二分法的求根过程:用x*表示方程fx0在区间a,b上的根,对于给定的精度要求0,取区间a,b的中点x1ab2,并按下式进行判断:
fx10x1x**fx1fa0x[a,x1] (2) fxfb0x*[x,b]11以fx1fa0为例,如果
ba2,那么区间a,x1内的任何一点都可以作为
方程fx0的近根。二分法适用于一个方程的场合,收敛速度是线性的,迭代次数的估计:
ba2NNlnbalnln2 (3)
(二)迭代法
首先将方程(组)写成等价的迭代形式:
fx0xgx (7)
由此确定了相应的迭代法:
xn1gxn (8)
xa,b0 对于非线性方程(组)的迭代法来说,同样面临收敛性问题,为说明收敛性条件,先看下面的例子:
例2:
让我们来求如下方程的根
fxx2.3x32xsinx0.30
下面,我们采用迭代法求方程 (1)位于区间[1,0]中的根,为此构造迭代算法如下:
xgx0.3xsixnx2.3x (9)
n1,2, (10)
xn1gxn0.3xnsixnnxn2.3xn,
在区间[1,0]中任取一个迭代初值x0,如取初值x0EqutIteration.m:
open EqutIteration.m
0.8.执行下面的程序:
EqutIteration N = 29
ITERATION EXAMPLE FOR SOLVING EQUATION-0.3-0.4-0.5-0.6-0.7-0.80510152025300.50-0.5-1-1.5051015202530 图3 下面欲求1.5附近的根,为此分别取初值x01.4,x01.9,迭代的结果如下:open Ex_IteraConv01 Ex_IteraConv01
N = 31
说明迭代收敛性条件的例子543210-1-2-3-1.5-1-0.500.511.522.53 图4 收敛性定理:(收敛的充分性条件) 设方程fx0在[a,b]上存在唯一解,xgx是方程的等价形式,如果1、gx在[a,b]上连续可微;
2、对任何x[a,b],gx[a,b]; 3、gx则对任何x0L1,
[a,b],由迭代算法
xn1gxn,
(11)
生成的序列xn收敛于方程fx0在[a,b]上的唯一解。 注1:满足方程x*gx*的点称为映射ygx的不动点;
注2:具有性质gxL1的映射ygx称为压缩映射;
因为x*gx*,xn1gxn,
xx*gx*gx*n1ngxxnx*x**n1xgx*xxLxnx*1nLnx*,
0x一点注释:当方程(组)为线性方程(组)时,gx就是迭代格式 中的矩阵M,而gx就对应着矩阵M的范数M. 例3: Ex_IteraConv01.m
open Ex_IteraConv01
x=[-1:0.01:2];
y=(0.3+x.*sin(x))/(x.*(2.3-x)); plot(x,y,x,x) hold on m=1; z=1.4;
while m<15
y=(0.3+z*sin(z))/(z*(2.3-z));;
plot([z z],[z y],'r',[z y],[y y],'r') z=y; m=m+1; pause end
例4: Ex_IteraConv02.m
open Ex_IteraConv02
Ex_IteraConv02
xMxf
检验非线性迭代的收敛性条件举例-0.6-0.7-------------- Differential Curve of g(x)-0.8-0.9-1-1.1-1.211.11.21.31.41.51.61.71.81.92 图7 1.5039上面的例子表明了两点:在根x0附近,迭代法(10)不满足gx1的条
件,导致迭代法序列xn不收敛于此根;在根x00.4148附近,迭代法(10)尽管也不满足gx1的条件,但所生成的序列xn收敛于此根.
迭代收敛的图像解释
例5 在用迭代法求解方程f(x)2x30的正根时,构造迭代函数
2(x)xc(x3),试选取适当的c使迭代计算收敛.
解: 由于根x3,(x)12cx,故取c使112c31.
为使收敛速度快,取c使
123c0,c1412314,
因此迭代公式为x果如下:
x1214k1xk(xk3),k0,1,2.取初值x=2,迭代计算,数值结
0(23)1.75,14(1.7522x21.753)1.7343750,(1.73437502
x31.7343750143)1.73420923.显然,这里选取的迭代公式收敛,并且收敛速度较快.
收敛速度:如果有
limxn1xxnx**pnc(当p1时,要求0c1) (29)
则称迭代的收敛速度是p阶的。特别地,p1时称为线性收敛(Linear Convergence),p1时称为超线性收敛,p2时称为平方收敛(Quadratic Convergence).
注:(1) 若压缩因子0(2) 若压缩因子LL1,则迭代过程xk1(xk)为线性收敛.
0,则迭代过程xk1(xk)为超线性收敛.
(3) 一般地,收敛阶p越大,迭代过程收敛越快.
关于收敛速度的一个重要定理:
如果
1、gx在区间a,b上p2次连续可微;
2、对任何x[a,b],gx[a,b]; 3、gxL1;
[a,b]处,
4、在gx的不动点x*
p1***x0gxgxg p*gx0
则对任何x0[a,b],由迭代算法xn1gxn生成的序列xn具有p阶收敛速度。
3xk)例如,在求解方程x2(x)0,(x)6/x*330正根的时,对于迭代格式xk130,所以由定理
12(xk,因为
,(x*)2/5可知p2,该迭代过
程为2阶收敛.
常用的迭代法
1 牛顿迭代法 (Newton Iteration): 1)一个方程的场合:
xn1xnfxnfxn, (13)
牛顿迭代法构造说明:设方程右端的函数fx在所确定的包含唯一根x*的区间a,b内具有一阶连续导数fx,x0a,b,那么由一阶微分的性质,有
fxfxfxx*00*x00
(14)
由式(14),可得
xx0*fx0fx0 (15)
从而得到迭代格式
xgxxfxfx (16)
以及牛顿迭代法(14).
牛顿迭代法的几何解释
例4: open NewtonIter01
2)方程组的场合:
对于给定的非线性方程组
f1x1,x2,,xnfx,x,,x212nFx0 (17) fx,x,,xnn12记
f1x1f2Fx1Txfnx1f1x2f2x2fnx2f1xnf2xnfnxn (18)
式(18)的右端称为向量值函数Fx的Jacobian矩阵.
设n元向量值函数FxRn在其定义域Rn内的一点x0的邻域内具有二阶连续偏导数,则对于该邻域内的任意一点x*,
FxFx*0FxxTx0*x0
(19)
举例说明:以二元函数为例,
fx,yfx0,y0fx,yfx0,yfx0,yfx0,y0fx0,yxxx0fx0,y0yyy0fx0,y02fx0,y0fx0,y0yy0xx0yy0 xxyyfx0,y0x (20)
xx0fx0,y0yyy0fx0,y0xfx0,y0xx0yyy0fx0,y0fx,yfx0,y0xfx0,y0xx0 (20) yyy0进而,对于一般的n元函数有
fxfx0fxxxx
00T (21)
将上述结论应用于n元向量值函数Fx的每一个分量,既有公式(19)所述的结论。
进一步地,当该邻域内的点x*是方程组(17)的根时,有
FxFx*0FxxTx01*x00
(22)
Fx0*0xxTxFx
0 (23)
这表明:
x0Fx0*0xxxTx1Fxx0* (24)
由此得到如下迭代算法:
xn1FxnxnTx1FxnxnFxnFxn (25)
xn1xnxn
NEWTON 迭代法的几何意义
2 弦位法
xfxnn1xnfxnxn1 nfxn1x例5: SecantIter01.m 3关于Aitken加速法
xngx 1nxn1gxn1 xxx21n1n1nxn1xn12xn1xn算法(27)能够加速的根据是
xn1x*Lxnx*x*n1xnx*x*xn1x*Lxn1x*xn1xx* n1xNewton迭代法的收敛速度是2阶的;
弦位法的收敛速度是超线性的。
MATLAB 求解方程(组)功能简介
(26)
(27)
(28)
fzero: Find zero of a function of one variable
例7: Solvefun1zero.m % FUN1ZERO.m Solvefun4zero.m % FUN4ZERO.m
fsolve: Solve a system of nonlinear equations
例8: SolveNLE01.m % NLE01.m SolveNLE02.m % NLE02.m SolveNLE03.m % NLE03.m
roots: Polynomial roots
例9: polyRoot01.m
SOLVE: Symbolic solution of algebraic equations 例10: SymSolEqu01.m
因篇幅问题不能全部显示,请点此查看更多更全内容