当前位置:文档之家› 数值分析1 直接法

数值分析1 直接法

非线性方程与非线性方程组解法 “方程是很多工程和科学工作的发动机”。在工程和科学计算中,如电路和电力系统计算、非线性力学、非线性微分和积分方程、非线性规划等众多领域中,常涉及到非线性方程或非线性方程组的求解问题。 【例如】求代数方程 084236256xxxx的根。 【如】求解方程组

yxyyxxsin2.0cos7.0cos2.0sin7.0

诸如此类的问题,归结为寻求函数方程的零点,即求x*使 0*)(xf ………………(1)

x*称为方程或方程组(f为向量函数时)的根或零点。 由于自然现象和实际问题的复杂性,对函数方程和方程组求解问题,没有哪一种方法能求出一般方程的准确解。因此,求其数值解就非常必要了。 先讨论非线性方程求根问题。

§1直接法

直接法的理论依据:设f(x)在区间[a,b]上连续,且f(a)

•f(b)<0,根据连续函数的性质,f(x)在[a,b]内一定有根存在。此时称[a,b]为方程f(x)=0的有根区间。进而,若再加上严格单调,则[a,b]内有且仅有一根。 直接法:是指通过对函数f(x)求值计算,逐步缩小有根区间,最后求出满足精度的近似根的方法。

一、逐步搜索法----确定有根区间

设f(x)在[a,b]内连续,为求其实单根存在区间,取一点0x(如0

x

=a),并取一确定的正数h,称为步长,令khxxk0,观察)(kxf的符号变化情况,当0)()(1kkxfxf时,[1,kkxx] 便是一个有根区间,称上述逐步确定有根区间的方法为逐步搜索法。这种方法的计算量,与步长的选取相关,步长h选取的足够小,就可使有根区间足够精确,当然计算量也较大。 逐步搜索法适用于粗略地估计根的计算问题,一般此方法只用来隔离有根区间是只有一个实单根的小区间。

【例1】 求0343)(23xxxxf的有根区间。 解 因为f(x)在(-∞,+∞)内连续,而且 01)1(3463)(22xxxxf 所以f(x)为单调增加函数,则f(x)=0在(-∞,+∞)内最多只有一个实根. 又因为f(x)<0,f(2)>0,所以方程的唯一实根在[0,2]内,[0,2]就是所求的有根区间.

【例2】 证明方程03)(2xexfx有3个实根. 证:由于f(x)在(-∞,+∞)内连续,要证方程有3个实根,即要证f(x)与ox轴有3个交点,只须证明有3个有根区间,且每个区间内只有一个根。 Matlab中有根区间的确定: x=-5:0.01:5;y=exp(x)-3*x.^2;plot(x,y,'r',x,0*x),grid on title('The Image of f(x)=exp(x)-3*x.^2')

xlabel('\fontsize {12} \fontname {宋体} 图1') %axis square

-5-4-3-2-1012345-80-60-40-20020406080The Image of f(x)=exp(x)-3*x.2

¡Í¼£± 也可转到Matlab指令窗中用zoom in放大 二、二分法

理论依据:设函数f(x)在[a,b]上连续,严格单调,且有f(a)﹒f(b)<0。 二分法的基本思想:反复对分区间,从而逐步缩小有根区间

步骤:取[a,b]的中点2bax,计算)(xf,

若)(xf=0则2baxx为所求; x* 否则(1)若0)()(xfaf,则令xbaa11, a x b (2)若0)()(bfxf,则令,,11bbxa 形成新的有根区间],[11ba。对],[11ba重复上述手续,则又可得],[22ba。

如此反复二分下去,得到一系列有根区间:],[],[],[2211bababa],[kkba



其中每个区间长度都是前一个区间长的一半,因此,],[kkba的长度 kkkabab2/)(趋于零(当k时)

【注】由区间套原理,必有x属于所有区间,该点就是方程之根。 序列

}}{{kkba及中点2kkkbax的序列}{kx都收敛于x。

终止条件:12/)(2/)(k

kkkababxx………(2)

由此得到需二分的最少次数k 【例3】 求052)(3xxxf在区间(2,3)内的根,要求准确到小数点后的第二位。 解 :1)有根区间的确定:这里a=2,a=3,f(2)=--1<0,f(3)=16>0, 而且),3,2(,023)(2xxxf因此方程有唯一的根落在(2,3)内。

2)二分次数的确定: 由 005.02/)(1kab 得7k 即005.07xx 3)二分步骤: 取21223x,则0625.5)5.2(f,因此根在(2,2.5)内,

再取25.0225.2x,890625.1)25.2(f,因此根在(2,2.5)内,如此二分下去,得

表1 二分计算结果 k 中点kx )(kxf 有根区间),(kkba

0 f(2)=-1,f(3)=16 (2,3) 1 2 3 4 5 6 2.5 2.25 2.125 2.0625 2.09375 2.109375 5.625 1.890625 0.345703 -0.351318 -0.008942 0.166836 (2,2.5) (2,2.25) (2,2.125) (2.0625,2.125) (2.09375,2.125) (2.09375,2.109375) 7 2.1015625 0.0785622 (2.09375,2.1015625) 取第7次二分的中点x=(2.09375+2.1015625)/2=2.10 二分法的计算机算法程序: %Erfen.m function y=refen(fun,a,b,esp) if nargin<4 esp=1e-4;end if feval(fun,a)*feval(fun,b)<0 n=1;x=(a+b)/2; while abs(b-a)/2>esp %or x>esp if feval(fun,a)*feval(fun,x)<0 b=x;x=(a+b)/2; elseif feval(fun,x)*feval(fun,b)<0 a=x;x=(a+b)/2; else y=x;esp=10000; end n,a,b %output n,a,b n=n+1; end y=c; elseif feval(fun,a)==0 y=a; elseif feval(fun,b)==0 y=b; else disp('these,may not be a root in the interval'); end n 调用二分法函数求方程的根: erfen('fun',2,3,0.005)

二分法的优点:算法直观、简单,且总能保证收敛; 缺点:收敛速度较慢。

三、黄金分割法 在二分法中,每次将有根区间[a,b]对分,从而经判断将有根区间缩减一半,达到了逐步缩小有根区间的目的。 黄金分割法的基本思想:如果在[a,b]内适当插入两点,21xx和,而把有根区间分为三段,通过比较函数值,来缩短有根区间。 问题:如何设置两个插入点的位置,使得在计算同样多函数值的条件下,有根区间能更快缩短? 问题的解决:希望根存在区间的长度按比例β缩小(0<β<1),因此可对称地取)(),)(1(21abaxabax,若设[a,b]

的长为1个单位,而且],[],[21bxxa和的长度相等,即bxax21,若使每次搜索都按同一比率缩短区间,则要 abaxaxax221

即 11 或 012 其有用的根是382.01,618.0215。另外一个根是负数。 按上述比例因子β去分割线段ab,被古人称为黄金分割,用黄金分割来搜索方程的根就是黄金分割法或称为优选法。 计算机算法: 步1, )(),(),(),)(1(221121xffxffabaxabax

步2,若2ab≤ε,则root2ba并转出口;否则做步3; 步3,若021ff则a1x,b2x转步1,否则,若0)(2fbf则做步4,0)(2fbf则做步5;

步4,)(),(,,222211xffabaxxxxa转步2; 步5, )(),)(1(,,111122xffabaxxxxb转步2; 【例4】 求方程016xx在区间[1,2]内的根,使精确到ε=0.05。 解: 本题中a=1,b=2,而f(1)=-1<0,f(2)=61>0,按上述算法)12(382.011x=1.382,

32401.15)(,618.1)12(618.01,5850392.4)(221xfxxf,

由于0)()(21xfxf而且0)()2(2xff因此根在[1,1.618]内,此时取382.12x,则

1x=1+0.382(1.618-1)=1.236076,2,3306606.1)(1abxf而,再

转第3步继续计算 计算过程程序: %Gold_separate.m a=input('a='); b=input('b='); eps=input('eps='); beta=(sqrt(5)-1)/2; x1=a+(1-beta)*(b-a);x2=a+beta*(b-a);f1=fun(x1);f2=fun(x2);n=1,a,b y1(n)=x1;y2(n)=x2;z1(n)=a;z2(n)=b; while abs((b-a)/2)>=eps

相关主题